我对python很陌生,所以没有太多经验。我正在创建一个RPi程序,使用切换开关(https://ktechnics.com/wp-content/uploads/2015/12/mini-6a-125vac-spdt-mts-102-3-pin-2-position-on-on-toggle-switch.jpg)播放和停止7首不同的歌曲。你知道吗
我使用的是GPIO引脚的上拉/下拉电阻,用于开关和pygame.mixer.音乐播放歌曲的模块。它的工作原理与预期的一首歌:
import RPi.GPIO as GPIO
import pygame
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
pygame.init()
pygame.mixer.init()
cancion_1 = '/media/pi/PIERRE/0001.mp3'
while True:
switch_1 = GPIO.input(18)
if switch_1 == False:
if pygame.mixer.music.get_busy() == False:
print("Cancion 1 Sonando")
pygame.mixer.music.load(cancion_1)
pygame.mixer.music.play()
else:
if pygame.mixer.music.get_busy() == True:
print("Cancion 1 Callada")
pygame.mixer.music.stop()
但当我尝试添加更多歌曲时,程序只播放第一首歌曲:
import RPi.GPIO as GPIO
import pygame
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BCM)
GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(19, GPIO.IN, pull_up_down=GPIO.PUD_UP)
pygame.init()
pygame.mixer.init()
cancion_1 = '/media/pi/PIERRE/0001.mp3'
cancion_2 = '/media/pi/PIERRE/0002.mp3'
while True:
switch_1 = GPIO.input(18)
switch_2 = GPIO.input(19)
if switch_1 == False:
if pygame.mixer.music.get_busy() == False:
print("Cancion 1 Sonando")
pygame.mixer.music.load(cancion_1)
pygame.mixer.music.play()
elif switch_1 == True:
if pygame.mixer.music.get_busy() == True:
print("Cancion 1 Callada")
pygame.mixer.music.stop()
elif switch_2 == False:
if pygame.mixer.music.get_busy() == False:
print("Cancion 2 Sonando")
pygame.mixer.music.load(cancion_2)
pygame.mixer.music.play()
elif switch_2 == True:
if pygame.mixer.music.get_busy() == True:
print("Cancion 2 Callada")
pygame.mixer.music.stop()
我试着为每首歌创建一个函数,稍后再调用它,但也不起作用。有什么想法吗??你知道吗
正如我在评论中提到的,您的逻辑只允许播放第一首歌。因为第一个条件(
if switch_1 == False:
)或第二个条件(elif switch_1 == True:
)中的一个将为真。因此,条件3和4永远无法达到。你知道吗这里有一种重新配置的方法:
注意:在本例中,如果两个开关都打开,则只播放第一首歌曲。Pygame一次只能播放一首歌。这使得拨动开关在这里看起来是个糟糕的选择。不清楚当两个开关都打开时会发生什么。考虑使用momentary switches或rotary switch。你知道吗
相关问题 更多 >
编程相关推荐