mBlock是Makeblock公司以Scratch 2.0為基礎所開發的圖控式程式環境,初始是為了控制自家產品mBot機器小車所設計,至今mBlock也做了許多修改,除了連線控制mBot,最重要的功能就是能轉寫Scrtach的指令成為Arduino 的Sketch(草稿碼),上傳到mBot之後,mBot機器人便可以獨立自主執行程式。
令我無法理解的是,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無私地提供大家使用。
沒有留言:
張貼留言
探奇歡迎大家留言討論!謝謝分享你的意見。