Dieser Code schaltet die LED nicht ein und aus.
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()
aber wenn ich die Zahl in der Schleife ausdrucke, funktioniert es:
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()
Irgendeine Idee warum das so ist?
Antworten:
Versuchen Sie, Ihre
print
durch eine zu ersetzentime.sleep(0.05)
. Dieses seltsame Verhalten kann auftreten, wenn der GPIO-Ausgang zu schnell von HOCH auf NIEDRIG umgeschaltet wird, um eingestellt / erkannt / gesehen zu werden. Erhöhen / verringern Sie die Schlafdauer, bis das Programm einwandfrei funktioniert (erhöhen) und schnell genug (verringern).quelle
Rollen Sie Ihre Schleife ab, um zu verstehen, was hier passiert:
verwandelt sich in:
Wie Sie sehen können, folgt das Einstellen des Stifts unmittelbar nach dem Hochdrehen (in der Nähe von). Tatsächlich bleibt Ihre LED die meiste Zeit in einem Zustand (dh was wir mit bloßem Auge wahrnehmen können).
Beheben Sie dies wie folgt (für einen Arbeitszyklus von 50:50):
quelle
print()
dass der ursprüngliche Code funktioniert, darin besteht, dass das Schreiben auf den Bildschirm ein wahnsinnig langsamer Prozess ist und im Wesentlichen so funktioniert, wiesleep(1)
Sie es vorgeschlagen haben.