2017-09-22 3 views
0

bin Francisco Olguin, Grafikdesigner aus Chile. Ich mache mein letztes Projekt an meiner Universität. Im Moment habe ich Sounds auf Tasten mit Python auf einem raspberrypi 3 zugewiesen. Hier ist der Code den ich benutze.zuweisen mehr als eine Funktion zu einer Schaltfläche mit 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) 

Dies weist 5 Audiodateien zu Tasten zu, die wiedergegeben werden, wenn Sie sie drücken. Von hier alles gut, aber hier ist mein Problem/Frage. Ich habe 5 Tasten mit zugewiesenen Audios, also möchte ich wissen, ob es möglich ist, den gleichen Tasten weitere 5 Audios zuzuweisen, wenn Sie eine andere Taste drücken (ich hoffe, Sie verstehen). Um dies zu erklären habe ich dieses Bild:

enter image description here

Die Idee ist, dass die Taste „1“ drücken können Sie die a1b1c1d1e1 Töne spielen (entsprechend den 5 Tasten zu den Klängen zugeordnet) presssing die „2 "Taste können Sie die a2b2c2d2e2 Sounds usw. bis zum" 5 "Knopf spielen.

wenn jemand irgendeine Weise in der Lage sein zu tun, dass in einer „easy“ Weg kennt wäre toll (ich weiß nicht viel über Python andere als das, was ich bereits getan haben)

Vielen Dank im Voraus und Entschuldigung für mein schlechtes Englisch

+0

Sie können eine Liste direkt an den Befehl 'mpg123' übergeben, um mp3s der Reihe nach abzuspielen. Gibt es ein Problem damit? –

+0

Sollte "input_state" auch nicht True sein, wenn eine Taste für diesen Pin gedrückt wurde oder hat das Drücken Ihrer Taste andere Nebeneffekte auf anderen Input-Pins? –

Antwort

0

Ich folge nicht ganz, was Sie fragen, aber ich verstehe es als wollte den Ton mit allen Tasten verbunden, wenn sagen Nummer '1' gedrückt wird, zum Beispiel drücken '2' würde dem Knopf 'a' den Ton 'a2' zuweisen. Platzieren Sie dazu eine Variable außerhalb Ihrer while-Schleife, die angibt, welche Menge von Sounds verwendet werden soll, und ein Array für jede der 5 Audio-Schaltflächen, die den gewünschten Satz von Sounds für diese Schaltfläche enthalten. Zum Beispiel sagen Sie dann so etwas wie dieses müssen a1b1c1d1e1 Standard:

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

Dann nur die Fälle, für die 5 neue Schaltflächen hinzufügen und sie entsprechend den Sound Index ändern.

EDIT: Der Code ist unten angegeben:

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) 

Es gibt viele Lösungen für dieses Problem. Python ist eine relativ einfache Sprache, daher sollte die Syntax Sie nicht einschränken, sobald Sie eine allgemeine Lösung für Ihr Problem gefunden haben.

+0

Ist das was du gemeint hast? – JDollars

+0

Ja, das ist was ich brauche. Ich verstehe immer noch nicht, da ich nicht viel über Python verstehe. Gibt es eine Möglichkeit, mir ein Beispiel zu geben, das dies mit dem Code, den ich oben geschrieben habe, zu integrieren? Oder müsste ich alles ändern? Sorry für die Frage, aber ich verstehe nicht viel über Python: / –

Verwandte Themen