RPi.GPIO Problem mit Flanken GPIO.BOTH

  • Hallo,

    seit Tagen suche ich nach einer Loesung fuer folgendes Problem:


    Ich moechte wenn ein Schalter wechselt ( ein/aus) mittels der steigenden oder fallenden Flanke subprocess.call("/home/pi/mein_script") ausfuehren.


    Habe verschiedene scripts probiert, aber bei allen funktionierte es nicht richtig. Wenn der Schalter aus ist, wird subrocess ununterbrochen ausgefuehrt, nur bei einem Wechsel mit einer steigenden Flanke wird es einmal ausgefuehert. :conf::conf::conf:

    Wie muss es programmiert werden , damit der subproess wirklich nur beim wechseln des Eingangs ausgefuehrt wird.


    subprocess soll 1x ausgefuehrt werden wenn Flanke, rising oder falling ist. Nicht wenn Eingang 1 oder 0 ist.

    Hier eines der scripte die ich probiert habe.


    Vielen Dank fuer die Hilfe

    gwaag

  • Hallo,


    ungetestet:

    Gruß, noisefloor

  • Hallo noisfloor,

    vielen Dank fuer Deinen Vorschlag.


    Leider geht das auch nicht. Laut Doku muesste es Pin 24, nicht 18 sein bei Verwendung von pgiozero. Aber auch das geht nicht.

    zudem kommt ein Fehler wenn script in kammandozeile gestartet wird:


    AttributeError: 'DigitalInputDevice' object has no attribute 'when_changed'


    Nicht mal ein simpler code wie dieser spricht GPIO 24 (pin18) an.


    Wenn ich obiges script in der kommandozeile starte, zeigtes keine Fehlermeldung an, bei betaetigen des Tasters Button(24) oder (18)

    passiert rein gar nichts, say_hello wird nicht angezeigt.

    Kann dann mit CRl C das script auch nicht abrechen, muss ssh abbrechen mich mit ssh wieder neu einlogen


    Mit RPi.GPIO geht mindestens GPIO 24 /Pin 18, ist also die Verdrahtung ok.

    gpiozero fuer python3 ist auch installiert. sudo apt-get update && upgrade zeigt 0 an.


    Warum geht bei mir gar n ichts habe ich etwas total vergessen??


    gruss

    gwaag

  • Hallo hyle,

    Ja so wie Du geschrieben hast, so gestartet, es ist ausfuehrbar chmod 755.

    sudo pip3 insatll gpiozero = sudo: pip3: command not found

    Ich habe mich jetzt noch weiter eingelesen und mit button = Button(24, pull_up=False) printet es jetzt say_hello,

    d.h der Befehl pull_up=False hat gefehlt.


    Bleibt noch im scrip von noisefloor:

    AttributeError: 'DigitalInputDevice' object has no attribute 'when_changed' und


    Kann dann mit CRl C das script auch nicht abrechen, muss ssh abbrechen mich mit ssh wieder neu einlogen


    Gruss und Danke

    gwaag

  • Hallo,

    habe es jetzt hin bekommen, funktioniert einwandfrei, keine Probleme mehr.

    Danke fuer die Hilfe.

    gruss

    gwaag

    Edited once, last by gwaag ().

  • Kann dann mit CRl C das script auch nicht abrechen, muss ssh abbrechen mich mit ssh wieder neu einlogen

    Hast du hierfür auch schon eine Lösung gefunden?

    Wenn nein probiers mal so:

  • Hallo,


    gut das es funktioniert. Und gut, dass du Rpi.GPIO los bist.


    Meine Idee kam daher, dass die ABC `gpiozero.Pin` das Event `when_changed` kennt. Nur scheint `gpiozero.DigitalInputDevice` davon doch nicht zu erben bzw. davon abgeleitet zu sein.


    Gruß, noisefloor