【掌控】mpython-12…handpy,演奏一首曲子呗
-handpy,演奏一首世界名曲呗。-可以啊,可是,你要写代码给我啊。
……
-下面,由handpy掌控给伙伴们演奏一曲,《小星星》。
-这首曲子,流传度可能是最广的了。
http://v.youku.com/v_show/id_XMzg1MDM2MDY2OA==.html?spm=a2h3j.8428770.3416059.1
本视频及代码,由南昌七七老师授权大圣老师(稍有修改,加上了彩灯)写入帖子,给掌控普惠课用(太感谢了哈)。
【学习目标】
1、初步学习数组
2、for循环
【学习过程】
1、查找谱子
这个G调,找个C调的过来。
2、查资料
频率和音符的关系
2、写程序:
前面有几个帖子里,已经用到数组来表示图片。
不过哪有些套公式的感觉,这次要认真体会数组的用法了。
思路是把和音符频率写入数组,再用for循环来调用,演奏出曲子。
程序:from mpython import *# 导入掌控库
import time# 导入时间库
import random# 导入随机数库
buzz = PWM(Pin(16), freq = 500, duty = 0)# 定义板载蜂鸣器引脚
# 定义数组,写入乐曲音符频率
song = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
523, ]
# 清屏,显示节目预告
display.fill(0)
display.DispChar("Hi,I'm handpy.", 16, 16)
display.show()
time.sleep(2)
display.fill(0)
display.DispChar("下面演奏一曲-", 16, 16)
display.show()
time.sleep(2)
display.fill(0)
display.DispChar("《小星星》", 16, 16)
display.show()
time.sleep(2)
# 定义演奏小星星函数,用for循环调用数组音符频率
def xiaoxingxing():
for i in song:
rgb = (random.randint(0, 255), 0, 0)# RGB灯0(第1个彩灯)设为红色随机亮度
rgb = (0, random.randint(0, 255), 0)# RGB灯1(第2个彩灯)设为绿色随机亮度
rgb = (0, 0, random.randint(0, 255))# RGB灯2(第2个彩灯)设为蓝色随机亮度
rgb.write()# 点亮彩灯
buzz.freq(i)#蜂鸣器演奏数组音符
buzz.duty(512) #音高设为512
time.sleep_ms(500)# 延时500ms(当做一拍)
buzz.duty(0)# 音量高为0
buzz.off()# 关闭蜂鸣器
xiaoxingxing()# 调用函数
(小提示,掌控库的buzz应用还在完善,后面程序再调整。)
【更新】
下面运用掌控新库,buzz已完善,上面的程序仍然可以执行。
下面更简练:
用buzz.on(i) #启动蜂鸣器依次播放音符频率,默认音高400
buzz.off()#演奏结束后关闭蜂鸣器
from mpython import *#导入掌控库
import time #导入时间库
import random #导入随机数库
#乐曲音符频率数组
M = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
523, ]
#清屏,屏幕显示节目预报
display.fill(0)
display.DispChar("Hi,I'm handpy.", 16, 16)
display.show()
time.sleep(2)
display.fill(0)
display.DispChar("下面演奏一曲-", 16, 16)
display.show()
time.sleep(2)
display.fill(0)
display.DispChar("《小星星》", 16, 16)
display.show()
time.sleep(2)
#演奏乐曲,用for循环调用数组音符频率
for i in M:
rgb = (random.randint(0, 255), 0, 0)#RGB灯0(第一个彩灯)设为红色随机亮度
rgb = (0, random.randint(0, 255), 0)#RGB灯1(第二个彩灯)设为绿色随机亮度
rgb = (0, 0, random.randint(0, 255))#RGB灯2(第一个彩灯)设为蓝色随机亮度
rgb.write() #点亮彩灯
buzz.on(i)#启动蜂鸣器依次播放音符频率
time.sleep_ms(500)#延时500ms(当做一拍,可能不准的,要请音乐老师指导)
buzz.off()#演奏结束后关闭蜂鸣器
【视频效果】
http://v.youku.com/v_show/id_XMzg1MDYyNjIxNg==.html?spm=a2h3j.8428770.3416059.1
朱老师动作真快。。。。我的升级版本还没做好呢 geekzen 发表于 2018-10-5 22:22
朱老师动作真快。。。。我的升级版本还没做好呢
板载buzz的新函数用法有例程了。buzz.on(i) #启动蜂鸣器依次播放音符频率,默认音高400
buzz.off()#演奏结束后关闭蜂鸣器 from mpython import *# 导入掌控库
import time# 导入时间库
import random# 导入随机数库
buzz = PWM(Pin(16), freq = 500, duty = 0)# 定义板载蜂鸣器引脚
# 定义数组,写入乐曲音符频率
song = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
523, ]
# 清屏,显示节目预告
oled.fill(0)
oled.DispChar("Hi,I'm mpython.", 16, 16)
oled.show()
time.sleep(2)
oled.fill(0)
oled.DispChar("下面演奏一曲-", 16, 16)
oled.show()
time.sleep(2)
oled.fill(0)
oled.DispChar("《小星星》", 16, 16)
oled.show()
time.sleep(2)
# 定义演奏小星星函数,用for循环调用数组音符频率
def xiaoxingxing():
for i in song:
rgb = (random.randint(0, 255), 0, 0)# RGB灯0(第1个彩灯)设为红色随机亮度
rgb = (0, random.randint(0, 255), 0)# RGB灯1(第2个彩灯)设为绿色随机亮度
rgb = (0, 0, random.randint(0, 255))# RGB灯2(第2个彩灯)设为蓝色随机亮度
rgb.write()# 点亮彩灯
buzz.freq(i)#蜂鸣器演奏数组音符
buzz.duty(512) #音高设为512
time.sleep_ms(500)# 延时500ms(当做一拍)
buzz.duty(0)# 音量高为0
buzz.off()# 关闭蜂鸣器
xiaoxingxing()# 调用函数
from mpython import *#导入掌控库
import time #导入时间库
import random #导入随机数库
#乐曲音符频率数组
M = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
523, ]
#清屏,屏幕显示节目预报
oled .fill(0)
oled .DispChar("Hi,I'm mpython.", 16, 16)
oled .show()
time.sleep(2)
oled .fill(0)
oled .DispChar("下面演奏一曲-", 16, 16)
oled .show()
time.sleep(2)
oled .fill(0)
oled .DispChar("《小星星》", 16, 16)
oled .show()
time.sleep(2)
#演奏乐曲,用for循环遍厉数组音符频率
for i in M:
rgb = (random.randint(0, 255), 0, 0)#RGB灯0(第一个彩灯)设为红色随机亮度
rgb = (0, random.randint(0, 255), 0)#RGB灯1(第二个彩灯)设为绿色随机亮度
rgb = (0, 0, random.randint(0, 255))#RGB灯2(第一个彩灯)设为蓝色随机亮度
rgb.write() #点亮彩灯
buzz.on(i)#启动蜂鸣器依次播放音符频率
time.sleep_ms(500)#延时500ms(当做一拍,可能不准的,要请音乐老师指导)
buzz.off()#演奏结束后关闭蜂鸣器
页:
[1]