问题描述
编辑:将 GPIO.PUD_UP 替换为 GPIO.PUD_DOWN,while 循环现在看起来像这样:
playing = False
while True:
if GPIO.input(26)==False:
if not playing:
pygame.mixer.music.play()
playing = True
else:
if playing:
pygame.mixer.music.stop()
playing = False
我正在尝试在打开门时播放音乐,使用 raspBerry pi Zero WH 和霍尔效应传感器。我对python比较陌生,但它相当简单。但我卡住了,因为我找不到如何做我想做的事。
所以我想在门打开时播放音乐(GPIO 为低电平),但我也希望它在关闭时停止(当 GPIO 为 UP 时)。似乎我无法找到如何去做。这是我的代码:
import RPi.GPIO as GPIO
import time
import pygame
import pygame.mixer
pygame.mixer.init()
pygame.init()
scary = pygame.mixer.sound("scary.wav")
pygame.mixer.music.set_volume(0.1)
GPIO.setmode(GPIO.BCM)
GPIO.setup(26,GPIO.IN,pull_up_down=GPIO.PUD_UP)
while True:
if GPIO.input(26)==False:
pygame.mixer.music.play()
while GPIO.input(26)==False:
pass
else:
pygame.mixer.music.stop()
while GPIO.input(26)==True:
pass
我希望在门打开时立即播放音乐,只播放一次(大约一分钟),但可以在门关闭时停止播放。我该怎么做? (time.sleep(x) 只是延迟了整个循环,或者知道如何使用它?)
谢谢!
解决方法
添加一个变量来跟踪当前音乐是否正在播放:
playing = False
while True:
if gpio is high:
if not playing:
play()
playing = True
else:
if playing:
stop()
playing = False
您不能通过使用 if/else 和/或语句来消除缩进。