2017-09-22 7 views
0

Francisco Olguin, graphiste du Chili. Je fais mon dernier projet à mon université. En ce moment j'ai assigné des sons aux boutons en utilisant Python sur un raspberrypi 3. Voici le code que j'utilise.affecter plus d'une fonction à un bouton en utilisant 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) 

Ceci affecte 5 audios aux boutons qui sont lus lorsque vous les appuyez. De là tout est bien mais voici mon problème/question. J'ai 5 boutons avec des audios assignés, donc je veux savoir s'il est possible d'assigner 5 autres audios aux mêmes boutons en appuyant sur un autre bouton (j'espère que vous comprenez). Pour expliquer cela, j'ai cette image:

enter image description here

L'idée est que, en appuyant sur la touche « 1 », vous pouvez jouer les sons a1b1c1d1e1 (correspondant aux 5 touches attribuées aux sons) presssing le « 2 "bouton, vous pouvez jouer les sons a2b2c2d2e2 et ainsi de suite jusqu'à ce que le" 5 "bouton.

si quelqu'un sait d'une certaine façon d'être en mesure de le faire d'une manière « facile » serait génial (je ne sais pas beaucoup sur python autre que ce que je l'ai déjà fait)

Un grand merci à l'avance et désolé pour mon mauvais anglais

+0

Vous pouvez passer une liste directement à la commande 'mpg123' pour lire les fichiers mp3 dans l'ordre. Y a-t-il un problème à le faire de cette façon? –

+0

En outre, 'input_state' ne devrait-il pas être vrai si un bouton a été poussé pour cette broche ou est-ce que le fait de pousser votre bouton a d'autres effets secondaires sur d'autres broches d'entrée? –

Répondre

0

Je ne suis pas tout à fait ce que vous demandez, mais je le comprends comme voulant changer le son associé à tous les boutons lorsque le numéro '1' est pressé, par exemple en appuyant sur '2' affecterait le son 'a2' au bouton 'a'. Pour ce faire, placez une variable en dehors de votre boucle while qui indique quel jeu de sons doit être utilisé et un tableau pour chacun des 5 boutons audio qui contient votre jeu de sons désiré pour ce bouton. Par exemple, vous dites par défaut à a1b1c1d1e1 alors quelque chose comme ceci:

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

Ensuite, il suffit d'ajouter les cas pour vos 5 nouveaux boutons et de les changer l'indice sonore en conséquence.

EDIT: Le code est donné ci-dessous:

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) 

Il existe de nombreuses solutions à ce problème. Python est un langage assez simple, donc la syntaxe ne devrait pas vous limiter une fois que vous avez trouvé une solution générique à votre problème.

+0

Est-ce que c'est ce que vous vouliez dire? – JDollars

+0

Oui, c'est ce dont j'ai besoin. Je ne comprends toujours pas du tout car je ne comprends pas grand-chose à propos de python. Serait-il possible de me donner un exemple en l'intégrant au code que j'ai écrit plus haut? Ou devrais-je tout changer? Désolé pour la question mais je ne comprends pas grand chose à propos de python: / –