2017-02-04 4 views
0

Я работаю над проектом самостоятельно, и я в точке, где я не знаю больше, что делать ..застрял с питона проектом

Я пытаюсь реализовать некоторые звуки в мой проект, где я нажимаю какой-то такт. переключатели и они должны издавать звуки .. Я полный новичок с питоном, так что я нашел кусок кода делает что-то подобное ...

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); 

Я хочу первый звук для работы в непрерывном цикле, а input(23)==false и если одна из двух других кнопок нажата, она останавливает первый и воспроизводит другую, только один раз, и возвращается к проверке, если input(23)==false

Мне нужно, чтобы это было сделано для завершения моего проекта, но у меня нет нужно действительно научиться python с нуля (по крайней мере пока). по крайней мере, некоторые рекомендации были бы весьма признательны.

+0

Три переключателя дают 8 возможных входных состояний. Из вашего описания не ясно, что вы хотите сделать для каждой комбинации входов. Начните с создания диаграммы, которая делает это ясным. Затем будет возможно пересмотреть операторы 'if' для соответствия. –

+0

переключатели независимы ... 1 переключатель должен делать 1 звук ... один должен быть в цикле, пока нажата кнопка, пока я не нажму одну из двух других кнопок, тогда он должен остановить все остальные звуки и воспроизвести звук, соответствующий нажатой кнопке – grmlje

ответ

0

Эти коды кажутся рабочими (как я имитировал). Возможно, вам понадобится изменить его, чтобы удовлетворить ваши потребности. Например, если нажаты оба 24 и 25, какой из них должен быть воспроизведен (24 имеет приоритет более 25 в коде).

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

при тестировании, вы можете вставить инструкцию для печати под каждым оператором if, чтобы убедиться, что она может обнаружить нажата кнопка. – Shiping

+0

, и вам также необходимо решить, будет ли 25 нажата, пока 24 продолжает играть, нужно ли убить 24 или позволить ему играть до конца (код позволяет завершить). – Shiping

+0

есть !! это именно оно. поскольку 24 и 25 похожи на удары барабанов (короткие), не важно, заканчивается ли один из них до начала другого. Большое вам спасибо. видя, что ваш код теперь делает этот язык программирования более знакомым и более понятным для меня ... мой проект (который является игрой для моих двух племянников, чтобы что-то забить) теперь получит приятный профессиональный контакт благодаря вам. .. еще раз спасибо вам – grmlje

0

Как насчет этого?

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

, но если все звуки длинны, возможно, это не сработает. – Shiping

+0

звуки длится до 5 секунд, спасибо, это выглядит, на мои глаза C++, намного яснее, но все равно делает то же самое: S – grmlje

+0

, тогда код не остановит то, что уже в игре. вам нужно убить mpg123, если 25 или 23 нажата, чтобы немедленно остановить звук. – Shiping

 Смежные вопросы

  • Нет связанных вопросов^_^