2017-09-22 1 views
0

am Francisco Olguin, 칠레 출신 그래픽 디자이너. 내 대학에서 최종 프로젝트를하고 있습니다. 지금은 raspberrypi 3에서 파이썬을 사용하여 버튼에 사운드를 할당했습니다. 여기에 제가 사용하는 코드가 있습니다.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"버튼을 누르면 당신은 "2를 누르는 것이 a1b1c1d1e1 (소리에 할당 된 5 개 버튼에 해당) 사운드 을 할 수 있다는 것입니다 "버튼을 누르면"5 "버튼까지 a2b2c2d2e2 사운드 등을들을 수 있습니다.

사람이 어떤 방법으로 좋은 것에 "쉬운"방법으로 그렇게 할 수 있기를 알고 있다면 (내가 이미 한 일이 아닌 다른 파이썬에 대해 잘 모르는) 미리

많은 감사 미안하다. 내 나쁜 영어에 대한 미안.

+0

목록을 mpg123 명령에 직접 전달하여 mp3를 순서대로 재생할 수 있습니다. 그렇게하는 데 문제가 있습니까? –

+0

또한, 해당 핀에 대해 버튼을 눌렀거나 버튼을 누르는 것이 다른 입력 핀에 다른 부작용을 일으키는 경우'input_state'가 True가 아니어야합니까? –

답변

0

나는 당신의 요구를 잘 따르지 않는다. 그러나 '2'를 누르는 것과 같이 '1'번을 누르면 모든 버튼과 관련된 소리를 바꾸고 싶다고 생각한다. 사운드 '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) 

이 문제에 대한 많은 솔루션이 있습니다 코드는 아래와 같습니다. 파이썬은 상당히 직설적 인 언어이므로 문제에 대한 일반적인 해결책이 나오면 구문이 제한되어서는 안됩니다.

+0

이것은 당신이 언급 한 내용입니까? – JDollars

+0

예, 이것이 내가 필요한 것입니다. 파이썬에 대해 많이 이해하지 못하기 때문에 나는 아직도 이해하지 못합니다. 위에서 작성한 코드에 이것을 통합하는 예제를 줄 수 있습니까? 아니면 모든 것을 바꿔야합니까? 죄송합니다 질문에 대한하지만 난 파이썬에 대해 많이 이해가 안 : / –

관련 문제