【发布时间】:2019-10-18 19:10:17
【问题描述】:
我正在使用 Raspberry Pi 构建无头音板,因此需要一种方法来启动我在启动时使用的脚本。该程序使用默认编辑器 Pi shot up,Thonny 进行了编辑和测试,一切似乎都按预期运行。我使用的按钮都会播放我期望的声音,没有问题。
我继续编辑 rc.local 以在 Pi 启动后立即运行脚本(具体来说,我在 exit 0 上方添加了 sudo python /filepath/soundboard.py &),它确实如此。它的运行方式似乎与使用 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 不是唯一一个分配了两个功能的按钮,而是唯一一个引发此错误的按钮,无论我使用什么引脚。如果我从代码中删除循环,则不会出现错误。
【问题讨论】:
标签: python raspberry-pi raspbian gpio