坚持使用python项目

时间:2017-02-04 19:23:58

标签: python raspberry-pi

我正在做一个属于我自己的项目,而且我不知道该怎么做......

我试图在我的项目中实施一些声音,我按下了一些机智。开关,他们应该发出声音..我是一个完整的新手与python所以我发现一段代码做类似的事情......

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连续循环中运行,如果按下另外两个按钮之一,它会停止第一个并播放另一个,只有一次,然后返回检查是否{{ 1}}

我需要这样才能完成我的项目,但我不需要真正从头开始学习python(至少目前为止)。至少有一些指导方针将不胜感激。

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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)