2018-10-5 21:39:26 [显示全部楼层]
5014浏览
查看: 5014|回复: 4

[入门教程] 【掌控】mpython-12…handpy,演奏一首曲子呗

[复制链接]
-handpy,演奏一首世界名曲呗。
-可以啊,可是,你要写代码给我啊。

……

-下面,由handpy掌控给伙伴们演奏一曲,《小星星》。
-这首曲子,流传度可能是最广的了。



本视频及代码,由南昌七七老师授权大圣老师(稍有修改,加上了彩灯)写入帖子,给掌控普惠课用(太感谢了哈)。
【掌控】mpython-12…handpy,演奏一首曲子呗图1
【学习目标】
1、初步学习数组
2、for循环

【学习过程】
1、查找谱子
【掌控】mpython-12…handpy,演奏一首曲子呗图2
这个G调,找个C调的过来。
【掌控】mpython-12…handpy,演奏一首曲子呗图6
2、查资料
频率和音符的关系
【掌控】mpython-12…handpy,演奏一首曲子呗图3
【掌控】mpython-12…handpy,演奏一首曲子呗图4
【掌控】mpython-12…handpy,演奏一首曲子呗图5

2、写程序:
前面有几个帖子里,已经用到数组来表示图片。
不过哪有些套公式的感觉,这次要认真体会数组的用法了。
思路是把和音符频率写入数组,再用for循环来调用,演奏出曲子。

程序:
  1. from mpython import *  # 导入掌控库
  2. import time  # 导入时间库
  3. import random  # 导入随机数库
  4. buzz = PWM(Pin(16), freq = 500, duty = 0)  # 定义板载蜂鸣器引脚
  5. # 定义数组,写入乐曲音符频率
  6. song = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
  7.     659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
  8.     587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
  9.     784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
  10.     523, ]
  11. # 清屏,显示节目预告
  12. display.fill(0)
  13. display.DispChar("Hi,I'm handpy.", 16, 16)
  14. display.show()
  15. time.sleep(2)
  16. display.fill(0)
  17. display.DispChar("下面演奏一曲-", 16, 16)
  18. display.show()
  19. time.sleep(2)
  20. display.fill(0)
  21. display.DispChar("《小星星》", 16, 16)
  22. display.show()
  23. time.sleep(2)
  24. # 定义演奏小星星函数,用for循环调用数组音符频率
  25. def xiaoxingxing():
  26.     for i in song:
  27.         rgb[0] = (random.randint(0, 255), 0, 0)  # RGB灯0(第1个彩灯)设为红色随机亮度
  28.         rgb[1] = (0, random.randint(0, 255), 0)  # RGB灯1(第2个彩灯)设为绿色随机亮度
  29.         rgb[2] = (0, 0, random.randint(0, 255))  # RGB灯2(第2个彩灯)设为蓝色随机亮度
  30.         rgb.write()  # 点亮彩灯
  31.         buzz.freq(i)  #  蜂鸣器演奏数组音符
  32.         buzz.duty(512) #  音高设为512
  33.         time.sleep_ms(500)  # 延时500ms(当做一拍)
  34.     buzz.duty(0)  # 音量高为0
  35.     buzz.off()  # 关闭蜂鸣器
  36.      
  37. xiaoxingxing()  # 调用函数
复制代码


(小提示,掌控库的buzz应用还在完善,后面程序再调整。)

【更新】
下面运用掌控新库,buzz已完善,上面的程序仍然可以执行。
下面更简练:

用buzz.on(i) #启动蜂鸣器依次播放音符频率,默认音高400
buzz.off()#演奏结束后关闭蜂鸣器
  1. from mpython import *#导入掌控库
  2. import time          #导入时间库
  3. import random        #导入随机数库
  4. #乐曲音符频率数组
  5. M = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
  6.     659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
  7.     587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
  8.     784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
  9.     523, ]
  10. #清屏,屏幕显示节目预报
  11. display.fill(0)
  12. display.DispChar("Hi,I'm handpy.", 16, 16)
  13. display.show()
  14. time.sleep(2)
  15. display.fill(0)
  16. display.DispChar("下面演奏一曲-", 16, 16)
  17. display.show()
  18. time.sleep(2)
  19. display.fill(0)
  20. display.DispChar("《小星星》", 16, 16)
  21. display.show()
  22. time.sleep(2)
  23. #演奏乐曲,用for循环调用数组音符频率
  24. for i in M:
  25.     rgb[0] = (random.randint(0, 255), 0, 0)#RGB灯0(第一个彩灯)设为红色随机亮度
  26.     rgb[1] = (0, random.randint(0, 255), 0)#RGB灯1(第二个彩灯)设为绿色随机亮度
  27.     rgb[2] = (0, 0, random.randint(0, 255))#RGB灯2(第一个彩灯)设为蓝色随机亮度
  28.     rgb.write() #点亮彩灯
  29.     buzz.on(i)  #启动蜂鸣器依次播放音符频率
  30.     time.sleep_ms(500)#延时500ms(当做一拍,可能不准的,要请音乐老师指导)
  31.     buzz.off()#演奏结束后关闭蜂鸣器
复制代码


【视频效果】


geekzen  见习技师

发表于 2018-10-5 22:22:33

朱老师动作真快。。。。我的升级版本还没做好呢
回复

使用道具 举报

rzyzzxw  版主
 楼主|

发表于 2018-10-6 09:01:38

geekzen 发表于 2018-10-5 22:22
朱老师动作真快。。。。我的升级版本还没做好呢

板载buzz的新函数用法有例程了。buzz.on(i) #启动蜂鸣器依次播放音符频率,默认音高400
buzz.off()#演奏结束后关闭蜂鸣器
回复

使用道具 举报

rzyzzxw  版主
 楼主|

发表于 2018-12-28 09:16:53

  1. from mpython import *  # 导入掌控库
  2. import time  # 导入时间库
  3. import random  # 导入随机数库
  4.   
  5. buzz = PWM(Pin(16), freq = 500, duty = 0)  # 定义板载蜂鸣器引脚
  6. # 定义数组,写入乐曲音符频率
  7. song = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
  8.     659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
  9.     587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
  10.     784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
  11.     523, ]
  12.   
  13. # 清屏,显示节目预告
  14. oled.fill(0)
  15. oled.DispChar("Hi,I'm mpython.", 16, 16)
  16. oled.show()
  17. time.sleep(2)
  18. oled.fill(0)
  19. oled.DispChar("下面演奏一曲-", 16, 16)
  20. oled.show()
  21. time.sleep(2)
  22. oled.fill(0)
  23. oled.DispChar("《小星星》", 16, 16)
  24. oled.show()
  25. time.sleep(2)
  26.   
  27. # 定义演奏小星星函数,用for循环调用数组音符频率
  28. def xiaoxingxing():
  29.     for i in song:
  30.         rgb[0] = (random.randint(0, 255), 0, 0)  # RGB灯0(第1个彩灯)设为红色随机亮度
  31.         rgb[1] = (0, random.randint(0, 255), 0)  # RGB灯1(第2个彩灯)设为绿色随机亮度
  32.         rgb[2] = (0, 0, random.randint(0, 255))  # RGB灯2(第2个彩灯)设为蓝色随机亮度
  33.         rgb.write()  # 点亮彩灯
  34.         buzz.freq(i)  #  蜂鸣器演奏数组音符
  35.         buzz.duty(512) #  音高设为512
  36.         time.sleep_ms(500)  # 延时500ms(当做一拍)
  37.     buzz.duty(0)  # 音量高为0
  38.     buzz.off()  # 关闭蜂鸣器
  39.       
  40. xiaoxingxing()  # 调用函数
复制代码

回复

使用道具 举报

rzyzzxw  版主
 楼主|

发表于 2018-12-28 09:21:46

  1. from mpython import *#导入掌控库
  2. import time          #导入时间库
  3. import random        #导入随机数库
  4. #乐曲音符频率数组
  5. M = [523, 523, 784, 784, 880, 880, 784, 784, 698, 698, 659,
  6.     659, 587, 587, 523, 523, 784, 784, 698, 698, 659, 659, 587,
  7.     587, 784, 784, 698, 698, 659, 659, 587, 587, 523, 523, 784,
  8.     784, 880, 880, 784, 784, 698, 698, 659, 659, 587, 587, 523,
  9.     523, ]
  10. #清屏,屏幕显示节目预报
  11. oled .fill(0)
  12. oled .DispChar("Hi,I'm mpython.", 16, 16)
  13. oled .show()
  14. time.sleep(2)
  15. oled .fill(0)
  16. oled .DispChar("下面演奏一曲-", 16, 16)
  17. oled .show()
  18. time.sleep(2)
  19. oled .fill(0)
  20. oled .DispChar("《小星星》", 16, 16)
  21. oled .show()
  22. time.sleep(2)
  23. #演奏乐曲,用for循环遍厉数组音符频率
  24. for i in M:
  25.     rgb[0] = (random.randint(0, 255), 0, 0)#RGB灯0(第一个彩灯)设为红色随机亮度
  26.     rgb[1] = (0, random.randint(0, 255), 0)#RGB灯1(第二个彩灯)设为绿色随机亮度
  27.     rgb[2] = (0, 0, random.randint(0, 255))#RGB灯2(第一个彩灯)设为蓝色随机亮度
  28.     rgb.write() #点亮彩灯
  29.     buzz.on(i)  #启动蜂鸣器依次播放音符频率
  30.     time.sleep_ms(500)#延时500ms(当做一拍,可能不准的,要请音乐老师指导)
  31.     buzz.off()#演奏结束后关闭蜂鸣器
复制代码

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail