# 《嵌入式程式設計實作 : 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) ![](https://i.imgur.com/OH66yUB.png) 所以本專題的程式碼實作參考如下: ```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: `嵌入式程式設計`