Laden und Entladen von GPIOS um eine Schleife zu erzeugen

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
cbg
User
Beiträge: 2
Registriert: Dienstag 14. August 2018, 22:17

Hi Leute,

da ich total der Newbie im Python bin aber Großes vorhabe :D brauche ich etwas Hilfe von den Profis.

Ich würde gerne, dass ein Button einen Film startet. Dann soll der Film starten und zum Ende durchlaufen.
Das geht auch schon aber:

Nun sollte man bei erneutem Drücken des Buttons wieder der Film starten.
Das geht noch nicht.

Was mache ich falsch, bzw. was muss ich machen?
Hier mein Skript soweit:

Code: Alles auswählen

import RPi.GPIO as GPIO
import subprocess as sp

GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.wait_for_edge(17, GPIO.FALLING)

sp.call(['omxplayer', '-o', 'both', '--no-keys', '--no-osd', '/home/pi/sintel_trailer-480p.mp4'], shell=False)
GPIO.cleanup()

LG
cbg
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

Du brauchst eine Schleife. `subprocess` als `sp` abzukürzen ist ungewöhnlich und mal sollte generell keine kryptischen Abkürzungen benutzen.

Code: Alles auswählen

import RPi.GPIO as gpio

BUTTON_PIN = 17

def main():
    gpio.setmode(gpio.BCM)
    gpio.setup(BUTTON_PIN, gpio.IN, pull_up_down=gpio.PUD_UP)
    try:
        while True:
            gpio.wait_for_edge(BUTTON_PIN, gpio.FALLING)
            subprocess.call(['omxplayer', '-o', 'both', '--no-keys', '--no-osd', '/home/pi/sintel_trailer-480p.mp4'], shell=False)
    finally:
        gpio.cleanup()

if __name__ == '__main__':
    main()
cbg
User
Beiträge: 2
Registriert: Dienstag 14. August 2018, 22:17

Sirius3 hat geschrieben: Mittwoch 15. August 2018, 08:19 Du brauchst eine Schleife. `subprocess` als `sp` abzukürzen ist ungewöhnlich und mal sollte generell keine kryptischen Abkürzungen benutzen.

Code: Alles auswählen

import RPi.GPIO as gpio

BUTTON_PIN = 17

def main():
    gpio.setmode(gpio.BCM)
    gpio.setup(BUTTON_PIN, gpio.IN, pull_up_down=gpio.PUD_UP)
    try:
        while True:
            gpio.wait_for_edge(BUTTON_PIN, gpio.FALLING)
            subprocess.call(['omxplayer', '-o', 'both', '--no-keys', '--no-osd', '/home/pi/sintel_trailer-480p.mp4'], shell=False)
    finally:
        gpio.cleanup()

if __name__ == '__main__':
    main()

uha... das hätte ich so einfach nicht hinbekommen!

Fetten Dank also!

Für alle die einen Loop/Schleife also benötigen:

Code: Alles auswählen

#!/usr/bin/env python
import RPi.GPIO as gpio
import subprocess

BUTTON_PIN = 17

def main():
    gpio.setmode(gpio.BCM)
    gpio.setup(BUTTON_PIN, gpio.IN, pull_up_down=gpio.PUD_UP)
    try:
        while True:
            gpio.wait_for_edge(BUTTON_PIN, gpio.FALLING)
            subprocess.call(['omxplayer', '-o', 'both', '--no-keys', '--no-osd', '/home/pi/sintel_trailer$
    finally:
        gpio.cleanup()

if __name__ == '__main__':
    main()

Benutzeravatar
noisefloor
User
Beiträge: 3843
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

anstatt da ältere RPi.GPIO möchtest du lieber das neuere gpiozero-Modul benutzen. Das hat die bessere / schönere / einfachere API.

Gruß, noisefloor
Antworten