2016-11-14

mBlock Extension 實作–為mBot Ranger加一個軟體計時器

  mBlock是開源自由軟體,還提供全新的擴展介面,讓我們得以根據我們的需求寫出擴展Extension,增加mBlock的功能。

有關擴展的應用,請參考探奇文章:mBot 遙控奇美電風扇 ( mBot remote controller by mBlock Extension)

請點擊『擴充』--> 『擴展管理器』


你會發現已經有許多專家高手寫出擴展,並且上傳到mBlock的 Github,供大家使用。



點擊『已安裝』按鈕,就會顯示已經安裝在mBlock的擴展,有多種控制板,例如mBot,Auriga,還有Arduino


按下『查看原始碼』,會開啟資料夾視窗,我們可以用記事本開啟附檔名為s2e的文件,看看裡面的內容



這些擴展採用JSON(JavaScript Object Notation) 格式,乍看之下很是複雜,其實仔細比較,發現有一定的規律及順序。


以mBot為主,關於『計時器歸零』指令與『計時器』讀值,就是下面的程式:

["R", "timer","getTimer", "0",
{"encode":"{n0}","setup":"","inc":"","def":"double currentTime = 0;\ndouble lastTime = 0;\ndouble getLastTime(){\n\treturn currentTime = millis()/1000.0 - lastTime;\n}\n","work":"getLastTime()","loop":""}],

["w", "reset timer","resetTimer", "0",
{"encode":"{n0}","setup":"","inc":"","def":"double currentTime = 0;\ndouble lastTime = 0;\n","work":"lastTime = millis()/1000.0;\n","loop":""}]

最近有老師發現mBlock裡面的Arduino指令中,所提供的計時器,並沒有效果。但是在mBot是可用的。仔細比對Arduino.s2e,mBot.s2e以及Auriga.s2e,發現裡面關於Timer的指令有差異。

於是利用記事本,開啟Auriga.s2e,簡單貼上上面的程式,並且修正Arduino.s2e的內容。

重新執行mBlock,可以發現mBot Ranger的指令中已經有了『計時器歸零』指令與『計時器』讀值。


檢查Arduino,所編寫的Sketch程式,也正確出現getLastTime();



雖然不知道添加這些擴充會不會有其他影響,不過如果因為亂改造成mBlock出現問題,大可不必擔心,只要點擊『還原出廠擴展』就能恢復正常。


擴展中,這個s2e檔案是針對上傳到Arduino的離線模式,所進行Sketch轉寫的方式,連線執行的指令在js子目錄中。這部份比較複雜,我還不會修改。

總結:這樣的修改僅對於離線模式有效,使用USB,2.4G,藍牙的連線控制是無法作用的。

當然還是希望mBlock正式推出更新版本,才能全面考量所有指令的影響,做出最妥適的修正。

















Scratch 與 mBlock 都,