2016年3月30日 星期三

從程式積木到程式語言




從程式積木到程式語言

有些同學已經發現,部分在mBlock中可以使用的積木,例如:變數清單,需將程式上載至mBot上時,卻無法使用,這時就必須回歸到最原始的介面,在Arduino軟體上以C語言撰寫程式,以便將程式上載至mBot中。

不過,在Arduino軟體中由無到有,要撰寫一個完整可用的程式,可能稍有挑戰,讓我們從mBlock建構出來的程式開始,成功率較高。

以我們熟悉的小蜜蜂程式為例,在mBlock軟體中,先把  
 
改為





在mBot 上按一下滑鼠右鍵,可以選擇將程式上傳至Arduino的板子:


我們可以看到mBlock軟體幫我們轉譯出來的程式,





對照音頻表及我們原本的程式:







    buzzer.tone(392, 500);   /* 播放低音So,節拍二分之一 */
    delay(1000*0.2);         /* 等待0.2 */
    buzzer.tone(330, 500);   /* 播放低音Mi,節拍二分之一 */
    delay(1000*0.2);         /* 等待0.2 */
    buzzer.tone(330, 500);   /* 播放低音Mi,節拍二分之一 */
    delay(1000*0.6);         /* 等待0.6 */




所以,剩下未完成的音樂,我們就可以啟動 "用Arduino IDE編輯" ,對照音頻表,自行完成!

 

存檔時,要注意,透過Arduino軟體存檔,會自行在指定的地方開一個資料夾後,將檔案以副檔名為”.ino”的檔案儲存下來,例如上述檔案以”bee”另存新檔後,資料夾的內容會如下:





編輯完程式後,就可以上傳至mBot機器人的板子上,讓它輕鬆地來一段小曲了。
上傳之前,別忘了要指定一下mBot連接的序列埠喔!
 

然後,指定上傳至序列埠連接的板子上,



如果,上傳時,看到以下的訊息:
 

告訴我們COM7存取被拒,聰明的同學猜猜看,為什麼?

因為COM7同時被mBlock軟體Arduino軟體占用住了,通常硬體的使用有排他性,就是很自私的不喜歡和別人共用,這是因為怕軟體在控制硬體時,互相影響,導致硬體表現出來的行為,不是軟體所預期的,所以,看到這個訊息時,請到mBlock軟體上釋放該序列埠,或將mBlock軟體關閉。

釋放序列埠,就是將勾選取消,




再做一次上傳,就可以成功囉!
 

記得下一次開啟檔案,要直接以Arduino軟體開啟”Bee.ino”程式,不要再透過mBlock軟體,否則,會看不到在Arduino編輯的程式喔!

不過,已經做過的同學可能發現,下一次開機時,若直接以Arduino開啟程式,會發現程式在編譯時就會發生以下錯誤訊息:



那是因為直接開啟Arduino軟體,它並不知道我們mBlock要參考的程式庫MeMCore.h在哪裡,
所以在程式中#include <MeMCore.h>這行程式就會發生編譯錯誤了!為了避免這個錯誤,我們必須把mBlock要用到的程式庫放到Arduino程式庫區,這樣他才查詢得到。


 
首先,我們要去mBlock放程式庫的地方C:\Program Files\mBlock\Arduino\libraries
mBlock程式庫複製下來



放到Arduino存放程式庫的地方"媒體櫃\文件\Arduino\libraries",供它存取參考,
 


這樣程式編譯就不會有問題了!



另外,若是在上傳時發現以下訊息:
 

通常是因為沒有指定正確的序列埠,Arduino軟體無法透過序列埠,將程式上傳到板子上。
記得要先指定正確的序列埠再上傳,應該就不會錯了!