Timeout Fehler

  • 1. Eine grundlegende Syntax-Frage: Warum stehen die Argumente in Zeile 33 q.put((datetime.now(), channel)) in doppelter Klammer?

    Damit ins Queue ein Tuple eingetragen wird: (zeit, gpio)

    Sofern es einen Eintrag im Queue gibt wird das dann auch wieder passend ausgelesen: start_time, pin = queue.get()

    2. wenn ich in der main() Schleife außerdem überprüfen müsste, ob das Callback mit steigender oder fallender Flanke ausgelöst wurde, ist es dann besser zwei verschiedene callback-Funktionen zu definieren, oder ist es besser das Callback mit einer dritte Variablen aufzurufen?

    Nein, zwei Interrupt-Service-Routinen (callback) sind nicht nötig und bringen auch kein Vorteil, eher im Gegenteil(*)... Der Callback wird der auslösende GPIO-Pin (channel) übergeben, ob es dann ein RISING oder FALLING edge war kann man ebenfalls ins Queue eintragen lassen und gut ist's:

    Python
    def interrupt_event(q, channel):
        q.put( (datetime.now(), channel, GPIO.input(channel)) )
    #...
    start_time, pin, state = queue.get()

    Was man machen könnte wäre 2 Queues zu erzeugen, eins für Rising und das andere für Falling... Aber die Handhabung wird dadurch umständlicher..




    (*) Es wird nur ein einziger extra Thread für ISR gestartet. Gibt es mehrere Callback-Funktionen werden die nacheinander verarbeitet, nicht parallel, und somit bremst es dann aus.