Buzzer mit Python Skript ansteuern

  • Guten Abend,

    ich nutze das folgende Skript um einen Buzzer auf einem pi anzusteuern. Das Skript selber funktioniert. Dieses Skript erzeugt einen Signalton (abwechselnd high/low), bis es mit Strg+C abgebrochen wird. Nun möchte ich, dass das Skript nur 5x high/low Ausgabe erzeugt und sich dann automatisch beendet. Meine Versuche dieses mit einer while Schleife zu lösen, klappten leider nicht. Kann mir jemand helfen?

    Danke u. Gruß Micky

    Einmal editiert, zuletzt von Micky (14. April 2015 um 23:46)

    • Offizieller Beitrag

    [code=php]
    #!/usr/bin/env python
    import time
    import RPi.GPIO as GPIO
    GPIO.setmode (GPIO.BOARD)
    PIN=15
    GPIO.setup(PIN, GPIO.OUT)
    def beep(no):
    for x in range(0,no):
    GPIO.output(PIN,GPIO.HIGH)
    time.sleep(0.5)
    GPIO.output(PIN,GPIO.LOW)
    time.sleep(0.5)
    try:
    beep(5)
    except KeyboardInterrupt:
    GPIO.cleanup()[/php]

  • Guten Abend,

    hab das gepostete Skript getestet, die Schleife funktioniert. Er wiederholt also das Signal 5x beendet aber am Ende nicht das Signal, sondern gibt dann nur noch ein DauerSignal. Jemand ne Idee, wie ich den Buzzer am Ende zum Schweigen bringe ohne ihn an die Wand zu werfen?

    edit: Nach etwas probieren, bekomme ich den Buzzer nun nach dem Ausführen der Schleife automatisch zum schweigen.. :D

    Vielen Dank euch beiden für die Unterstützung, hier das funktionierende Skript. Grüße M.

    Einmal editiert, zuletzt von Micky (15. April 2015 um 21:18)

  • Sieht ja nicht gerade toll aus so ohne Leerzeilen - soll wohl kurz wirken? :s
    Zwei Code Zeilen kann man sich auch da noch sparen. Und was soll "no" sein? Sag NEIN zu beep? :-/

    [code=php]
    #!/usr/bin/python
    import time
    import RPi.GPIO as GPIO

    PIN=15

    GPIO.setmode(GPIO.BOARD)
    GPIO.setup(PIN, GPIO.OUT)

    def beep(num, pause=0.5):
    for x in range(0, (num*2)):
    GPIO.output(PIN, not GPIO.input(PIN))
    time.sleep(pause)
    try:
    beep(5)
    except KeyboardInterrupt:
    pass
    GPIO.cleanup()[/php]

    Das cleanup wurde zudem nur ausgeführt wenn das Script via STRG+C unterbrochen wurde. Steht es aber außerhalb except wird es bei erreichen des Scriptendes ausgeführt, also nachdem beep(5) beendet wurde und somit wird der GPIO wieder zurückgesetzt und der Buzzer geht mit Sicherheit aus.

    Das "not" bewirkt dass der entgegen gesetzte Fall gesetzt wird. Wenn also "GPIO.input(PIN)" -> False ausgibt da der PIN noch nie eingeschaltet wurde (was also False oder LOW oder 0 entspricht), wird er stattdessen auf True gestellt also HIGH bzw 1. Beim nächsten Durchlauf gibt "GPIO.input(PIN)" dann True aus und "not" sorgt dafür das es auf False gestellt wird usw. Deshalb wird dann auch die doppelte Anzahl an durchläufen benötigt da ich das anschließende zurücksetzen und sleep ebenfalls weggelassen habe - praktisch macht das aber keinen Unterschied.

    Und als Krönung des ganzen kann man auch die Pause zwischen den beeps mit übergeben, tut man das nicht wird der Standard Wert 0.5 genutzt.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!