Este código no enciende ni apaga el 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()
pero cuando imprimo el número en el bucle 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()
¿Alguna idea de por qué es eso?
Respuestas:
Intenta reemplazar tu
print
por atime.sleep(0.05)
. Puede ocurrir este comportamiento extraño cuando GPIO. La salida se cambia demasiado rápido de ALTO a BAJO para ser configurado / detectado / visto. Aumente / reduzca la duración del sueño hasta que el programa funcione bien (aumente) y lo suficientemente rápido (disminuya).fuente
Desenrolle su bucle para comprender lo que está sucediendo aquí:
se convierte en:
Como puede ver, el ajuste del pin bajo sigue (cerca de) inmediatamente después de ponerlo en alto. En efecto, su LED permanecerá en un estado la mayor parte del tiempo (es decir, lo que podemos percibir a simple vista).
Solucionelo de esta manera (para un ciclo de trabajo de 50:50):
fuente
print()
que el código original funciona es porque escribir en la pantalla es un proceso increíblemente lento y esencialmente actúa comosleep(1)
lo sugirió.