# 在这里写上你的代码 :-)
#导入RPi.GPIO库和time库
import RPi.GPIO as GPIO
import time
#定义蜂鸣器的引脚
Buzzer = 11
#定义低、中、高音符的频率
CL = [0, 131, 147, 165, 175, 196, 211, 248] # 低音符的频率
CM = [0, 262, 294, 330, 350, 393, 441, 495] # 中音符的频率
CH = [0, 525, 589, 661, 700, 786, 882, 990] # 高音符的频率
#定义第一首歌和第二首歌的谱子和节奏
song_1 = [ CM[3], CM[5], CM[6], CM[3], CM[2], CM[3], CM[5], CM[6],
CH[1], CM[6], CM[5], CM[1], CM[3], CM[2], CM[2], CM[3],
CM[5], CM[2], CM[3], CM[3], CL[6], CL[6], CL[6], CM[1],
CM[2], CM[3], CM[2], CL[7], CL[6], CM[1], CL[5] ]
beat_1 = [ 1, 1, 3, 1, 1, 3, 1, 1,
1, 1, 1, 1, 1, 1, 3, 1,
1, 3, 1, 1, 1, 1, 1, 1,
1, 2, 1, 1, 1, 1, 1, 1,
1, 1, 3 ]
song_2 = [ CM[1], CM[1], CM[1], CL[5], CM[3], CM[3], CM[3], CM[1],
CM[1], CM[3], CM[5], CM[5], CM[4], CM[3], CM[2], CM[2],
CM[3], CM[4], CM[4], CM[3], CM[2], CM[3], CM[1], CM[1],
CM[3], CM[2], CL[5], CL[7], CM[2], CM[1] ]
beat_2 = [ 1, 1, 2, 2, 1, 1, 2, 2,
1, 1, 2, 2, 1, 1, 3, 1,
1, 2, 2, 1, 1, 2, 2, 1,
1, 2, 2, 1, 1, 3 ]
def setup():
#设置GPIO引脚编号方式
GPIO.setwarnings(False)
GPIO.setmode(GPIO.BOARD)
#设置蜂鸣器引脚为输出模式
GPIO.setup(Buzzer, GPIO.OUT)
#定义Buzz全局变量,并用GPIO.PWM(start frequency)初始化
global Buzz
Buzz = GPIO.PWM(Buzzer, 440) #初始频率为440Hz
Buzz.start(50) #设置Duty Cycle为50%
def loop():
while True:
#播放第一首歌
print ('\n Playing song 1...')
for i in range(1, len(song_1)):
Buzz.ChangeFrequency(song_1[i]) #改变Buzz的频率
time.sleep(beat_1[i] * 0.5) #延时直到下一个音符开始播放
#延时一秒后播放第二首歌
time.sleep(1)
print ('\n\n Playing song 2...')
for i in range(1, len(song_2)):
Buzz.ChangeFrequency(song_2[i])
time.sleep(beat_2[i] * 0.5)
def destory():
#停止蜂鸣器,并将引脚输出高电平
Buzz.stop()
GPIO.output(Buzzer, 1)
#清理GPIO资源
GPIO.cleanup()
#主程序
if __name__ == '__main__':
#初始化GPIO设备
setup()
try:
#循环播放两首歌
loop()
except KeyboardInterrupt:
#当用户按下Ctrl+C时,停止播放
destory()
aaaaaaa
最新推荐文章于 2024-07-20 16:05:35 发布