到目前為止,可以看到有些 Arduino 的函式,由於受到 mBlock 提供的積木功能而無法直接使用,照理來說,因為 mBlock 是基於 Scratch,應可以撰寫 Scratch Extensions,而按照 Scratchbot新功能介绍 的說明,可以透過 mBlock 中 ext 中 s2e 等檔案的載入來自行擴充積木,不過,要修改的不是 mBlock 安裝目錄下的東西,而是 C:\Users\使用者\Documents\mBlock\libraries 下的檔案,這點要注意!
昇級至 mBlock 2.1.4
在 mBlock 2.1.4 中,可以使用「編輯/Arduino mode」,這可以看到積木程式轉換為 Arduino 官方語言後的寫法:
當檢視畫面轉換為 Arduino mode 時,Arduino 不支援的指令,對應的 Scratch 積木方塊就不能使用,因此,「事件」中的「當綠旗被點一下」的積木,要改成「Arduino 主程式」積木,而上圖是〈mBlock & Arduino(8)光敏電阻、亮度感應器與光線追蹤器〉中的程式,在 Arduino mode 中轉換的結果。
這對於寫程式不怎麼熟的人來說還不錯,大部份的時間還是可以使用積木來搭建程式,並看看 Arduino 的對應程式碼,逐漸熟悉官方語言的寫法,就算不想使用官方語言,也可以在積木程式搭建好之後,按下「用 Arduino IDE 編輯」,作些小修改,照樣可以完成想要的功能,這樣應該比寫擴充來得簡單一些 … XD
只是,這樣就不能使用 Arduino 與 Scratch 直接互動,不過,程式寫好了,就可以直接上傳至 Arduino,不需要使用 USB 連接電腦了,只要透過 USB 或者是 2.1 mm 的 power jack 來外接電源,就可以執行了。
用 Arduino IDE 編輯
如果想要在 mBlock 的 Arduino mode 中,按下「用 Arduino IDE 編輯」來修改程式,必須下載、安裝 Arduino IDE,安裝好之後,可以在「工具/板子」中設定你的 Arduino 板子,在「工具/序列埠」中設定連接埠:
在上傳至 Arduino 之前,要先取消 mBlock 中的連接埠指定,這樣才不會造成這兩個軟體要同時存取連接埠的衝突,接著執行「檔案/上傳」,就可以將程式上傳至 Arduino 了!
如果你的程式碼不需要經由 Arduino IDE 修改,也可以直接在 Arduino mode 下,按下「上傳至 Arduino」按鈕,這會將程式碼編譯並直接上傳至 Arduino。
如果自行上傳程式至 Arduino 了,無論是使用 Arduino IDE 上傳,或者是在 mBlock 中按下「上傳至 Arduino」按鈕,想要再度使用 mBlock 控制 Arduino 的話,得記得重新上傳 mBlock 的韌體(也就是在指定連接埠之後,再執行一次「串口連接/更新固件」)。
使用 PWM 控制伺服馬達
在〈mBlock & Arduino(9)伺服馬達控制〉中我們談過,可使用 PWM 來控制伺服馬達轉動角度,不過,這要使用到 delayMicroseconds
函式,而 mBlock 中沒有對應的方塊,不過,你可以先設計以下的程式:
如果「等待」方塊可以支援到如圖設定的秒數,在切換至 Arduino mode 之後,直接按下「上傳至 Arduino」按鈕,伺服馬達應該會轉動 90 度,不過,等待方塊對應的是 delay
函式,顯然沒辦法支援到這麼小的秒數設定,以我實際的測試為例,馬達會轉動,不過沒有轉動到 90 度左右。
這時可以按下「使用 Arduino IDE」編輯,找出 delay(1000 * 0.0015)
,將之修改為 delayMicroseconds(1500)
,之後執行「檔案/上傳」,在程式完成上傳後,你的馬達應該就可以轉動 90 度左右了!
昇級 mBlock 2.1.4 後的小問題
附帶一提的是,mBlock 2.1.4 的「設置伺服馬達腳位…」的角度指定,改成了下拉選單的方式:
這樣的設計下,還是可以自行指定角度,不過,之前版本是只有自行指定角度而沒有下拉選單,也因此,如果你開啟之前 mBlock 版本下寫的程式,而其中用到了「設置伺服馬達腳位…」的話,新版的 mBlock 就不認得了:
這時記得修正為新的積木方塊就是了 … XD