踏入 Arduino 的大門,第一個必練基本功 就是讓 Arduino 聽懂你講話囉! 快來看看這些基本指令可以做哪些事情!
在上一堂課程中,我們介紹了 Arduino 的基本概念。今天我們要帶您了解程式的基本架構,還有一些超實用的基本指令!首先,我們要把 Arduino IDE 打開來,如果還沒安裝,趕快回去複習上一堂的課程唷!在啟動畫面消失以後,你會看到一個可以打字的視窗,裡面已經放了叫做 setup() 跟 loop() 的東西。
這兩個東西是 Arduino 最基本的程式架構,也就是說,不論你要用 Arduino 做什麼樣的作品,這兩個東西一定要存在。他們是用來做什麼的呢?我來舉個例子:夏天到了,很多人都會開冷氣,通常你設定好溫度以後,冷氣機就會自動偵測環境的溫度,然後計算溫差,再把房間的溫度降下來。
這些動作,其實可以分成「設定」還有「運作」兩個部分:我們只要設定一次溫度,冷氣就會不斷運作,一直到我們把冷氣機關掉為止。
同樣的概念也被用在 Arduino 的程式當中,這個 setup() 就是「設定」,只要是夾在這個 setup() 區塊裡面的程式,在 Arduino 開機以後,都會先被執行一次,然後才交給負責「運作」的 loop(),不停的重複工作,直到關機為止。如果把剛才開冷氣的例子放進來,那他們的工作就變成了:在 setup() 裡面設定溫度,然後在 loop() 當中,不斷重複偵測溫度、計算溫差,還有啟動壓縮機之類的工作。
接腳模式設定
了解了基本程式架構,接著就要來介紹一些可以讓 Arduino 工作的指令啦!在 Class 1 的課程中 ,我們曾經提到 Arduino 上面有許多黑色的接腳,分別以數字或代號標示;其中 0 – 13 與 A0 – A5 這些接腳,我們姑且稱作「工作接腳」,都可以用指令來喚醒他們的一些特異功能。
第一個要介紹的特異功能,就是每個工作接腳都可以被當作「輸入」或是「輸出」模式來使用。簡單來說,如果我要從某隻接腳送入一些訊號讓 Arduino 來讀取,這隻接腳就必須設定為「輸入模式」;而當 Arduino 要從某隻接腳送出電流,讓外接的電路工作時,則必須被設定為「輸出模式」。
這個用來設定「接腳模式」的指令,就叫做 pinMode(),小括號裡會放兩個東西,用一個逗號區隔開來。第一個位置,我們放的是工作接腳的「編號」,也就是 Arduino 上面標示的 0-13,或是 A0-A5 這些編號;第二個位置,我們放的是「接腳模式」,也就是代表輸入模式的「INPUT」,或是代表輸出模式的「OUTPUT」。因為 Arduino 採用的程式語言有區分大小寫,所以 pinMode() 的 M、A0-A5 的 A,還有 INPUT 跟 OUTPUT 都必須使用大寫;這是程式的規則,如果用錯大小寫,是會產生錯誤的喔!
指令最後加上分號,代表一個指令完成了、結束了,就像幫句子加上句號一樣。這樣,我們就完成「接腳模式」的設定了!舉個例子:比如說我們在編號 7 的接腳上接了一個 LED 電路,為了讓 LED 亮起來,我們必須設定接腳 7 為輸出模式。所以我就可以使用 pinMode (7, OUTPUT); 這個指令,來讓他成為具有「輸出」功能的接腳。
數位訊號概念
但事實上,目前我們只有讓 Arduino 開啟接腳的輸出功能,卻沒有告訴這隻接腳到底要輸出什麼東西。所以,就得靠第二個指令來把話講清楚。
不過,在介紹第二個指令,跟第二個特異功能之前,我們必須先了解「數位(Digital)訊號」的概念!數位訊號就是「只有兩種狀態」的訊號,比如說電燈的開關,通常只會有「開」或「關」兩種狀態。所以,如果我把電燈使用的情況隨著時間記錄下來,這種不是「開」就是「關」的形式,我們就可以說它是一種「數位」的訊號。
其實,Arduino 就是透過各式各樣的數位訊號,來做運算還有通訊的;只不過,Arduino 把「開」跟「關」的概念,分別以「高電位」和「低電位」來表示,也就是「有通電」和「沒通電」的意思;且因為 Arduino 是用 5 伏特作為工作電壓,所以他們也同時代表了「5 伏特」跟「0 伏特」的意思。為了不造成你的困擾,你只需要記得 Arduino 有高、低這兩種電位的狀態,分別代表 5 伏特跟 0 伏特就可以了!
電位狀態設定
也就是說,工作接腳的第二個特異功能,就是每個工作接腳都可以是「高電位」或是「低電位」的狀態!這個用來設定「接腳狀態」的指令,就叫做digitalWrite()。它長得跟上一個指令很像,第一個位置仍然擺放接腳編號;但不同的地方在第二個位置:我們要放的是代表「高電位」的「HIGH」,或是代表「低電位」的「LOW」。
有了這個指令的搭配,我們就可以讓剛才不知道要輸出什麼的第 7 腳,輸出 5 伏特或是 0 伏特的電壓了。如果我要讓 LED 亮起來,我就使用 digitalWrite(7, HIGH); 這個指令,讓第 7 腳輸出 5 伏特電壓給外面的 LED 使用;反過來,如果我要把 LED 關掉,我就使用 digitalWrite(7, LOW); 這個指令,第 7 腳會立刻切斷電壓的輸出,就像我把電燈的開關關掉一樣。
執行暫停指令
現在,你已經學會了 Arduino 最強大的功能之一!不過在實際運用之前,我們還要介紹一個非常重要的指令。因為 Arduino 就像是一台猛催油門的車,所以如果沒有幫他裝煞車的話,就很有可能會失控!
所以我們需要 delay() 這個指令,可以讓 Arduino「暫停」一小段時間,就像把車停下來等紅燈一樣。這個指令的括號中只有一個位置,用來存放暫停的時間長度,以「毫秒」作為單位。所以如果我想讓 Arduino 暫停 1 秒鐘,我就可以下 delay(1000); 這個指令,等時間到了再繼續執行下一個任務。
今天介紹的這些指令,其實已經可以製作非常多有趣的小作品了,我們在下一堂課程 ,就會帶各位完成第一個屬於你的小專案,千萬不要錯過喔!這一集的 Arduino SpeedUp 就到這裡囉,我們下次見,掰掰!