Ten kod nie włącza ani nie wyłącza diody 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()
ale kiedy wydrukuję liczbę w pętli, działa:
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()
Masz pomysł, dlaczego tak jest?
Odpowiedzi:
Spróbuj zastąpić swój
print
przeztime.sleep(0.05)
. Może wystąpić takie dziwne zachowanie, ponieważ GPIO.output jest zbyt szybko przełączane z WYSOKIEGO na NISKI, aby go ustawić / wykryć / zobaczyć. Zwiększ / zmniejsz czas trwania snu, aż program będzie działał poprawnie (zwiększ) i wystarczająco szybko (zmniejsz).źródło
Rozwiń pętlę, aby zrozumieć, co się tutaj dzieje:
zamienia się w:
Jak widać, ustawienie niskiego pinu następuje (blisko) natychmiast po jego podniesieniu. W efekcie Twoja dioda LED pozostanie w jednym stanie przez większość czasu (czyli to, co możemy zobaczyć gołym okiem).
Napraw to w następujący sposób (dla cyklu pracy 50:50):
źródło
print()
którego oryginalny kod działa, jest to, że pisanie na ekranie jest niezwykle powolnym procesem i zasadniczo działa tak, jaksleep(1)
sugerowałeś.