本節書摘來自異步社群《動手玩轉arduino》一書中的第2章,第2.3節,作者【澳】john boxall,譯者 翁恺,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
一個arduino程式就是用來實作一個特定任務的一組指令。本節我們要建立和上傳一個簡單的程式,能讓arduino的led(見圖2-11)亮一秒、滅一秒,形成不斷的閃爍。

注意:
首先,用usb線把arduino闆連到計算機上,然後打開ide,選擇tools->serial port,确認正确的序列槽已經被勾選上,這樣就能确認arduino闆已經被正确地連接配接了。
首先,輸入一條注釋,說明程式的用途。注釋是程式裡任意長度的說明,是為了程式的使用者而寫的。程式裡的注釋用來給你自己或其他人加些說明,這是很有用的。注釋可以是說明指令,也可以是說明各種細節。在給arduino程式設計(寫程式)的時候,把你的想法寫成注釋是個好主意,将來修改程式的時候,這些注釋能提供有用的資訊。
在一行裡加上注釋,需要輸入兩個斜杠,然後寫注釋,就像下面這樣。
這兩個斜杠告訴ide在檢查程式的時候忽略後面跟着的内容(前面提過,在檢查程式的時候,你要求ide檢查程式書寫正确沒有錯誤)。
輸入占據兩行或多行的注釋,需要在注釋開始之前輸入/,然後在注釋結束的地方輸入/,就像下面這樣。
和兩個斜杠開頭的單行注釋一樣,/和/告訴ide忽略它們所括起來的文字。
用以上兩種方法之一輸入一條描述你的arduino程式的注釋,然後選擇file->save as儲存程式。給你的程式輸入一個簡短的檔案名(比如blinky),然後點選ok。
arduino程式的預設檔案名字尾是.ino,ide應該會自動加上這個字尾。是以,你的程式的檔案名就應該是blinky.ino,在菜單的sketchbook(素描本)裡可以看到它。
建立任何程式,接下去的事情都是加上void setup()函數。這個函數裡是arduino每次重新開機或開機時隻執行一次的指令。要建立這個setup函數,在程式的注釋後面,加入下面的行。
我們的程式要讓arduino闆上的使用者led閃爍,使用者led連接配接在arduino的13号數字引腳上。數字引腳可以檢測電信号,也可以根據指令産生信号。在這個作品中,我們要産生一個電信号來點亮led。這也許看上去有點複雜,數字引腳更多的細節會在後續的章節中介紹,此刻,隻要繼續寫程式就好。
在程式的大括号({})之間輸入下面的内容。
程式裡的數字13就是我們用的數字引腳的編号,設定這個引腳為輸出,就表示要在這個引腳上産生(輸出)一個電信号。如果你想在引腳上檢測所受的電信号,就需要用input。注意這個函數的調用pinmode()以分号(;)結尾。arduino程式裡的每個函數調用都要以分号結尾。
再次儲存你的程式,確定你不會丢失了你的辛苦勞作。
我們的目标是讓led不停地閃爍。為此,需要寫一個loop(循環)函數來讓arduino不斷地重複執行一些指令,直到斷電或是有人按了reset按鈕。
輸入下面代碼中在void setup()後面加粗的部分,就有了一個空的loop函數。别忘了這個新的部分要以另一個大括号(})結束,然後再儲存一次程式。
警告:
下面,輸入實際的要在loop()裡讓arduino執行的代碼。
在loop函數的大括号之間輸入下面的内容,然後點選verify按鈕來确認輸入的一切都是對的。
我們分開來逐一說明。digitalwrite()函數控制在數字引腳上輸出的電壓,在這個程式裡,就是控制連接配接了led的13引腳上的電壓。設定這個函數的第2個參數為high,這就輸出了“高”電平,會有電流從引腳流出,led就會被點亮。如果設定這個參數為low,流經led的電流就會停止。
led亮了以後,用deay(1000);讓它保持1秒。delay()函數可以使程式在一段時間内什麼也不做。這裡是1000毫秒,或者說1秒,程式什麼也不做。
然後,用digitalwrite(13,low);把led上的電壓取消掉。最後,再用delay(1000);讓led保持1秒的熄滅狀态。
完整的程式如下:
在做任何事情之前,儲存程式。
檢查程式是確定程式以arduino了解的方式書寫。要檢查整個程式,點選ide的verify按鈕,然後等待一會兒。一旦程式被檢查完畢,就會在消息視窗顯示一條消息,如圖2-12所示。
“done compiling”消息告訴你程式已經ok了,可以上傳到arduino闆。它還告訴你程式用了多少記憶體(這裡是1 076位元組),這塊arduino上總的可用記憶體是32 256位元組。
不過,如果你的程式不對呢?比如,你忘了在第二個delay(1000)函數的後面加上一個分号。如果程式有問題,那麼在點選了verify按鈕之後,消息視窗會顯示檢查錯誤消息,如圖2-13所示。
這條消息告訴你,錯誤出在void loop函數裡,并且列出了它認為你的錯誤所在的程式行号(blinky:16,是blinky程式的第16行),然後是錯誤的描述,即error: expected ';' before '}' token(錯誤:在 '}'符号之前應該有一個';')。另外,ide還會把錯誤的地方用黃色高亮顯示,或是在錯誤的地方打一個點。這樣能讓你友善地找到并修改錯誤。
一旦程式已經正确輸入了,儲存好,确認arduino闆已經連接配接,然後點選ide的upload(上傳)按鈕。ide可能會再次檢查程式,然後再上傳到arduino闆。在此過程中,闆上的tx/rx led(見圖2-6)會不時地閃爍,說明資料正在arduino和計算機之間來回傳遞。
現在,arduino應該開始運作程式了。如果一切都做對了,led應該閃爍,亮一秒滅一秒!
恭喜你,現在,你已經基本了解如何輸入、檢查和上傳arduino程式了。
運作程式之後,可能想要改變它的動作,比如,調節led亮或滅的時間。因為ide很像一個文字處理軟體,是以可以打開之前儲存的程式,修改其中的内容,然後儲存、上傳到arduino。比如,要提高閃爍的頻率,改變兩次delay函數的調用,調整延遲的數值為250,就可以讓led每1/4秒閃爍一次,如下所示。
然後再次上傳程式,led就會閃爍得快點兒了,每1/4秒變化一次。