ich bin noch Anfänger mit Python und habe im forum-raspberrypi.de keine Antwort auf mein Problem gefunden. Ich weiß nicht, ob man den Link des Themas dessen Forums hier posten darf? Mein Problem steuert zuletzt mehr in Richtung Python-Programmierung, weswegen ich hier eher auf eine Antwort hoffen kann. Aber nun zum Sachverhalt:
Ich habe einen Raspberry Pi 3B+ und ich möchte erreichen, dass über den GPIO 22 und 23 LEDs geschaltet sind, welche abwechselnd für je eine Sekunde leuchten sollen. Ich möchte dies mit der Blynk app steuern (virtual pin 1), welches zwar prinzipiell aber noch nicht endgültig funktioniert. Was ich konkret erreichen will:
Wenn der virtuelle Pin 1 aus ist, sollen beide LED-Stränge 22 & 23 aus sein. Sobald der V1-Pin eingeschaltet wird soll für 1 Sekunde nur der GPIO 22 an und der 23er aus sein. Danach soll GPIO 22 aus und der 23er an sein, wieder für 1 Sekunde. Dieses abwechselnde "blinken" soll solange laufen bis der V1-Pin ausgeschaltet wird.
Am Wochenende habe ich versucht einen Code aufzusetzen, welchen ich erst einmal mit Visual Studio testen wollte ohne den ganzen LED/GPIO-Code, da diesen VS ja nicht kennt. Ziel ist es mit der "test"-Funktion den Status des virtuellen Pins 1 zu simulieren. Nach Ausführen diesen Codes ist das Ergebnis an der Konsole aber noch folgendes:
wait
1
2
wait
wait
Code dazu:
Code: Alles auswählen
#!/usr/bin/env python3
from time import sleep
import threading
def loop():
print(1)
sleep(1)
print(2)
def endloop():
print("wait")
class MyCallback():
def register(self, function):
self.cb=function
class setInterval():
def __init__(self, interval, function, o):
self.interval=interval
self.function=function
self.o=o
self.o.register(self.callback)
self.stopEvent=threading.Event()
thread=threading.Thread(target=self.__setInterval)
thread.start()
#self.o.cb=
def callback(self, val):
if val == ["1"]:
self.run()
else:
self.cancel()
def __setInterval(self):
#while not self.stopEvent.wait():
self.function()
def run(self):
self.stopEvent.clear()
loop()
def cancel(self):
self.stopEvent.set()
endloop()
#@blynk.handle_event("write V1")
#def write_virtual_pin_handler(self, pin, value):
#self.o.cb(value)
#temp
def test(self, value):
self.o.cb(value)
def main():
myc=MyCallback()
inter=setInterval(2, loop, myc)
inter.test(1)
sleep(2)
inter.test(0)
sleep(1)
inter.test(1)
if __name__ == "__main__":
main()
Viele Grüße,
Stefan