# 《嵌入式程式設計實作 : Blink!micro:bit》
:::info
- 專案目標:讓`micro:bit`最左邊一行的 LED ,依序點亮第一到第五顆,然後熄滅,周而復始
- 所需材料:
- 筆記型電腦一台
- 打開瀏覽器 https://python.microbit.org/v/2.0
- micro:bit 開發板 & USB 傳輸線
:::
> 💡Tips: 關於micro:bit的介紹與基本操作,請參考這份筆記[補充教材:認識micro:bit](https://hackmd.io/@howkii-studio/rk1UQmn_I)
#### 實作步驟與說明
1. 確定開發環境已架設完成
2. 確定問題需求,擬定解決方案
3. 撰寫程式碼
4. 偵錯、編譯程式碼並上傳至 micro:bit
5. 執行結果,並確認結果是否正確
> **重點思考**
> 1. 點亮micro:bit LED的語法是什麼?
> 2. 熄滅micro:bit LED的語法是什麼?
#### 開始撰寫程式碼
從micro:bit的官方文件,我們可以知道它已經提供點亮、熄滅LED的相關內建語法:
```python=
#點亮指定位置LED, x填入x座標, y填入y座標, LED_Brightness填入亮度(0-9)
display.set_pixel(x, y, LED_Brightness)
#熄滅全部LED
display.clear()
```
而micro:bit 針對LED的座標軸定義如下,左上角為(0,0)

所以本專題的程式碼實作參考如下:
```python=
from microbit import *
#使用while迴圈,讓以下程式碼週而復始運作(CH3詳細介紹用法)
while True:
display.set_pixel(0, 0, 9) #點亮LED(0,0)
sleep(1000) #暫停1秒,讓我們可以看到LED燈依序點亮的效果
display.set_pixel(0, 1, 9)
sleep(1000)
display.set_pixel(0, 2, 9)
sleep(1000)
display.set_pixel(0, 3, 9)
sleep(1000)
display.set_pixel(0, 4, 9)
sleep(1000)
display.clear() #熄滅所有LED
```
#### 思考:如何快速滿足變動需求
當我們完成這個小專題的實作,有個問題值得思考,如果今天題目改成:
讓micro:bit**左邊第二行**的 LED ,依序點亮第一到第五顆,然後熄滅,周而復始
那麼,這段程式碼要被改寫幾行才能滿足此需求呢?
> 答案是5行。
今天是控制5顆LED,請試想一下,大樓外牆的LED螢幕,都是上萬顆LED燈所組成,上面的圖案又是不斷地變化,所以工程師會以這種方式來設計LED螢幕畫面嗎?
> 如何快速應付變動需求,是每個工程師都需要克服的難題
### 我們使用變數(Variable),讓電腦使用 RAM 幫忙暫時儲存資料
以下是變數的使用範例,首先命名一個變數x,並且指定他的初始值為0。在以下範例,我們將x的值從0代換成1,可以透過print(),來看x的值變化
```python=
x = 0
print(x) #列印x,確認變數x目前的值為0
x = 1
print(x) #列印x,確認變數x目前的值為1
```
> 💡Tips:
> 變數的命名可以自行決定,但建議皆使用小寫英文字母,且不可使用python內建關鍵字,例如for, import
學習了變數的宣告語法後,我們來試著改寫剛剛的專題程式碼
找出整個運作規則:
1. 起點的X座標變了,Y座標不變
2. 從第一顆點亮到第五顆:X座標不變、Y座標+1
參考程式碼如下:
```python=
from microbit import *
x=0
y=0
#使用while迴圈,讓以下程式碼週而復始運作(CH3詳細介紹用法)
while True:
display.set_pixel(x, y, 9) #點亮LED(0,0)
sleep(1000) #暫停1秒,讓我們可以看到LED燈依序點亮的效果
display.set_pixel(x, y+1, 9)
sleep(1000)
display.set_pixel(x, y+2, 9)
sleep(1000)
display.set_pixel(x, y+3, 9)
sleep(1000)
display.set_pixel(x, y+4, 9)
sleep(1000)
display.clear() #熄滅所有LED
```
以上,我們就完成了專題最初的需求,讓最左邊那一排LED依序點亮,然後全部熄滅。
接著回到我們剛剛接到的變動需求,原本要改五行程式碼,才能改變不同的LED被點亮。
現在只要**改寫一行**,也就是Line 3 `x=0`改成`x=1`,就滿足變動需求了!
用行業內的說法,我們的程式碼結構變得**更有彈性**,更容易滿足變動需求,未來我們還會學習更多語法跟觀念來提升相關的技巧。
### 隨堂練習
1. 從左上角的LED,從左上往右下依序點亮第一到第五顆,然後熄滅,再重來一次 (需使用變數)
2. 承上題,改成左邊往下第二顆開始點亮,往右下依序點亮四顆,然後熄滅,再重來一次,請問要改幾行程式碼?
###### tags: `嵌入式程式設計`