Этот код не включает и не выключает светодиод.
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()
но когда я печатаю число в цикле, оно работает:
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()
Есть идеи, почему это так?
Ответы:
Попробуйте заменить ваш
print
наtime.sleep(0.05)
. Такое странное поведение может возникнуть, когда GPIO.output слишком быстро переключается с ВЫСОКОГО на НИЗКОЕ, чтобы быть установленным / обнаруженным / видимым. Увеличивайте / уменьшайте продолжительность сна, пока программа не будет работать нормально (увеличение) и достаточно быстро (уменьшение).источник
Разверните ваш цикл, чтобы понять, что здесь происходит:
превращается в:
Как вы можете видеть, установка штифта на низкий уровень следует (почти) сразу после его поворота на высокий уровень. Фактически ваш светодиод будет оставаться в одном состоянии большую часть времени (то есть то, что мы можем воспринимать невооруженным глазом).
Исправьте это так (для рабочего цикла 50:50):
источник
print()
по которой исходный код работает, заключается в том, что запись на экран является безумно медленным процессом и, по сути, действует так, какsleep(1)
вы предлагали.