由於我們一般使用的編程軟件-ArduinoIDE 必須要在電腦連接Arduino板的實物才能運作(哪怕你的程序不會用到實物零件),所以先介紹的我們先用線上的Arduino模擬器做個簡單練習吧!模擬器簡單來說就是不用實物也能看到和實物一樣的效果,這個功能非常適合同學在家中沒有任何Arduino板時也能做練習或者自行創作,也是完全免費免安裝免註冊哦!
直接點網址進入:https://wokwi.com/
這個就是Wokwi的主頁,標題下面有些別人做好的例子,有空可以點進去看看,這裡先跳過
把畫面向下拉,可以看到Start from Scratch,這裏有不同型號的控制板可以讓我們選。我們學校主要是用Arduino UNO這款,所以點選左上的Arduino Uno
除了上面的方法,也可以直接用這個網址進入: https://wokwi.com/projects/new/arduino-uno
Arduino UNO的版面如下:
左邊紅圈 I 是打程式碼的地方,而右方則是模擬實物效果的模擬Arduino UNO板。
當你打好程式碼後,按右上方紅圈 II的綠色Play按鈕,右方的UNO板就會模擬程式的效果了
在上方紅圈的程式碼中,以//開始的文字、或者以/* */包覆的文字全部都是代表註解,註解及空行都不會影響到程式內容,故為方便閱讀,也可以先把它刪除,變成下面這樣:
void setup() {
}
void loop() {
}
上方的這兩段指令就是Arduino編程的基本指令:setup區和loop區
void setup(){ }的內容代表控制板有電時會馬上執行一次的內容、void loop(){ }的內容代表執行完setup的內容後就不斷重覆執行的內容
要執行的內容只需放在{ }內就會執行,可以參考右方的圖片,圖片左邊是coding的代示方式,圖片右邊是Scratch的編程方式
以右方圖片為例,其功能是一開始執行一次Do xxx,執行過後就會不停執行Do yyy
在沒有其他零件時,Arduino UNO主板上僅有一顆內置的LED可以讓我們控制,見右圖L字的位置。
我們做的第一個練習就是要令這顆燈亮起來,順便熟習一下Arduino的語法。
要令LED開燈,需要用到2句指令,分別為
pinMode(LED_BUILTIN,OUTPUT); //設定燈為輸出訊號用
digitalWrite(LED_BUILTIN, HIGH);//設定燈的訊號為高電位(HIGH的意思就是供電)
因為上述的指令只要運行一次,LED燈就會長開(像開燈掣),所以上面的指令就放在setup區內就可以了。故整段完整指令的樣子就像下面。雖然loop的部份是空白但不能刪除
void setup() {
pinMode(LED_BUILTIN,OUTPUT); //設定燈為輸出訊號用
digitalWrite(LED_BUILTIN, HIGH);//設定燈的訊號為高電位(HIGH的意思就是供電)
}
void loop() {
}
完成後按下開始鍵就可以看到結果(如下圖)
上面我們學了用digitalWrite(LED_BUILTIN, HIGH)令LED開燈,哪麼該如何關燈呢?
答案就是把HIGH改為LOW了,即
digitalWrite(LED_BUILTIN, LOW);//設定燈的訊號為低電位(LOW的意思就是斷電)
那麼今次的練習是,在Level 1 的基礎上,我們讓LED亮一秒後就關了。程式碼如下:
pinMode(LED_BUILTIN,OUTPUT); //設定燈為輸出訊號用
digitalWrite(LED_BUILTIN, HIGH); //設定燈的訊號為高電位(供電)
delay(1000); //維持上面的狀態xx ms(毫秒)
digitalWrite(LED_BUILTIN, LOW); //設定燈的訊號為低電位(斷電)
上面我們學了用digitalWrite()令LED開燈或關燈,哪如果令LED燈不停閃爍呢?
先給點小提示,閃爍其實就是不斷重覆開燈和關燈的動作,這裏就設定閃爍的速度是開燈一秒關燈一秒吧
哪麼該如何用上面所學的程式做到呢? 在1b 題目的基礎上先想想,再看下面的解答吧
void setup() {
pinMode(LED_BUILTIN,OUTPUT); //因為只要一開始設定燈為輸出訊號就完了,所以留在setup區
}
void loop() {
digitalWrite(LED_BUILTIN, 1); //設定燈的訊號為高電位(供電)
delay(1000); //維持上面的狀態xx ms(毫秒)
digitalWrite(LED_BUILTIN, 0); //設定燈的訊號為低電位(斷電)
delay(1000); //維持上面的狀態xx ms(毫秒)
}
試試看把改變LED燈的閃爍頻率(速度)改成1秒內1次開關循環吧!
閃爍頻率(速度)1秒內1次開關循環,即是半秒開半秒關燈,所以delay的時間改為500(500ms = 0.5s) 即可
digitalWrite(LED_BUILTIN, 1); //digitalWrite內的HIGH也可以寫成1
delay(500); //維持上面的狀態xx ms(毫秒)
digitalWrite(LED_BUILTIN, 0); //digitalWrite內的LOW也可以寫成0
delay(500); //維持上面的狀態xx ms(毫秒)
之前提到Arduino UNO板上只有一顆內建的LED燈,如果要連上其他的零件,就要用上右圖的接口了,這種常見的接口通稱杜邦頭(DuPont pin)
以UNO為例,我們可以用的pin(接口腳)有20個,它們的名稱分別為0~13,以及A0~A5。各位的功能我們留待1.4節再詳談
上面我們學了用digitalWrite(LED_BUILTIN, HIGH);這裏的LED_BUILTIN其實是指13號pin,因為UNO板的13號pin是連着內建的LED
如果我們在9號腳連上了一顆LED,我們只要把LED_BUILTIN這個字換成9就可以了
要加上LED開燈,可以按開始旁邊的"+"號新增零件,請加入LED 和 Resistor(電阻)各一個,然後如右圖連接;完成後把1c或1d的程式的LED_BUILTIN換成9就可以了
void setup() {
pinMode(9,OUTPUT);
}
void loop() {
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(1000);
}
如無意外可以看到紅色的LED燈在閃爍
在2a的基礎上新增2顆不同色的LED到10號和11號pin並讓他們一起閃爍吧!
void setup() {
pinMode(9,OUTPUT);
pinMode(10,OUTPUT);
pinMode(11,OUTPUT);
}
void loop() {
digitalWrite(9, HIGH);
digitalWrite(10, HIGH);
digitalWrite(11, HIGH);
delay(1000);
digitalWrite(9, LOW);
digitalWrite(10, LOW);
digitalWrite(11, LOW);
delay(1000);
}
(可選)如果有時間的話,可以嘗試參考旁邊的紅綠燈,在2b的基礎模擬右邊的紅綠燈閃爍模式吧!
如果你已經順利完成了2b (甚至2c)的練習﹐恭喜你!你已經掌握Arduino的編程基礎了!
這個章節我們主要學習了setup,loop兩個區的分別,以及digitalWrite,delay等指令,這些名詞之後都會經常出現,請緊記!
在下一章節我們會開始使用實物的Arduino板進行編程:1.1 實體編程