尝试在开门时播放音乐

Trying to play music while opening a door

编辑:将 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 零 WH 和霍尔效应传感器。我是 python 的新手,但它相当简单。但是我卡住了,因为我找不到如何做我想做的事情。
所以我想在门打开时播放音乐(GPIO 为 LOW),但我也希望它在门关闭时停止(当时 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 与 and/or 语句一起使用来消除缩进。