21
ii p r e f a c e 對我本身來說,這本書的完成也是件神奇之事,神奇的地方在於,這本書使用視覺 化程式語言,也就是使用基於 Scratch 2.0 mBlock 撰寫而成,你會看到許多圖, 而這些圖本身代表了程式,這種圖像式建構程式的方式,對程式設計入門者來說比 較簡單。 不過,我真正會選擇視覺化程式語言的原因是,相對於 Arduino 程式語言或其他 文字式程式來說,視覺化程式語言的程式設計元素不多,功能因而受限,然而,卻 能令思緒專注於如何解決問題,視覺化程式語言容易佔據設計環境的空間,因此能 突顯出程式可讀性安排的重要性,而有限的功能與元素,往往也能激發出有別於文 字化程式的設計方式。 而會選擇 mBlock,在於它有能夠將視覺化程式語言轉為 Arduino 程式語言的 Arduino mode」模式,可以將轉換後的程式直接上傳至 Arduino 控制板, 也可以進一步開啟 Arduino IDE 做適當編輯、修改與上傳,這樣就不用一直開 mBlock 來控制 Arduino,也能讓 Arduino 入門者初步觀察到,實際可上傳 Arduino 控制板的程式碼長相為何,而入門者若行有餘力,也能進一步地發揮 Arduino 控制板的功能。 這本書在撰寫的內容題材上,包括了我過去求學時期並不喜歡的電子電路元件,能 在十幾年之後,因為從 Arduino 中找到了有趣之處,而興致盎然地重新探索電子 電路相關知識,進一步得以在書籍中分享所得,也是本書的神奇之處。 秉持著這神奇的感動,本書採從做中學的方式,一開始從簡單的範例中,認識相關 電子電路基本特性,之後再進一步地,使用 Makeblock Me Orion 控制板來銜 接感應器,瞭解到這類現成的電路模組,目的是在於將思緒集中於更複雜的功能應 用,像是原型開發或實際可用的產品設計。

2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

ii

序p r e f a c e

對我本身來說,這本書的完成也是件神奇之事,神奇的地方在於,這本書使用視覺

化程式語言,也就是使用基於Scratch 2.0的mBlock撰寫而成,你會看到許多圖,

而這些圖本身代表了程式,這種圖像式建構程式的方式,對程式設計入門者來說比

較簡單。

不過,我真正會選擇視覺化程式語言的原因是,相對於 Arduino程式語言或其他

文字式程式來說,視覺化程式語言的程式設計元素不多,功能因而受限,然而,卻

能令思緒專注於如何解決問題,視覺化程式語言容易佔據設計環境的空間,因此能

突顯出程式可讀性安排的重要性,而有限的功能與元素,往往也能激發出有別於文

字化程式的設計方式。

而會選擇 mBlock,在於它有能夠將視覺化程式語言轉為 Arduino程式語言的

「Arduino mode」模式,可以將轉換後的程式直接上傳至 Arduino 控制板,

也可以進一步開啟 Arduino IDE做適當編輯、修改與上傳,這樣就不用一直開

著 mBlock 來控制 Arduino,也能讓 Arduino 入門者初步觀察到,實際可上傳

至 Arduino控制板的程式碼長相為何,而入門者若行有餘力,也能進一步地發揮

Arduino控制板的功能。

這本書在撰寫的內容題材上,包括了我過去求學時期並不喜歡的電子電路元件,能

在十幾年之後,因為從 Arduino中找到了有趣之處,而興致盎然地重新探索電子

電路相關知識,進一步得以在書籍中分享所得,也是本書的神奇之處。

秉持著這神奇的感動,本書採從做中學的方式,一開始從簡單的範例中,認識相關

電子電路基本特性,之後再進一步地,使用 Makeblock的 Me Orion控制板來銜

接感應器,瞭解到這類現成的電路模組,目的是在於將思緒集中於更複雜的功能應

用,像是原型開發或實際可用的產品設計。

Page 2: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

iii

作為銜接至實際 Arduino控制板開發應用的入門介紹,本書最後也簡單介紹了一

些 Arduino IDE的使用,以及 Makeblock程式庫的應用,這可讓入門者瞭解到,

如何自行撰寫程式,完成 mBlock中對應的程式功能,對日後要深入研究 Arduino

控制板也會有所幫助。

在英文中 Starting from Scratch就是從無到有之意,而 mBlock是在視覺化程

式語言開發環境 Scratch 2.0基礎上建立,能對 Arduino進行操控,因而書名

《用 mBlock玩 Arduino - Starting from Scratch》就是描述了我使用 mBlock玩

弄 Arduino,從有無到有逐步認識 Arduino的過程。

我從 mBlock 玩弄 Arduino 的過程中,得到了許多樂趣,也從無到有認識了

Arduino控制板,希望這本書也能帶給你這樣的體驗!

2015.08

Page 3: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

iv

前言 i n t r o d u c t i o n

� 導 讀

這份導讀讓你可以更了解如何使用本書。

� 目標讀者

雖然本書使用基於 Scratch 2.0的 mBlock,而談到 Scratch,許多人都會覺得這

是小學生初學程式時使用的視覺化程式語言工具,不過,本書的目標讀者並不限於

小學生,而是對程式設計有興趣,想要利用程式設計控制 Arduino與相關電路模

組的初學者,實際上,本書撰寫時假想的對象,是一群不懂程式設計、基本電子電

路與 Arduino的大學生,他們是我實際課堂上的學生。

要將本書應用到小學生身上也未嘗不可,不過本書中有些數學相關的知識,可能得

需視課堂學生們的情況,做更多的說明,如果真要將本書應用到小學生身上,也許

以高年級學生為主,會是比較好的做法。

� 圖片與字型

mBlock使用視覺化程式語言,每個程式積木的顏色各有其意義,因此本書採彩色

印刷,方便程式積木的對照,本書會有文字式的程式碼,特別是在第八章,程式相

關的文字,都用等寬字型來加以呈現,以與一般名詞作區別。例如 IDE是一般名

詞,而 setup為程式碼相關文字,使用了等寬字型。

Page 4: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-8

mB

lock

程式設計

02 2.2 驅動程式與 Arduino IDE

當連接一個新硬體至電腦時,被要求安裝驅動程式的這個動作,無論是作業系統已

內建驅動程式而自動安裝,或者是使用者另行手動安裝,對多數使用者來說並不陌

生,簡單來說,有了驅動程式,作業系統才知道如何控管所連接的硬體,並讓作業

系統之上的應用程式能使用連接的硬體資源。

安裝 Arduino 驅動程式

就目前為止,如果想控制 Arduino,Windows上必須自行手動安裝驅動程式,就

mBlock來說,這個動作在 mBlock中變得簡單,因為只要開啟 mBlock程式,執

行選單「連接/安裝 Arduino驅動」,或者自行尋找並執行「C:\Program Files

(x86)\mBlock\drivers」下的「Driver_for_Windows.exe」,就可以完成驅動程

式的安裝。

圖 2-9. 安裝 Arduino驅動程式

最重要的是知道,這個安裝 Arduino驅動程式的動作,到底作了什麼?實際上它

安裝的是 mBlock支援的控制板之驅動程式,支援的控制板可在選單「控制板」中

查看,下圖以 mBlock 2.1.5目前支援的控制板為例:

Page 5: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-9

圖 2-10. mBlock 2.1.5支援的控制板

Tip

Arduino早期的控制板使用 RS-232序列埠與電腦連接(可查看圖 1.1),

後來改用 USB連接,不同控制板會有不同晶片負責或模擬出 USB轉序列

埠的功能,安裝驅動程式的這個動作,主要就是讓作業系統知道,如何與

控制板上的 USB控制晶片溝通,也因此,不同控制板需要的驅動程式也各

不相同,mBlock的驅動程式安裝,則是將它所支援的控制板驅動程式全部

安裝上去。

下載、安裝 Arduino IDE

如果只是要使用 mBlock來控制 Arduino,那麼無需安裝 Arduino IDE,不過,

mBlock 可以執行選單「編輯/ Arduino mode」,將視覺化程式語言轉換為

Arduino程式語言,如果對轉換後的程式碼想要進行修改,在已安裝有 Arduino

IDE的情況下,在 mBlock中可以直接按下「用 Arduino IDE編輯」(如下圖紅色

箭頭處所示):

Page 6: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-10

mB

lock

程式設計

02

圖 2-11. mBlock的 Arduino mode

本書之後的章節也會介紹如何將視覺化程式語言轉換為 Arduino程式語言,以直

接上傳到 Arduino控制板,並也會說明如何開啟 Arduino IDE修改程式,藉由這

個過程,讓你逐步認識 Arduino IDE的使用,也是本書的目的之一,因此,請你此

時連同 Arduino IDE一併安裝,下載 Arduino IDE的網址是:

º http://www.arduino.cc/en/Main/Software

圖 2-12. Arduino IDE下載頁面

Page 7: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-11

撰寫本書的時候,Arduino IDE 最新版本是 1.6.4,Windows 使用者可以按右

上的Windows Installer,進行下載前會進入一個頁面,由你自由決定是否贊助

Arduino Software,如果按下「JUST DOWNLOAD」,就會開始下載 arduino-

1.6.4-windows.exe,檔案約 77MB左右。

圖 2-13. 下載 Arduino IDE

下載完成後,直接按下 arduino-

1.6.4-windows.exe,在接下來的

安裝畫面中按下「I Agree」同意

授權合約,後續按下「Next >」決

定安裝路徑,請採用預設的「C:\

Program Files (x86)\Arduino」

即可,如此 mBlock 就可以直

接找到 Arduino IDE,再來按下

「Install」就可以開始進行安裝。

圖 2-14. 安裝 Arduino IDE

在安裝完成之後,你首先可以查看的是「C:\Program Files (x86)\Arduino\

drivers」資料夾,我剛才談過 Arduino驅動程式,如果你想要自行安裝 Arduino

各種控制板的驅動程式,可以在這個資料夾中找到。

Page 8: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-12

mB

lock

程式設計

02 2.3 第一個 mBlock與 Arduino程式

那麼,該來認識一下 mBlock的開發環境了,逐一說明 mBlock中各區塊的功能也

是蠻無聊的,那麼就直接使用 mBlock控制 Arduino吧!我們要使用的控制板是

「Arduino Uno」,讓控制板上頭標示為 L的 LED以一秒之間隔不停閃爍。

連接 Arduino Uno 與更新韌體

請將 Type B USB接頭(六角形)連接 Arduino Uno控制板,而另一頭是 Type

A USB連接個人電腦,連接好之後,應該要看到控制板上標示為 ON的電源指示

LED亮起。如果你已經完成驅動程式的安裝,在「控制台 \系統及安全性 \系統」

中按下「裝置管理員」,就會看到「連接埠 (COM和 LPT)」中出現「Arduino

Uno」,請確認其中的連接埠號,你看到的連接埠號不一定與我的相同。

圖 2-15. 確認 Arduino Uno的連接埠

接著開啟 mBlock,在選單「連接」中選擇於「裝置管理員」中看到的 Arduino

Uno連接埠,這時會呈現「序列埠已連接」字樣,接著在選單「控制板」中選擇

「Arduino Uno」,這時再度開啟選單「連接」時,就會看到「更新韌體(Arduino

Uno)」字樣。

Page 9: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-13

圖 2-16. 更新韌體

執行「更新韌體(Arduino Uno)」,你會看到「開始上傳」韌體的進度,這邊所

謂更新韌體,其實是指上傳一個 Arduino程式語言撰寫的程式至控制板,也就是

一個副檔名為 .ino的程式,這個程式會透過序列埠在控制板與mBlock進行溝通,

執行「連接/查看原始碼」,就可以看到 mblock_firmware.ino這個檔案,如果

已經安裝了 Arduino IDE,可以直接按下檔案開啟它。

至於你看到的一堆 .cpp、.h檔案,那是 Makeblock各感應器的程式庫原始碼,後

面的章節中,會有機會介紹到它們的基本使用方式。

圖 2-17. 查看 mBlock提供的韌體與 Makeblock程式庫

Page 10: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-14

mB

lock

程式設計

02 閃爍控制板上的 LED

在 Arduino Uno控制板上,標示數字 0到 13的腳位,可作為數位輸出腳位,也

就是可以輸出 5V高電位或 0V低電位的腳位,為了表示指的是數位腳位,通常以

D0到 D13表示(D代表 Digital),其中 D13腳位處,有個標示為 L的 LED,這

個 LED與 D13腳位相連,只要令 D13腳位為高電位,就可以令標示為 L的 LED

點亮。

要使用程式來控制 LED閃爍的話,請執行選單「擴充/ Arduino」指令,可以在

mBlock中央「程式區」的「事件」、「控制」與「機器人模組」,拖曳如下圖相

對應的程式積木:

圖 2-18. 閃爍 LED的程式

在這邊應該可以體會到視覺化程式語言的好處,程式的作用一目瞭然,當圖中左上

的綠旗被按下後,數位腳位 D13會以一秒的間隔不斷切換高低電位,高電位推動

LED發亮,而低電位時沒有電壓推動 LED,自然地,LED就熄滅。你可以執行選

單「檔案/保存專案」將之儲存為 Blink.sb2。

Page 11: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-15

上傳到 Arduino

圖 2-18的程式,只有在 mBlock開啟狀態下,程式才能不斷執行,因為實際上

程式並沒有上傳至控制板,而是 mBlock 持續透過 USB 序列埠與方才上傳到

Arduino控制板上的韌體溝通,USB相關電路與 RX、TX腳位,也就是 D0、D1

腳位有相連,因此,在 mBlock透過 USB序列埠與控制板上韌體溝通時,你還會

看到標示為 RX、TX的 LED閃爍。

如果想要令程式能直接上傳到 Arduino,在 mBlock中是做得到的,不過,必須移

除 mBlock中才能支援的程式積木,現在,請將圖 2-18的程式一開頭的程式積木

移除,因為Arduino中沒有「綠旗被點一下」這種行為,請改為「Arduino主程式」

這個程式積木。

圖 2-19. 準備轉換前的程式

你可以這麼看待圖 2-19的程式,每次為控制板插上電源後,就會執行「Arduino

主程式」這個程式積木與之後的流程。實際上,「Arduino主程式」這個程式積木,

會用來當作轉換視覺化程式語言為 Arduino程式語言的起點,為此,視覺化程式

語言中應該只有一個「Arduino主程式」,程式才能順利轉換。

想要轉換程式,可以執行選單「編輯/ Arduino mode」,然後就可以看到轉換後

的程式:

Page 12: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-16

mB

lock

程式設計

02

圖 2-20. 轉換程式準備上傳到 Arduino

你沒辦法直接在這邊修改轉換後的程式,如果想修改的話,必須安裝有 Arduino

IDE,並按下「用 Arduino IDE編輯」按鈕,這會啟動 Arduino IDE,在 Arduino

IDE中的基本編輯之後才會介紹,就現在來說,你只要按下「上傳到 Arduino」按

鈕,mBlock會進行程式編譯後透過 USB上傳至控制板,上傳過程中,可以發現

標示為 RX、TX的 LED閃爍,上傳完成後,控制板會執行程式,由於現在是直接

執行控制板上的程式,不是 mBlock透過 USB與控制板上的韌體溝通,因此,除

了標示為 L的 LED會閃爍之外,RX、TX這兩個 LED不會閃爍了。

Tip

你可以拔除 USB線,使用其他方式供應控制板電源,這部分請務必參考 1.3

節中有關電源供應的說明,以免不正確的電源供應損壞了控制板。

記得!如果自行上傳程式至 Arduino了,這程式就取代先前上傳的韌體了,想要

再度使用 mBlock控制 Arduino的話,記得重新上傳 mBlock的韌體!

Page 13: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-17

2.4 認識 mBlock程式區

在〈第一個 mBlock與 Arduino程式〉中,唯一要進行的線路連接,就是以 USB

連接電腦與 Arduino Uno,主要目的其實是以實際的例子,讓你認識 mBlock開

發環境中與 Arduino控制最相關的部分,完整地介紹 mBlock中 Scratch風格的

開發方式,不是本書最主要的目的,這是專門介紹 Scratch的書籍來負責,因此,

本書中幾乎都只著重在 mBlock的「程式區」、「Arduino mode」以及後續會談

到的「Arduino IDE」。

當然,一開始最重要的還是程式區,程式區的程式積木從「動作」到「機器人模組」

被分為十個類別,每個類別都使用不同顏色來區分,你可以先概略瀏覽一下各類別

下有哪些程式積木。由於本書以彩色印刷,因此,想要對照本書中的程式找到對應

的程式積木,只要看程式積木的顏色找到對應顏色的類別就可以了。

比較要注意的是「機器人模塊」的部分,這個類別中會出現的程式積木,視你在選

單「擴充」中點選了哪些擴充積木而定。

圖 2-21. 點選了 Arduino擴充積木

如果「擴充」中沒有點選對應的擴充積木,那麼「機器人模組」中就不會出現相關

的程式積木;如果沒有點選對應的擴充積木,而你開啟的專案檔案中,曾經使用過

相關的程式積木,那麼就會變成「undefined」程式積木外觀。

Page 14: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-18

mB

lock

程式設計

02

圖 2-22. 出現「undefined」程式積木

雖然一開始看來還蠻嚇人的,不過,可以試著執行選單「擴充」中的選項,應該就

可以恢復程式原本應有的樣貌。

因為這邊沒什麼要連接的電子電路元件,我想這是個專心瞭解「程式區」的好時

機,從實際的例子中運用相關程式積木是最好的學習方式,我們的對象仍是控制板

上標示為 L的 LED,不過,要來設計各種不同的控制方式。

使用上下鍵控制 LED

圖 2-18的「當綠旗被點一下」是個事件,你可以有多個「當綠旗被點一下」的積

木方塊,各積木方塊下的程式流程,會在事件發生時執行,你可以為多種不同的事

件定義不同的程式流程。舉例來說,想使用鍵盤方向鍵來控制 LED,可以如下組

合相關程式積木。

圖 2-23. 使用上下鍵控制 LED

非常簡單直覺的程式,試著用上下方向鍵控制看看,按上移方向鍵時 LED會亮起,

按下移方向鍵時 LED會熄滅。

Page 15: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-19

使用 L 按鍵控制 LED

你也可以使用一個鍵來控制 LED,方式之一是使用事件,例如,想在按下 L鍵時

令 LED亮起,放開 L鍵時令 LED熄滅,可以使用以下的程式(積木中使用小寫 l)。

圖 2-24. 使用 L鍵事件控制 LED

你也可以自行偵測 L鍵是否被按下加以控制,為了不斷查看 L鍵是否被按下,基

本上要使用迴圈。例如:

圖 2-25. 使用控制流程偵測 L鍵來控制 LED

在 mBlock或者是 Arduino IDE中,為了偵測某個狀態,經常會使用迴圈,通常也

會加上適當的「等待」時間,這通常是為了給電路適當工作時間,也為了給其他流

程有機會運行,比如說,如果有兩個「當綠旗被點一下」程式積木,其下各有兩個

迴圈,那麼有適當的等待時間的話,兩個迴圈中各自的執行流程,就會比較平順。

Page 16: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-20

mB

lock

程式設計

02 鍵盤事件其實只能在 mBlock中使用,因為日後你會使用 Arduino控制板連接某

些電路,而電路上並不會有 L鍵,此時,圖 2-25就是偵測某個情況是否成立的基

本流程。

廣播 L 鍵按下或鬆開

在「事件」分類中,預設可用的事件程式積木並不多,有時你會希望自訂事件,例

如,假設現在沒有「當按下 XX鍵」與「當鬆開 XX鍵」的事件,如果你對 L鍵是

否被按下有興趣,想分別定義不同的處理流程,該怎麼做呢?

圖 2-26. 廣播 L鍵按下或鬆開

你可以自訂各種廣播訊息,方式是在「廣播」程式積木下拉選單中執行「新訊息」,

可以將廣播做為自訂新事件的方式。

圖 2-27. 新增廣播訊息

Page 17: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-21

長按 L 鍵五秒自動熄滅 LED

接下來寫個稍微複雜點的範例,除了按下 L鍵會點亮 LED,鬆開就熄滅 LED之外,

我還想加上長按 L鍵超過五秒,就會自動熄滅 LED,你得鬆開一下 L鍵,LED才

會再度亮起。基本上,程式可以如下組合完成:

圖 2-28. 五秒自動熄滅 LED

嗯!不用試圖看懂這個程式,我只是想告訴你,視覺化程式語言是很方便沒錯,不

過佔據視覺空間也是它的致命傷,當程式複雜一點時,如果沒有適當地組織程式,

那麼可讀性會迅速下降!

Page 18: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-22

mB

lock

程式設計

02 好吧!這個程式還是有可以先說明的地方,也就是「變數」,因為我們必須知道上

一次「LED亮起時間」、「LED狀態」目前是否為點亮以及目前是否已「按 L鍵

超過5秒」,想在程式中記錄這些情況,可以使用「變數」,你可以在「資料與指令」

分類中「做一個變數」,如果不需要將程式轉為 Arduino程式語言,那麼「變數

名稱」可以是中文。

圖 2-29. 資料與指令中做一個變數

你可以指定變數適用的角色對象,新專案預設的角色只有一個,也就是「舞台區」

中的 M-Panda,就本書來說,變數都是設定為「適用所有的角色」。

就圖 2-28來說,我們可以逐步將相關的程式碼找出來,「新增積木指令」將它們

組合在一起。例如,程式一開始只是為了設定所有變數為 0。

圖 2-30. 新增「設定所有變數為 0」積木指令

Page 19: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-23

在「不停重複」的迴圈中,主要就是「執行按著 L鍵的流程」及「執行鬆開 L鍵」

的流程。

圖 2-31. 「執行按著 L鍵的流程」及「執行鬆開 L鍵」

現在應該可以很清楚地看出來重新點亮 LED的時機,就是 LED為熄滅狀態,而這

個狀態不是因為按 L鍵超過五秒而引起,當 LED點亮時,必須記錄當時的時間,

這邊使用了「計時器」,在「按著 L鍵超過 5秒就熄滅 LED」自訂積木指令中,

會再次使用「計時器」取得當時的計時,只要與 LED亮起的時間相減超過五秒,

就會熄滅 LED。

圖 2-32. 按著 L鍵超過 5秒就熄滅 LED

Page 20: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

2-24

mB

lock

程式設計

02 現在,「當綠旗被點一下」時的流程就簡單多了:

圖 2-33. 長按 L鍵五秒自動熄滅 LED

透過適當的程式組織,讓每一層執行流程的任務都清楚明瞭,視覺上不會被滿滿的

積木給填滿,而且也令個別任務的設計變得簡單多了,可以將圖 2-34與圖 2-28

做個比較,哪個比較清楚呢?

圖 2-34. 重新組織後的程式

Page 21: 2015epaper.gotop.com.tw/pdf/ACH019200.pdf · 作為銜接至實際Arduino 控制板開發應用的入門介紹,本書最後也簡單介紹了一. 些Arduino IDE 的使用,以及Makeblock

mB

lock

程式設計

02

2-25

附帶一提的是,視覺化程式語言另一個致命傷是除錯不易,不過,對於建立的每個

變數,在舞台區都會顯示目前的值,這可以讓在除錯時追蹤變數,可以善加利用。

圖 2-35. 舞台區會顯示變數值

2.5 結語注意到了嗎?這一連串的範例下來,你已經用過mBlock程式區中「資料和指令」、

「事件」、「控制」、「偵測」、「運算」、「機器人模組」分類中的一些程式積木了,

對於 mBlock中如何進行程式設計,算是有了個初步認識,面對本書之後的程式範

例,也有了個足夠的基礎,這樣也能夠比較專心在認識 Arduino Uno控制板,以

及基本的電子電路元件連接與相關控制,一樣地,這些都還是從實際的範例中來學

習,這是最好的方式!