使用Python为按钮分配多个函数

2024-06-09 07:45:56 发布

您现在位置:Python中文网/ 问答频道 /正文

我是弗朗西斯科·奥尔金,来自智利的平面设计师。我在大学做最后一个项目。目前,我已经在Raspberrypi3上使用Python为按钮分配了声音

    import RPi.GPIO as GPIO 
    import os
    GPIO.setmode(GPIO.BCM) 

    GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP)
    GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP)

    while True: 

    input_state = GPIO.input(4)
    if input_state == False:
    print('Tutorial') 
    os.system('killall mpg123')
    os.system('mpg123 -q audio1.mp3 &') 
    time.sleep(0.2)

    input_state = GPIO.input(5)
    if input_state == False:
    print('I Regíon')
    os.system('killall mpg123')
    os.system('mpg123 -q audio2.mp3 &')
    time.sleep(0.2)

    input_state = GPIO.input(6)
    if input_state == False:
    print('II Regíon')
    os.system('killall mpg123')
    os.system('mpg123 -q audio3.mp3 &')
    time.sleep(0.2)

    input_state = GPIO.input(7)
    if input_state == False:
    print('XI Regíon')
    os.system('killall mpg123')
    os.system('mpg123 -q audio4.mp3 &')
    time.sleep(0.2)

    input_state = GPIO.input(8)
    if input_state == False:
    print('X Regíon')
    os.system('killall mpg123')
    os.system('mpg123 -q audio5.mp3 &')
    time.sleep(0.2)

这将为按下按钮时播放的按钮分配5个音频。从这里开始一切都很好,但这是我的问题。 我有5个按钮与指定的音频,所以我想知道是否有可能分配另外5个音频相同的按钮时,按下另一个按钮(我希望你能理解)。为了解释这一点,我有这样的图像:

enter image description here

这个想法是通过按“1”按钮可以播放a1b1c1d1e1声音(对应于分配给声音的5个按钮) 按“2”键,您可以播放a2b2c2d2e2声音,依此类推,直到按“5”键

如果有人知道一些方法,能够以一种“简单”的方式做到这一点,那就太好了(除了我已经做过的以外,我对python了解不多)

非常感谢你,我的英语很差


Tags: ininputgpioifossetup按钮system
1条回答
网友
1楼 · 发布于 2024-06-09 07:45:56

我不太明白你的要求,但我理解为当按下数字“1”时,想要改变与所有按钮相关的声音,例如按下“2”会将声音“a2”分配给按钮“a”。为此,在while循环外放置一个变量,该变量指示应使用哪组声音,并为5个音频按钮中的每一个设置一个数组,该数组包含该按钮所需的声音集。例如,假设您默认为a1b1c1d1e1,然后有如下内容:

sound_index = 0 # corresponds to sound set 1

a_sound_files = ['a1.mp3', 'a2.mp3', ...]
...

while true:
    input_state = GPIO.input(4)
    if input_state == False:
        print('Tutorial') 
        os.system('killall mpg123')
        audio_file = a_sound_files[sound_index]
        os.system('mpg123 -q {file} &'.format(file=audio_file)) 
        time.sleep(0.2)
    ...
    ...
    ...

然后只需为你的5个新按钮添加外壳,并让它们相应地更改声音索引

编辑: 代码如下:

import RPi.GPIO as GPIO
import os
GPIO.setmode(GPIO.BCM) 

# I'm assuming 4 is 'a', 5 is 'b', and so on
GPIO.setup(4, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(6, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(7, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(8, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Let these be your new buttons where 11 = button 1,
# 12 = button 2, and so on
GPIO.setup(11, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(12, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(13, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(14, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(15, GPIO.IN, pull_up_down=GPIO.PUD_UP)

# Keeps track of which sound set to play
sound_index = 0 # corresponds to sound set 1

# These contain the set of sounds for each button
a_sound_files = ['a1.mp3', 'a2.mp3', ...]
b_sound_files = ['b1.mp3', 'b2.mp3', ...]
c_sound_files = ['c1.mp3', 'c2.mp3', ...]
d_sound_files = ['d1.mp3', 'd2.mp3', ...]
e_sound_files = ['e1.mp3', 'e2.mp3', ...]

while True: 
    input_state = GPIO.input(4)
    if input_state == False:
        print('Tutorial') 
        os.system('killall mpg123')
        audio_file = a_sound_files[sound_index]
        os.system('mpg123 -q {file} &'.format(file=audio_file)) 
    time.sleep(0.2)

    input_state = GPIO.input(5)
    if input_state == False:
        print('I Regíon')
        os.system('killall mpg123')
        audio_file = b_sound_files[sound_index]
        os.system('mpg123 -q {file} &'.format(file=audio_file)) 
    time.sleep(0.2)

    input_state = GPIO.input(6)
    if input_state == False:
        print('II Regíon')
        os.system('killall mpg123')
        audio_file = c_sound_files[sound_index]
        os.system('mpg123 -q {file} &'.format(file=audio_file)) 
    time.sleep(0.2)

    input_state = GPIO.input(7)
    if input_state == False:
        print('XI Regíon')
        os.system('killall mpg123')
        audio_file = d_sound_files[sound_index]
        os.system('mpg123 -q {file} &'.format(file=audio_file)) 
    time.sleep(0.2)

    input_state = GPIO.input(8)
    if input_state == False:
        print('X Regíon')
        os.system('killall mpg123')
        audio_file = e_sound_files[sound_index]
        os.system('mpg123 -q {file} &'.format(file=audio_file)) 
    time.sleep(0.2)

    # These are your buttons that change the sound set
    input_state = GPIO.input(11)
    if input_state == False:
        sound_index = 0
    time.sleep(0.2)

    input_state = GPIO.input(12)
    if input_state == False:
        sound_index = 1
    time.sleep(0.2)

    input_state = GPIO.input(13)
    if input_state == False:
        sound_index = 2
    time.sleep(0.2)

    input_state = GPIO.input(14)
    if input_state == False:
        sound_index = 3
    time.sleep(0.2)

    input_state = GPIO.input(15)
    if input_state == False:
        sound_index = 4
    time.sleep(0.2)

这个问题有许多解决办法。Python是一种相当直截了当的语言,因此一旦您提出了问题的通用解决方案,语法就不应该限制您

相关问题 更多 >