學會了基本指令跟相關背景知識,還在等什麼? 快來製作第一個屬於自己的小專案啦!
在上一堂課程中,我們介紹了 Arduino 的基本程式架構還有指令,今天我們要帶您完成「第一個」動手做的小專案:讓一顆 LED 閃爍!這幾乎是每位 Arduino 初學者的第一個練習。
好消息是,Arduino 本身就內建了一顆 LED,而且是由第 13 腳來負責控制的。也就是說,我們不需要外接 LED 或是電路,只要讓 13 腳輸出高電位,也就是輸出 5 伏特,就可以讓這顆 LED 亮起來;相反的,輸出低電位,也就是 0 伏特,就可以把 LED 熄滅。
小專案:讓 LED 閃爍一次
所以,如果要讓這顆 LED 閃爍一次,我們該怎麼設計程式呢?
首先:設定第 13 腳為輸出模式。因為我們要從 13 腳送出電流給 LED 使用,所以在一開始,我們就得告訴 Arduino 第 13 腳之後要用來輸出東西;設定完成以後,接著在 13 腳輸出高電位,這個步驟就會讓 LED 亮起來。然後,我們要維持 LED 亮著的這個狀態一段時間,比如說 1 秒鐘,最後再把高電位換成低電位,讓 LED 熄滅。
這些步驟,其實全部都可以用我們學過的指令 來表示:首先是設定「輸出模式」的 pinMode(13, OUTPUT); ,然後是設定高電位的 digitalWrite(13, HIGH);。接著,這個「維持狀態」的步驟,就相當於叫 Arduino 暫停的意思,所以我們可以使用 delay(1000); 讓 Arduino 暫停 1000 毫秒,也就是 1 秒鐘,等時間到了再繼續執行下一行指令。最後使用 digitalWrite(13, LOW);,把接腳設定為低電位,就完成讓「LED 閃爍一次」的程式設計了。
因為這些指令,都只需要被執行一次,所以這段程式碼可以直接放到 setup() 區塊中,而 loop() 區塊則不需要放任何東西。這邊請特別注意,即使 loop() 區塊沒有任何工作,但他們都是基本程式架構中一定要存在的東西,所以這個 void loop() 是絕對不能刪除的喔!
小專案:讓 LED 連續閃爍
現在你看到的程式碼,就是可以在 Arduino 開機以後,讓 LED 閃爍一次的完整程式碼;但是,如果我希望在 Arduino 開機以後,LED 可以不斷閃爍,我該怎麼修改這個程式呢?
首先,我們一樣要設定 13 腳為輸出模式,所以 pinMode() 指令不需要修改。接著,在點亮、暫停、熄滅 LED 之後,我們應該要讓 Arduino 維持關閉 LED 的狀態一段時間,比如說:一樣是 1 秒,然後才重複點亮 LED 的動作 。
最直接的重複方式,就是瘋狂地複製這四行程式碼,讓 LED 看起來真的就像永無止境地在閃爍。但這不是一個聰明的作法!還記得在基本程式架構中,有一個最擅長「重複」的 loop() 區塊嗎?我們只要把這 4 行程式碼移到 loop() 區塊中,「不停閃爍」的功能就完成了。
現在 Arduino 只要一開機,就會先設定 13 腳為輸出模式一次,然後開燈、維持狀態、關燈、維持狀態,再開燈、維持狀態、關燈、維持狀態,持續到你把電源關掉為止。
Arduino IDE 環境設定
我們終於把程式給完成了。現在請打開 Arduino IDE,我們在上路以前還有些小東西要設定!首先,我們點選功能列上面的 Arduino / Preferences 進行開發環境的設定。這裡可以調整編輯器的語言,還有字型大小,當然最重要的就是要把顯示行數的功能勾起來。而 Windows 與 Linux 的使用者,同樣可以在功能列找到「偏好設定」的選項。
接下來,我們要使用 USB 線,把 Arduino Uno 連接到電腦上,然後在 工具 / 板子 選單,選擇 Uno。最後,在 工具 / 序列埠 裡,找到 Uno 這個裝置,點下去就設定完成了!同樣的步驟也能在 Windows 與 Linux 系統上使用。
好習慣:註解與縮排
現在,我們可以把剛才完成的程式,輸入到 IDE 裡面;或者,你也可以點選 檔案 / 範例 / Basics 裡面的 Blink,Arduino IDE 會開啟一個新的視窗,裡面放的就是我們這次小專案的程式碼。不過,你會發現程式碼裡面,有很多指令以外的灰色文字,這些東西叫做「註解」,是寫給程式設計師看的,通常用來說明程式或指令的用途;實際在執行的時候,Arduino 會把所有註解的文字忽略,所以不會影響原本程式的功能喔!註解有兩種使用方式:如果你有一大段文字要記錄在程式碼中,你可以使用一組 /* 跟 */,把這段文字註解起來;如果你只要對某一行文字進行註解,你就可以使用雙斜線 //,把符號後面的該行文字都註解起來。
另外,我們還要介紹一個東西,叫做「縮排」。如果仔細觀察,你會發現夾在大括號裡的程式,會比大括號外的程式還要偏右一點,這是為了方便程式設計師在看程式碼時,可以一眼就知道這段程式碼夾在哪個區塊裡面。
這是非常重要的程式撰寫習慣!從上面的比較圖中,我們就可以看出有縮排的程式碼,它的區塊跟結構相當明顯,有助於程式碼的撰寫與閱讀。我們可以利用鍵盤上的「Tab」按鈕,讓程式碼縮排;通常同一個區塊,也就是包在同一組大括號內的程式,會縮排到同一個高度。往後的程式,我們也都會遵守這樣的排版規則,一定要養成習慣喔!
完成小專案
最後,我們要把程式碼燒錄到 Arduino 當中。視窗的左上方,有五個按鈕,分別代表「驗證」、「上傳」、「新增」、「開啟」與「儲存」。我們可以先點選「驗證」,讓 Arduino IDE 檢查程式的語法有沒有錯誤,如果下方資訊欄沒有出現錯誤資訊,就可以按下「上傳」,把程式碼燒錄到 Arduino 當中囉!現在, Arduino 上的 LED 是不是真的在閃爍了呢? 恭喜你!完成了第一個屬於自己的小專案,並且學到了相當紮實的背景知識。你也可以嘗試修改 delay() 裡面暫停的時間長度,觀察閃爍的時間變化喔!
如果在「驗證」或是「上傳」的步驟出現錯誤,歡迎留言在下方的評論欄,我們會協助您排除問題。這一集的 Arduino SpeedUp 就到這裡囉,我們下次見,掰掰!
我在打程式的時候遇到了一個問題 用delay的話 下面的程式會暫停動作 有沒有什麼辦法可以修改 而且我的delay原本是讓LED亮1秒 不循環
程式碼如下
byte potPin1 =A0;
ledPin1 =10;
potspeed1 =0;
byte potPin2 =A1;
ledPin2 =11;
potspeed2 =0;
void setup() {
Serial.begin(9600);
pinMode(ledPin1, OUTPUT); pinMode(ledPin2, OUTPUT);
}
void loop() {
Serial.print(val1);
Serial.print("\t");
Serial.println(val2);
delay(100);
potspeed1 = analogRead(potPin1);
val1 = map(potspeed1, 0, 1023, 0, 255);
if(val1>=220){
analogWrite(ledPin1, 255);
delay(1000);
}
else{
analogWrite(ledPin1, 50);
}
potspeed2 = analogRead(potPin2);
val2 = map(potspeed2, 0, 1023, 0, 255);
if(val2>=220){
analogWrite(ledPin2, 255);
delay(1000);
}
else{ analogWrite(ledPin2, 50);
}
}
您好,想在不使用 delay() 的情況下讓 LED 閃爍,可以參考方範例「Blink Without Delay」來實作唷!