Я создаю безголовую деку, используя Raspberry Pi, и поэтому мне нужен способ запустить скрипт, который я использую при загрузке. Программа была отредактирована и протестирована с использованием стандартного редактора Pi Thonny, и все, кажется, работает как задумано. Все кнопки, которые я использую, воспроизводят те звуки, которые я ожидаю, без проблем.
Я продолжил и отредактировал rc.local
, чтобы запустить скрипт, как только Pi загрузится (в частности, я добавил sudo python /filepath/soundboard.py &
выше exit 0
), что и делает. Кажется, что он работает так же, как и при использовании Thonny, но звук отключается примерно через 5 секунд, даже если ни одна из кнопок не нажата. Когда я запускаю его напрямую через командную строку, возникает та же проблема.
Код здесь сжат, поскольку имеется более одной кнопки, но все они используют одну и ту же строку.
import pygame
import random
import glob
from gpiozero import Button
import time
pygame.init()
while True:
n = glob.glob('/filepath/*.wav')
btn_0 = Button(8)
btn_0.when_pressed = pygame.mixer.stop
btn_0.when.held = lambda: pygame.mixer.Sound(random.choice(n)).play()
Насколько я могу судить, цикл while
продолжает запускать программу, но нажатие кнопок ничего не делает. Кроме того, после добавления цикла код создает дамп Traceback, показывающий ошибку
gpiozero.exc.GPIOPinInUse: pin 8 is already in use by <gpiozero.Button objext on pin GPIO8, pull_up=True, is_active=False>
, которая может иметь какое-то отношение к моей проблеме? btn_0
- не единственная кнопка, которой назначены две функции, а единственная, которая выдает эту ошибку, независимо от того, какой вывод я использую. Ошибка не появляется, если я удаляю цикл из кода.