2017-8-9 14:39:02 [显示全部楼层]
8485浏览
查看: 8485|回复: 0

UpyCraft-micropython: 让Microbit发声

[复制链接]
本帖最后由 Nana 于 2017-8-10 09:54 编辑

学习Python语言需要与实例相结合才能事半功倍。傻瓜教程来啦───使用Microbit播放音乐,显示图像或文字。

目的:
  • 循环: 重复执行一段代码
  • 列表: 存放多个数据或命令
  • 条件语句: 通过if语句,让代码来判断条件

技能:
  • 如何在microbit的屏幕上显示图像或文字
  • 如何发现microbit的按键被按下
  • 如何通过扬声器来播放音乐


所需软硬件:
UpyCraft-micropython: 让Microbit发声图1

Microbit与扬声器连接示意图:
UpyCraft-micropython: 让Microbit发声图2

连线效果图:
UpyCraft-micropython: 让Microbit发声图3

所需代码:
[mw_shl_code=python,true]# musical quiz buzzer for micro:bit
# www.dfrobot.com.cn

from microbit import *
import music

music.set_tempo(bpm=220)
Player_A_tune = ["c", "d", "e", "f", "g"]

Player_B_tune = ["g", "f", "e", "d", "c"]

display.scroll("Quiz buzzer")

while True:
    display.show(Image.HAPPY)
    if button_a.was_pressed():
        display.show("A")
        music.play(Player_A_tune)
        sleep(2000)
    elif button_b.was_pressed():
        display.show("B")
        music.play(Player_B_tune)
        sleep(2000)
sleep(20)
[/mw_shl_code]

运行成功效果:
UpyCraft-micropython: 让Microbit发声图4
UpyCraft-micropython: 让Microbit发声图6
UpyCraft-micropython: 让Microbit发声图5

代码详解:
  
4
  
5
  
  
from microbit import *
  
import music
  
4行:你可以使用这个模块里面的成员函数。导入的模块越多,可以调用的成员函数也越多,但会占用更多的内存。你可以通过Microbit模块控制屏幕显示、检测按钮状态、音乐播放等。
  
7
  
8
  
9
  
10
  
  
music.set_tempo(bpm=220)
  
Player_A_tune = ["c", "d",  "e", "f", "g"]
  
  
Player_B_tune = ["g",  "f", "e", "d", "c"]
  
7行:控制当按键按下时音乐的播放速度,数值越大,播放越快。
8行和第10行:定义2个列表,均含5个字符。这些字符代表着音符的名字。
UpyCraft-micropython: 让Microbit发声图7
你可以自己写出更好的曲调,这里还有一些曲调可供参考:
"c#:4"  :播放c调4个节拍
"db5:1" :播放D调1个节拍,5代表播放比C调多一个八度音阶(即音阶4)
"eb3:3" 播放E调3个节拍,第一个3代表播放比C调多一个八度音阶(即音阶4)
  
12
  
13
  
14
  
15
  
16
  
17
  
18
  
19
  
20
  
21
  
22
  
23
  
24
  
  
display.scroll("Quiz  buzzer")
  
  
while True:
  
    display.show(Image.HAPPY)
  
    if  button_a.was_pressed():
  
        display.show("A")
  
        music.play(Player_A_tune)
  
        sleep(2000)
  
    elif  button_b.was_pressed():
  
        display.show("B")
  
        music.play(Player_B_tune)
  
        sleep(2000)
  
    sleep(20)
  
12行:在屏幕上滚动显示字符' Quiz buzzer '/ " Quiz buzzer "。必须是英文字体的单引号或双引号。
14行:while循环,后面的条件满足时,将会执行后面的语句,执行完后,在判断条件是否满足,以此循环,直到条件不满足时退出。这里的True表示条件为真,那么程序会一直运行14到24行的代码。
UpyCraft-micropython: 让Microbit发声图8缩进是判断逻辑语句范围的标准,在python中非常重要。Python小白们要重视啊~
15行:显示一个笑脸。
16192023的功能相似:判断按键是否按下。如果按键a按下,显示‘A’播放列表‘Player_A_tune’,睡眠2秒,如果按键b按下,显示‘B’播放列表‘Player_B_tune’。
第24行:让程序睡眠20毫秒,然后继续进入循环。
下面是microbit的音乐代码,有一些错误供大家修改,‘#’可以注释(屏蔽)一行代码,可以用来判断BUG的位置。
[mw_shl_code=python,true]# musical quiz buzzer for micro:bit
# www.dfrobot.com.cn

from microbit import *
import music

music.set_tempo(bpm=220)
PLAYER_A_TUNE = ["c", "d", "e", "f", "g"]

PLAYER_B_TUNE = ["g", "f", "e", "d", "c"]

display.scroll("Quiz buzzer")

while True:
    display.show(Image.HAPPY)
    if button_a.was_pressed():
        display.show("A")
         music.play(player_a_tune)
          sleep(2000)
    elif button_b.was_pressed()
display.show("B")
music.play(player_b_tune)
sleep(2000)
sleep(20)
[/mw_shl_code]

*Python是区分大小写的
*Python中缩进很重要
如果你将代码调试出来了,你可以试试同时按下2个按键。你会发现它会显示a按键被按下。这是为什么?能不能修复它?(预知后事如何,请待下回分解UpyCraft-micropython: 让Microbit发声图9)





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

本版积分规则

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

硬件清单

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

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

mail