Este código não liga e desliga o led.
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21,GPIO.OUT)
for number in range(0,10):
GPIO.output(21,GPIO.LOW)
time.sleep(1)
GPIO.output(21,GPIO.HIGH)
GPIO.cleanup()
mas quando imprimo o número no loop, ele funciona:
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21,GPIO.OUT)
for number in range(0,10):
GPIO.output(21,GPIO.LOW)
time.sleep(1)
GPIO.output(21,GPIO.HIGH)
print(number)
GPIO.cleanup()
Alguma idéia do porquê disso?
Respostas:
Tente substituir o seu
print
por umtime.sleep(0.05)
. Você pode ocorrer esse comportamento estranho, já que o GPIO.output é alternado muito rapidamente de HIGH para LOW para ser definido / detectado / visto. Aumente / reduza a duração do sono até que o programa funcione bem (aumente) e rápido o suficiente (diminua).fonte
Desenrole seu loop para entender o que está acontecendo aqui:
torna-se em:
Como você pode ver, a definição do pino baixo segue (próximo a) imediatamente após o alto. De fato, seu LED permanecerá em um estado durante a maior parte do tempo (isto é, o que podemos perceber a olho nu).
Corrija assim (para um ciclo de trabalho de 50:50):
fonte
print()
o código original funciona é porque a gravação na tela é um processo incrivelmente lento e está essencialmente agindo conforme osleep(1)
sugerido.