Детали:
1 2 3 4 5 6 7 |
три кнопки; соединительные провода мама-папа; стандартные соединительные провода или обычные провода; макетная плата; три резистора 10кОм; пк акустика(динамики, наушники); *.wav - звуковые файлы. |
Сборка макета проигрыватель:
1 2 3 4 |
Ground pi подключаем к общей земле(-) Земля -> резистор 10кОм -> порт GPIO23 -> Кнопка -> Pi 3,3V Земля -> резистор 10кОм -> порт GPIO24 -> Кнопка -> Pi 3,3V Земля -> резистор 10кОм -> порт GPIO25 -> Кнопка -> Pi 3,3V |
Принцип работы:
1 2 3 4 5 6 |
Когда кнопка не нажата. Ток течет через резистор 10кОм и GPIO = 0 (false) Порт GPIO имеет отрицательное значение. Также резистор помогает избежать дребезг кнопки. Когда кнопку нажимают, ток течет по наименьшему сопротивлению к положительному значению. GPIO > 0 (true) |
Код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
mkdir soundbord - создаем каталог для музыкальных файлов cd soundboard - перейдем в каталог nano soundboard.py - создаем файл --------------------------------- import pygame.mixer from time import sleep import RPi.GPIO as GPIO from sys import exit GPIO.setmode(GPIO.BCM) GPIO.setup(23, GPIO.IN) GPIO.setup(24,GPIO.IN) GPIO.setup(25, GPIO.IN) pygame.mixer.init(48000, -16, 1, 1024) - инициируем микшер из pygame soundA = pygame.mixer.Sound( "/usr/share/sounds/alsa/Front_Center.wav") - загружаем звуки soundB = pygame.mixer.Sound( "/usr/share/sounds/alsa/Front_Left.wav") - загружаем звуки soundC = pygame.mixer.Sound( "/usr/share/sounds/alsa/Front_Right.wav") - загружаем звуки soundChannelA = pygame.mixer.Channel(1) - создаем канал для звука soundChannelB = pygame.mixer.Channel(2) - создаем канал для звука soundChannelC = pygame.mixer.Channel(3) - создаем канал для звука print "Soundboard Ready." - сообщаем что проигрыватель запущен while True: try: if (GPIO.input(23) == True): - если кнопка нажата soundChannelA.play(soundA) - воспроизводим звук if (GPIO.input(24) == True): - если кнопка нажата soundChannelB.play(soundB) - воспроизводим звук if (GPIO.input(25) == True): - если кнопка нажата soundChannelCplay(soundC) - воспроизводим звук sleep(0.01) - не напрягаем процессор слишком частой проверкой except KeyboardInrerrupt: exit() |
1 2 3 4 |
sudo python soundboard.py - запуск скрипта Ctrl+c - завершить скрипт sudo amixer cset numid=3 1 - вывод звука через JACK 3,5 sudo amixer cset numid=3 2 - вывод звука через HDMI |