Dauer bei GPIO.input

  • Hiho!


    Ich versuche dem Pi mit einem Taster an GPIO17 verschiedene Sachen mitzuteilen ;)
    Es soll zum Beispiel nach 2 Sekunden Gedrückthalten des Tasters ein Script "X" ausgeführt werden. Nach 5 Sekunden jedoch Script "Y".


    Ist das überhaupt über die Inputzeit möglich?
    Sprich in der While-Schleife global die Startzeit festlegen und dann die beiden if-Abfragen mit GPIO.input(17) == 1 and time() - start_time = 2 bzw. 5?



    Danke für eure Ideen


    Grüße

  • Du kannst doch in etwa steuern wie lange das Programm für einen Durchlauf der while Schleife braucht, indem du z.B. time.sleep(1) reinschreibst.
    So würde dann jeder Durchlauf etwa 1s dauern. Dann kannst du in der Schleife eine Variable hochzählen, die dann die Zeit in Sekunden angibt.

  • Kommt darauf an in welcher sprache du das programmieren willst, ein weg wäre wie schon Daaaaniel geschrieben hat ein Skript in einem eigenen Thread das dann z.B.: auf 500ms oder 1s Laufzeit gebracht wird (mit sleep Funktion) und die Durchläufe zählt. Eine weitere wäre wie du schon selbst festgestellt hast die Start Zeit der Positiven Flanke fest zu halten und dann mit der aktuellen zeit zu vergleichen ob die differen größer oder gleich deiner gewünschten zeit ist. Der erste Weg geht nur in Sprachen die Multithread fähig sind (z.B.: C/C++, Java, Python ...), sollte dafür aber recht effizent sein da das Skript während den Wartezeiten keine bzw. wenig Prozessorzeit beansprucht. Der zweite Weg geht in so ziemlich jeder Sprache (z.B.: C/C++, Java, Python, PHP, PERL ...), ist aber etwas Recourcenhungriger da das Programm permanent und ohne unterbrechung läuft.

  • Hmm, was auch noch eine Möglichkeit wäre mit Interupts (volatile ist da das Stichwort) zu arbeiten. Dann müsste du schon resourcendsparend den Anfang bekommen.
    Aber dazu sollten wohl am besten die C-Profis was sagen

  • Anbei das Script für einen Tester an GPIO 17, der nach 3 Sekunden gedrückt halten Script A und nach 1 Sekunde drücken und danach losgelassen Script B ausführt.