Funktionen gleichzeitig ablaufen lassen - Threads ungeeignet?
Verfasst: Samstag 15. Oktober 2022, 13:35
Hallo zusammen,
ich bin noch blutiger Anfänger und versuche seit zwei Tagen eine Lösung für mein erstes Projekt zu finden. Habe mich schon durch x Foren gewühlt
aber noch keine Lösung gefunden. Ich wäre Euch sehr dankbar wenn Ihr mir helfen könntet, so langsam bin ich mit meinem Latein am Ende... danke!
Folgende Situation:
Ich habe an einem Pi einen IR-Bewegungssensor angeschlossen. Ebenfalls angeschlossen ist ein 4-fach Relais Modul.
Nun möchte ich dass wenn der IR-Sensor eine Bewegung registriert und seinem GPIO-Port meldet, der Pi zwei der Relais "anzieht" (ebenfalls über GPIO-Ports) und dann unterschiedlich lange hält bevor er sie wieder abfallen lässt.
Dann geht alles wieder in Wartestellung bis wieder eine erneute Bewegung erkannt wird und beide Relais wieder angezogen werden usw.
Natürlich könnte ich die Relais erstmal beide anziehen, dann ein time.sleep setzen, dann das erste Relais abfallen lassen, dann ein time.sleep setzen
und dann das zweite Relais abfallen lassen...
Ich habe mir aber gedacht dass das auch schöner gehen muss - insbesondere wenn mehr als zwei Relais schalten möchte wird das ja irgendwann ein etwas unschöner "Stapel" Programmcode.
Meine Idee war für jedes Relais eine eigene Funktion zu bauen und diese dann aufzurufen wenn sicher der IR-Bewegungsmelder an seinem GPIO-Port meldet.
Soweit so gut, aber wie schaffe ich es zwei (oder mehr) Funktionen gleichzeitig anzustoßen?
Versucht habe ich es mit Threads - funktioniert zwar gut, aber ganz genau nur ein Mal, da ich dann die Meldung bekomme dass jeder Thread nur ein Mal laufen kann.
Ich benötige das allerdings quasi endlos... gibt es eine Möglichkeit das "nur-ein-Mal-Laufen" zu umgehen?
Oder lässt sich vielleicht mit dem "Event Detect" bzw. einem ähnlichen Befehl auch mehr als eine Funktion aufrufen???:
GPIO.add_event_detect(PIRSENSOR_GPIO, GPIO.RISING, callback=FunktionRelais1)
Kann mir das jemand bitte an einem einfachen Beispiel erklären?
Vielen Dank und Euch allen ein schönes WE !!!
ich bin noch blutiger Anfänger und versuche seit zwei Tagen eine Lösung für mein erstes Projekt zu finden. Habe mich schon durch x Foren gewühlt
aber noch keine Lösung gefunden. Ich wäre Euch sehr dankbar wenn Ihr mir helfen könntet, so langsam bin ich mit meinem Latein am Ende... danke!
Folgende Situation:
Ich habe an einem Pi einen IR-Bewegungssensor angeschlossen. Ebenfalls angeschlossen ist ein 4-fach Relais Modul.
Nun möchte ich dass wenn der IR-Sensor eine Bewegung registriert und seinem GPIO-Port meldet, der Pi zwei der Relais "anzieht" (ebenfalls über GPIO-Ports) und dann unterschiedlich lange hält bevor er sie wieder abfallen lässt.
Dann geht alles wieder in Wartestellung bis wieder eine erneute Bewegung erkannt wird und beide Relais wieder angezogen werden usw.
Natürlich könnte ich die Relais erstmal beide anziehen, dann ein time.sleep setzen, dann das erste Relais abfallen lassen, dann ein time.sleep setzen
und dann das zweite Relais abfallen lassen...
Ich habe mir aber gedacht dass das auch schöner gehen muss - insbesondere wenn mehr als zwei Relais schalten möchte wird das ja irgendwann ein etwas unschöner "Stapel" Programmcode.
Meine Idee war für jedes Relais eine eigene Funktion zu bauen und diese dann aufzurufen wenn sicher der IR-Bewegungsmelder an seinem GPIO-Port meldet.
Soweit so gut, aber wie schaffe ich es zwei (oder mehr) Funktionen gleichzeitig anzustoßen?
Versucht habe ich es mit Threads - funktioniert zwar gut, aber ganz genau nur ein Mal, da ich dann die Meldung bekomme dass jeder Thread nur ein Mal laufen kann.
Ich benötige das allerdings quasi endlos... gibt es eine Möglichkeit das "nur-ein-Mal-Laufen" zu umgehen?
Oder lässt sich vielleicht mit dem "Event Detect" bzw. einem ähnlichen Befehl auch mehr als eine Funktion aufrufen???:
GPIO.add_event_detect(PIRSENSOR_GPIO, GPIO.RISING, callback=FunktionRelais1)
Kann mir das jemand bitte an einem einfachen Beispiel erklären?
Vielen Dank und Euch allen ein schönes WE !!!