2017-03-17

採用 mBlock 控制 Arduino LED燈的想法

 昨天我在臉書『mBot機器人 mBlock 教學問答』社團貼了一張圖(請看臉書連結),可能很多人不太清楚原由,所以在此發文介紹一下。



mBlock是Makeblock公司以Scratch 2.0為基礎所開發的圖控式程式環境,初始是為了控制自家產品mBot機器小車所設計,至今mBlock也做了許多修改,除了連線控制mBot,最重要的功能就是能轉寫Scrtach的指令成為Arduino 的Sketch(草稿碼),上傳到mBot之後,mBot機器人便可以獨立自主執行程式。

 由於是基於Scratch的開源自由軟體,當然mBlock也開放供大家免費下載使用。大家都知道長期維護開發一套軟體並非一件簡單的事,Makeblock公司投注許多人力物力,所以mBlock才有今天的面貌。

令我無法理解的是,mBlock大可以只限定支援mBot,mBot Ranger,Starter kit 等自家硬體產品。為何又要辛苦地支援Arduino所有相容開發板呢?


不論原因為何,這樣開放的作法造福許多Arduino玩家,甚至有一些賣Arduino小車的賣家也推薦直接使用mBlock來控制他們的機器,上次還有老師詢問如何控制智高的S4A小車(我終於知道原來智高用的是連續旋轉伺服機^^)

我想mBlock很好心地開放支援Arduinor各種開發板,應該很感激Makeblock才是。

程式設計有各式各樣的狀況,很難包容所有特殊情形。在實務上遇到問題,除了向原廠反應外,也要將心比心,思考有一些情況是原廠無法特別注意的。

另外還有一點,如果針對一些特殊狀況修改mBlock之後,是否會造成其他問題呢?這些情形都或許是他們無法快速改善的原因,也是mBlock團隊的苦衷。

重點是既然mBlock已經是免費提供使用,我個人覺得就應該心存感激,對於一些無法編譯或操控的狀況,我認為沒有什麼理由好抱怨的。

下面就是一個例子,在Arduino板子上連接多顆LED燈,想使用方便的方式,輪流控制點亮LED。新增一個積木指令,還用了參數傳遞LED燈的腳位。

以綠色旗子被點一下的連線控制都沒有問題,但是當改為Arduino主程式時,在設定上產生問題,從下圖的Sketch中可以看到,pinMode指令的腳位參數由於直接轉譯,變成number1。


所以無法編譯(mBlock統一顯示為『上傳失敗』)


我不是很瞭解轉譯的機制,但是我想在Scratch中靠著一些簡單規則的轉譯,對應各種不同的硬體接線,的確不容易處理這樣的問題。

(這種問題在mBot可能比較容易處理,因為mBot板載上面的硬體是固定腳位,可以根據現況事先宣告腳位設定。)

所以除了反應原廠外,我想應該可以試試一些解決方法。

既然轉譯直接將number1當作腳位參數,造成編譯中未定義變數的錯誤,那麼我們就真的做個同樣名稱的變數。並且事先給變數一個值13。當然還要先設置相關腳位為低電位,這樣才會產生pinMode指令。


測式成功後,想到可能還有其他新增指令,也會用到參數。

所以特別再做一個測試,兩個新增積木指令。


結果是成功的,可以正常編譯。


手邊並沒有多顆LED燈,所以無法針對多顆LED燈測試。

如果你需要使用mBlock控制Arduino板,又有新增積木指令的困擾,不妨試試看。

感謝mBlock無私地提供大家使用。