2024年2月10日 星期六

micro:bit Python Editor簡介以及範例

micro:bit Python Editor:https://python.microbit.org/v/3


從上圖來看,由左到右分別為主功能表、程式編輯區、以及micro:bit模擬區,感覺上設計很友善。在左下方的語言和設置選項,可以更改為繁體中文。


選擇繁體中文後,畫面如下:
以下說明參考文件。
1.變數(Variables)
變數可用來儲存可改變的數據,例如:作品的名稱、長或寛等。 

 2.顯示器(Display)

顯示數據在micro:bit 5x5 矩陣LED上,clear()表示清除,show()為顯示。

範例一、運用scroll和show來顯示文字或數字,scroll會以捲動方式呈現。 

1
2
3
4
5
from microbit import display
name = 'Tree Art'
display.scroll(name)
width = 2
display.show(width)

範例二、用Image來設計矩陣LED顯示的圖案,以0-9數字表示,0表示全暗,9表示全亮,':'表示換行。set_pixel(x,y,亮度)可以設計(x,y)的亮度。
1
2
3
4
5
6
7
from microbit import display

display.show(Image('01234:56789:'
                   '01234:'
                   '56789:'
                   '01234'))
display.set_pixel(1,0,9)

執行結果:

3.按鈕(Buttons)
範例三、is_pressed()和was_pressed()的差別,前者是當下按下,而後者是曾經按下。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from microbit import *

while True:
    if button_a.is_pressed() and button_b.is_pressed():
        display.scroll('A and B')
    elif button_a.is_pressed():
        display.scroll('A')
    elif button_b.was_pressed():
        display.scroll('B')
    sleep(1000)

範例四:讀取按鍵被按下次數
1
2
3
4
5
from microbit import *

display.scroll('Press A')
sleep(3000)
display.scroll(button_a.get_presses())

4.迴圈(Loops)
範例五、雙迴圈
1
2
3
4
5
6
from microbit import *

for y in range(5):
    for x in range(5):
        display.set_pixel(x, y, 9)
        sleep(50)

5.邏輯(Logic)
範例六、if-break的使用範列
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
from microbit import *

while True:
    if button_a.was_pressed():
        display.show('A')
    elif button_b.was_pressed():
        display.show('B')
    if accelerometer.was_gesture('shake'):
        break
display.scroll('Game over')

6.加速度感測器(Accelermeter)
範例七、當加速度感測器偵測到遙動以及向上時,分別顯示相對應圖示。
1
2
3
4
5
6
7
from microbit import *

while True:
    if accelerometer.was_gesture('shake'):
        display.show(Image.CONFUSED)
    if accelerometer.was_gesture('up'):
        display.show(Image.ARROW_N)

7.註解(Comments)
用#做為註解的開頭符號,範例請參考範例八。

8.數學(Maths)
範例八、取亂數、絕對值、和整數等數學運算
1
2
3
4
5
6
7
8
9
from microbit import *
import random

#隨機產生1到6的其中一個數字,並顯示在5x5矩陣LED上
display.scroll(random.randint(1, 6))
#取得加速計的y軸數值,並取其絕對值
display.scroll(abs(accelerometer.get_y()))
#取4.9數值的整數值
display.scroll(int(4.9))

9.列表(陣列)(Lists(aarays))
範例九、樹藝是利用樹皮、葉脈、種子的工藝
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
from microbit import *
TreeArt=[]
TreeArt.append('bark')#樹皮
TreeArt.append('vein')#葉脈
TreeArt.append('seed')#種子
display.scroll('Tree Art is the art of using ')
while True:
    for index, name in enumerate(TreeArt):
        display.scroll(name)
        if index<2:
            display.scroll(', ')
        else:
            display.scroll('.')
說明:for index, name in enumerate(TreeArt),利用enumerate(TreeArt)分別回傳項目的索引值和名稱。

10.功能或函式(Functions)
範例十、定義函式
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from microbit import *
#定義函式
def ShowTreeArt():
    TreeArt=[]
    TreeArt.append('bark')#樹皮
    TreeArt.append('vein')#葉脈
    TreeArt.append('seed')#種子
    display.scroll('Tree Art is the art of using ')
    for index, name in enumerate(TreeArt):
       display.scroll(name)
       if index<2:
           display.scroll(', ')
       else:
           display.scroll('.')
while True:
    ShowTreeArt()#呼叫函式
    display.clear()
    sleep(2000)
11.無線電(Radio)
範例十一、Send a smile,網址:https://python.microbit.org/v/3/ideas/send-a-smile
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
from microbit import *
import radio


radio.config(group=1)
radio.on()

while True:
    message = radio.receive()
    if message:
        display.show(Image.HAPPY)
    if button_a.was_pressed():
        display.clear()
        radio.send('smile')
說明:

上圖右下角有模擬無線電傳送功能,在其左方有一個下拉表單,按下後可以查看傳送和接收情形。


12.光度(Light level)
範例十二、讀取光度
1
2
3
4
from microbit import *


display.scroll(display.read_light_level())
執行結果:


13.溫度(Temperature)
範例十三、溫度
1
2
3
from microbit import *

display.scroll(temperature())
執行結果:

14.羅盤(Compass)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
from microbit import *

display.scroll(compass.heading())
magnet_strength_x = compass.get_x()
display.scroll(magnet_strength_x)
magnet_strength_y = compass.get_y()
display.scroll(magnet_strength_y)
magnet_strength_z = compass.get_z()
display.scroll(magnet_strength_z)
magnet_strength_all = compass.get_field_strength()
display.scroll(magnet_strength_all)
執行結果:

15.聲音(Sound)
範例十五、聲音和語音
1
2
3
4
5
6
7
8
import music
import speech
from microbit import *

music.play(music.BIRTHDAY)
speech.say('Hello, world. How are you?')
music.play(['c', 'd', 'e', 'c'])
audio.play(Sound.GIGGLE)

16.麥克風(Microphone) V2
範例十六、麥克風
1
2
3
4
5
6
7
from microbit import *

while True:
    if microphone.current_event() == SoundEvent.LOUD:
        display.show(Image.HAPPY)
    elif microphone.current_event() == SoundEvent.QUIET:
        display.show(Image.ASLEEP)
執行結果:

17.觸控標誌(Touch logo) V2
範例十七、觸控標誌
1
2
3
4
5
from microbit import *

while True:
    if pin_logo.is_touched():
        display.show(Image.HAPPY)
執行結果:

18.數據記錄(Data logging) V2
範例十八、每隔1秒,記錄溫度、聲音、和光度。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
from microbit import *
import log


log.set_labels('temperature', 'sound', 'light')
@run_every(s=1)
def log_data():
    log.add({
      'temperature': temperature(),
      'sound': microphone.sound_level(),
      'light': display.read_light_level()
    })
    
while True:
    sleep(100000)
執行結果:

19.引腳(Pins)
20.NeoPixels
有關引腳和NeoPixel的範例,可以參考micro:bit -悟空板(WuKong):NeoPixel測試 (Python版)
21.資料處理(Data types)
範例十九、數字轉字串
1
2
3
4
from microbit import *

score = 17
display.scroll('Score: ' + str(score))
22.字串操作(String manipulation)
可以參考範例十九
23.文字輸入和輸出(Text input and output)
範例二十、文字輸入和輸出
1
2
3
4
5
6
7
from microbit import *

while True:
    name = input('What is your name? ')
    print('Hello', name)
    display.scroll('Hello'+ name)
    sleep(1000)
執行結果:

24.高等數學(Advanced maths)
範例二十一、數學和邏輯運算
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
from microbit import *
from math import *

display.scroll(pi)
display.scroll(sqrt(25))
display.scroll(cos(1))
display.scroll(radians(180))#角度轉徑度
display.scroll(degrees(3))#徑度轉角度
display.scroll(log(10, 2))
number = 0b11111111#二進位
display.scroll(number)
number = 0xFF#十六進位
display.scroll(number)
x = 0b11110000
y = 0b10101010
display.scroll(bin(x & y))#和
display.scroll(bin(x | y))#或
display.scroll(bin(x ^ y))#互斥
display.scroll(bin(x << 4))#左移
display.scroll(bin(x >> 2))#右移
display.scroll(bin(~x))#取補數

沒有留言:

張貼留言