2017-02-04 6 views
0

Ich bin an einem Projekt von meiner eigenen Arbeit, und ich bin an einem Punkt, wo ich weiß nicht mehr, was zu tun ..mit Python-Projekt stecken

ich einige Töne zu implementieren bin versucht, in mein Projekt, wo ich etwas Taktgefühl drücke. Schalter und sie sollten Geräusche machen .. Ich bin ein kompletter Neuling mit Python so fand ich ein Stück Code etwas ähnliches ...

import os 
from time import sleep 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(23, GPIO.IN) 
GPIO.setup(24, GPIO.IN) 
GPIO.setup(25, GPIO.IN) 

while True: 
    if (GPIO.input(23) == False): 
     os.system('mpg123 -q binary-language-moisture-evaporators.mp3 &') 
    if (GPIO.input(24) == False): 
     os.system('mpg123 -q power-converters.mp3 &') 
    if (GPIO.input(25)== False): 
     os.system('mpg123 -q vader.mp3 &') 
    sleep(0.1); 

Ich möchte der erste Ton in einer Endlosschleife während input(23)==false laufen tun und Wenn eine der anderen beiden Tasten gedrückt wird, stoppt sie die erste und spielt die andere nur einmal ab und kehrt zur Überprüfung zurück, ob dies erforderlich ist, um mein Projekt zu beenden, aber ich habe keine muss wirklich Python von Grund auf neu lernen (zumindest für jetzt). zumindest einige Richtlinien würden sehr geschätzt werden.

+0

Drei Schalter geben 8 mögliche Eingangszustände. Es ist nicht klar aus Ihrer Beschreibung, was Sie für jede Kombination von Eingaben haben wollen. Beginnen Sie mit einem Diagramm, das dies verdeutlicht. Es wird dann möglich sein, die "if" -Anweisungen zu überarbeiten. –

+0

die Schalter sind unabhängig ... 1 Schalter sollte 1 Ton tun ... man muss in einer Schleife sein, während der Knopf gedrückt wird, bis ich einen der anderen zwei Knöpfe drücke, dann sollte es alle anderen Töne stoppen und den Ton entsprechend der gedrückten Taste – grmlje

Antwort

0

Dieser Code scheint zu funktionieren (wie ich es simuliert habe). Sie müssen es möglicherweise ändern, um Ihrem Bedarf jedoch zu entsprechen. Zum Beispiel, wenn beide 24 und 25 gedrückt werden, welche sollte gespielt werden (24 hat Vorrang vor 25 im Code).

import subprocess 
from time import sleep 
import RPi.GPIO as GPIO 

GPIO.setmode(GPIO.BCM) 
GPIO.setup(23, GPIO.IN) 
GPIO.setup(24, GPIO.IN) 
GPIO.setup(25, GPIO.IN) 

proc1 = '' 
proc2 = '' 
proc3 = '' 
while True: 
    if GPIO.input(24) == False: 
     if proc3: 
      proc3.kill() 
      proc3 = '' 
     if proc2 and proc2.poll() is None: 
      proc2.kill() 
      proc2 = '' 
     if not proc1 or proc1.poll() is not None: 
      proc1 = subprocess.Popen(['mpg123','-q','power-converters.mp3']) 
    elif GPIO.input(25) == False: 
     if proc3: 
      proc3.kill() 
      proc3 = '' 
     if proc1 and proc1.poll() is None: 
      proc1.kill() 
      proc1 = '' 
     if not proc2 or proc2.poll() is not None: 
      proc2 = subprocess.Popen(['mpg123','-q','vader.mp3']) 
    elif GPIO.input(23) == False: 
     if not (proc1 and proc1.poll() is None) and not (proc2 and proc2.poll() is None): 
      if not proc3 or proc3.poll() is not None: 
       proc3 = subprocess.Popen(['mpg123','-q','binary-language-moisture-evaporators.mp3']) 
    elif proc3 and proc3.poll() is None: 
     proc3.kill() 
     proc3 = '' 

    sleep(0.1) 
+0

während des Testens, können Sie eine Druckanweisung unter jeder if-Anweisung einfügen, um sicherzustellen, dass es erkennen kann gedrückter Knopf. – Shiping

+0

und Sie müssen auch entscheiden, ob 25 gedrückt wird, während 24 noch spielt, ob 24 zu töten oder es spielen zu beenden (der Code lässt es beenden). – Shiping

+0

ja !! das ist es genau. Da die 24 und 25 wie Trommelschläge (kurz) sind, ist es nicht wichtig, ob einer endet, bevor der andere startet. Vielen Dank "Shiping". Wenn du deinen Code siehst, wird diese Programmiersprache für mich viel vertrauter und viel verständlicher ... mein Projekt (das ein Spiel ist, in dem meine beiden Neffen etwas zum Hämmern haben) wird dank dir jetzt professionell professionell sein. .. vielen Dank noch einmal so viel – grmlje

0

Wie wäre es damit?

play = True 
while True: 

    if (GPIO.input(24) == False): 
     play = False 
     os.system('mpg123 -q power-converters.mp3 &') 
    else: 
     play = True 

    if (GPIO.input(25)== False): 
     play = False 
     os.system('mpg123 -q vader.mp3 &') 
    else: 
     play = True 

    if (play and GPIO.input(23) == False): 
     os.system('mpg123 -q binary-language-moisture-evaporators.mp3 &') 

    sleep(0.1); 
+0

, aber wenn alle Töne lang sind, funktioniert es möglicherweise nicht wie gewünscht. – Shiping

+0

die Sounds sind bis zu 5 Sekunden lang, danke, das sieht, zu meinen C++ Augen, viel klarer, aber immer noch das Gleiche: S – grmlje

+0

dann wird der Code nicht aufhören, was bereits im Spiel ist. Sie müssen mpg123 ausschalten, wenn 25 oder 23 gedrückt wird, um den Ton sofort zu stoppen. – Shiping