本篇來聊聊,Arduino軟體運行的架構.
使用的範例為知名的"Blink"
首先,先準備硬體.
這邊所選擇的是Arduino Nano.其他系列也是大同小異,就不再贅述.
Nano,如下圖.
Nnao的硬體架構很簡單,如上圖,那個黑色的正方形就是控制的主角,單晶片.
編號是,ATmega328, 背面還有一顆IC是USB to serial bus的IC.
剩下就是電源電路及LED電路.就這樣.
那什麼是USB to serial bus的IC呢?
簡單說,他就是一個電氣轉換的通訊IC.
在不同的硬體間,為了通訊.主要會採用2種方式通訊,一種是無線,一種是有線.
無線用的是微波技術.像是BlueTooth/WIFI/GSM...等.
那微波技術又是什麼!不行,再扯下去,會扯太遠,我還是另闢一篇章來探討好了.哈!
拉回來.
另一種是有線,顧名思義,就是有一條線在硬體和硬體之間,靠著電氣傳輸,來達到通訊目的.
像是USB/HDMI/EtherNet/電話線/第四台...等
每一種都有各自的電氣規格,所以不能互通.就像語言一樣,說中文不能跟英文互通,除非透過翻譯.
以USB隨身碟來說,他只能用USB來跟他通訊.因為它只有USB通訊埠.
以PC來說,你則可以用USB/HDMI/EtherNet來跟他通訊.因為它有這些通訊埠.
以Nano來說,它就是透過USB to serial bus的IC,來跟PC的USB通訊的.
那為何要用USB而不用其他方式跟PC通訊.
是因為工程師在設計產品就必須考量,市場接受度/相容性/成本/使用容易...等特性.
回到主角ATmega328這顆單晶片,如下圖.(此圖節錄自 ATmega328P原廠規格書)
總共有32隻腳.多為複合腳位.
什麼是複合腳位,以第1隻腳來說它含有PCINT19/OC2B/INT1的多重功能,但一次只能使用一種.
Blink這個程式使用的就是第17腳(PB5/SCK/PCINT5)這隻腳.如下圖(此圖是節錄自Arduino官方,Nano V2的電路圖)
在Arduino的定義裡,這隻腳為D13.
這隻腳也已預先串接上一顆電阻及發光二極體.
當D13腳輸出高電位(5V)時,電壓經電阻限流,讓足以驅動發光二極體的電流,流過發光二極體,使其發亮.
當D13腳輸出低電位(0V)時,無電壓輸出,即無電流產生.發光二極體保持常態.
這就是D13腳的數位輸出功能.
從上圖來看,D13腳還有數位輸入,及SCK(I2C)的功能,就是所謂的複合腳.不行,再扯下去,會扯太遠,以後有機會再來介紹好了.哈!
數位輸出,就是這隻腳能輸出高電位(5V,或稱為"1")及低電位(0V,或稱為"1"),2種電位.
也可以說是位元(Bit, Bit是Binary digit(二進位數位)的縮寫 )不行,再扯下去,會扯太遠,以後有機會再來介紹好了.^_^|||
簡單說,就是這隻腳可以輸出高電位,也可以輸出低電位,可以輸入高電位,也可以輸入低電位.
好,就這樣.硬體結束.
再來是軟體
這邊使用的是Arduino IDE,不清楚的,可以參考我的另一篇章http://thirtysec.pixnet.net/blog/post/222467340.
裡面的語法是使用C語言.
打開Arduino IDE,後範例原始碼放在,"檔案\範例\01.Basics\Blink"
程式碼如下:(節錄自Arduino IDE,Blink範例)
/* Most Arduinos have an on-board LED you can control. On the Uno and This example code is in the public domain. modified 8 May 2014
// the loop function runs over and over again forever |
拿掉不必要的註解後,如下.
void setup() {
void loop() { |
void setup()
{
}
及
void loop()
{
}
是Arduino的主框架,開啟一個空白檔案,裡面就會有這2個函數.
setup() 函數, 是在Nano上電後,第一個執行函數,但僅執行1次.
loop() 函數, 是在setup()函數執行完後,緊接直執行的函數.而且會一直重複執行,直到下電.
pinMode(13, OUTPUT); 這行是說將D13這隻腳, 設定為輸出腳.
只須設定一次,所以放在setup()函數中.
digitalWrite(13, HIGH); 這行是說,D13這隻腳, 輸出高電位.
digitalWrite(13, LOW); 這行是說,D13這隻腳, 輸出低電位.
delay(1000); 這行是說延遲1000 msec(1000微秒),在執行下一行.
軟體的執行,就像在讀書一樣,是由上往下一行一行的執行.
所以這範例的動作就是
setup(): 1. 設定D13為輸出腳.
loop(): 2. 輸出高電位, 使LED亮起來.
loop(): 3. 等待1秒
loop(): 4. 輸出低電位, 使LED變暗.
loop(): 5. 等待1秒
然後跳到2(loop()函數的第一行)重複執行.

Arduino Blink