Per Tastendruck eine Sounddatei abspiele

Registriere dich jetzt, um exklusive Vorteile zu genießen! Als registriertes Mitglied kannst du Inhalte herunterladen und profitierst von einem werbefreien Forum.
Mach mit und werde Teil unserer Community!
  • Servus ihr Lieben,


    wieder einmal ein Thema, bei welchem ich fst verzweifle und mit den ganzen Beispielen im netz nicht weiterkomme.


    Ich habe am GPIO27 (Pin 13) einen Taster nach +3,3V (Pin 17) angeschlossen. Wenn ich diesen betätige, soll eine Audio-Datei abgespielt werden. MEHR NICHT!


    Grundsätzlich funktionierts. Aber die Abspielerei klappt nicht, weil die Taste augenscheinlich prellt und die Prellsgnale den Mplayer mehrfach hintereinander starten.

    Python
    #!/usr/bin/env python
    
    from gpiozero import Button
    import subprocess
    
    button = Button(27, False)
    
    while True:
        if button.is_pressed:
            subprocess.Popen(["/home/pi/batch/df0bj-testmeldung"])

    Es sieht für mich so aus, als würde der Subprocess x-fach gestartet! Wenn ich mein Script durch "date" ersetze, dann sehe ich, das selbst der einfachste Tastendruck 5 mal das Datum ausgibt.


    Kann ich das in Python entprellen? Wenn ja, wie?


    Ich freue mich über eine konstruktive Rückantwort.


    P.S. Der Code stammt hier aus dem Forum aus einer ähnlichen Frage von 2015.

  • Go to Best Answer
    • Best Answer

    Versuchs mal damit:

    Ungetestet!

  • Sehr schön!


    Um es zu erklären... Sieh Dir mal das Beispiel in der Doku https://gpiozero.readthedocs.i…table/recipes.html#button an! Wenn Du dieses Skript

    Python
    from gpiozero import Button
    
    button = Button(2)
    
    while True:
        if button.is_pressed:
            print("Button is pressed")
        else:
            print("Button is not pressed")

    im Terminal stertest, dann wird Dir fortlaufend angezeigt, dass der Button gedrückt ist oder eben nicht und das ohne Pause.


    Mit dem oben gezeigten, offenbar funktionierenden Skript, wird eine Funktion aufgerufen, wenn der Button gedrückt wird. Analog zu diesem Beispiel in der Doku:


    Noch ein Hint: Mit gpiozero und auch grundsätzlich sollte man gegen GND schalten. Erstens ist gpiozero so ausgelegt und zweitens lebt der RPi dann länger, falls man sich mal verzettelt hat. ;)