Arduino是一個Open Source的單晶片微控制器,使用語言是基於C語言而編成的語言;我認為Arduino跟8051有87%相似〈個人膚淺的覺得Arduino只是高級版的8051,若未來有什麼新的體悟,我會回來把這句話修改一下XD〉,只是Arduino不管是硬體上還是軟體上,比8051更容易上手,而跟8051不同的是,Arduino無法透過Assembly Code(組合語言)去編撰程式,而8051可以。
〈P.S. Assembly真他媽難寫,寫Assembly之前請先要有「計算機結構」的基礎,不然Bug會永遠修不完〉
Arduino有好幾種擴充板,常用且入門的是下面這塊「Arduino UNO R3」。
一塊Arduino UNO R3 |
其規格如下:
微控制器
|
ATmega328P-PU
|
工作電壓
|
5V
|
輸入電壓(建議)
|
7 - 12V
|
輸入電壓(限制)
|
6 - 20V
|
數位 I/O Pins
|
14支(其中有6支Pins可提供PWM輸出)
|
類比 Input Pins
|
6支
|
I/O Pin 的直流電流
|
20mA
|
3.3V Pin 的直流電流
|
50mA
|
Flash 記憶體(快閃記憶體)
|
32KB(其中0.5KB給bootloader使用)
|
SRAM(靜態隨機存取記憶體)
|
2KB
|
EEPROM(電子抹除式可複寫唯獨記憶體)
|
1KB
|
Clock speed
|
16MHz
|
長度
|
6.86cm
|
寬度
|
5.34cm
|
重量
|
25g
|
硬體構造基本介紹:
- 數位輸入/輸出:搭配digitalread()、digitalwrite()和analogWrite()指令來使用〈analogWrite()只有PMW Pin有作用〉。
- 板子上的LED:內建LED,其連接Pin為Digital的接腳13。
- 電源指示燈:顯示Arduino是否有通電。
- 主控IC:使用Atmel的megaAVR家族的「ATMEGA328P-PU」,是Arduino的核心。
- 類比輸入:相對於數位輸入只能提供0跟1,類比輸入提供10位元(最高數值1024)的解析度,在應用某些感測器和元件必須使用類比輸入。
- GND和5V Pin:提供外接電路5V和接地。
- 外接電源插座:當Arduino無法從USB port供電時,這裡可以提供7~12V的直流電壓。
- TX和RX:負責處理Arduino和電腦之間的通訊〈也可以用軟體模擬TX/RX,詳情請見藍芽章節〉。
- USB port:提供Arduino電源、燒錄程式和通訊。
- Reset:按一下可以把Arduino重新開機。
ATMEGA328P-PU參考腳位:
Arduino UNO R3就是基於這塊IC所產生的微控制器,其腳位對應都來自此IC |
實際ATMEGA328P-PU |
Arduino IDE:
Arduino的語言基礎是基於C,所以要寫Arduino必須具備C語言的能力〈但不用太強,只要有大學一年級的計算機概論之基礎即可〉目前Arduino IDE的版本已經來到了1.6版,而我之前一直沒有對IDE進行更新,個人認為新版的IDE比舊版還不容易使用,原因是舊版對於程式中的保留字之顏色比新版的豐富且顯眼〈如果不懂什麼是保留字,請回去重修計算機概論,不然就看看這裡〉、新版IDE在開啟的初始化時間也比舊版的久很多,這讓我感到十分詫異(!)。
Arduino IDE起始畫面 |
Arduino IDE介面 |
在IDE裡可以看到,程式結構分為「void setup()」和「void loop()」,其意義在圖片上的英文也說明的很清楚了,翻譯成白話解釋為:
- void setup():這一區可以驅動Arduino版上的腳位,各個元件的初始化專用code也放於此。
- void loop():這一區是主程式區,也就是C語言的「int main()」,不同的是這一主程式區的程式會自動反覆執行,說白話一點就是while(1)〈無窮迴圈〉,他不像C語言只會執行一次。
範例Code:
在這裡可以找到各種範例Code,我們以Blink做為範例使用 |
Arduino Basic Example:Blink
Blink程式 |
這裡把主要的原碼抄過來並解釋:
void setup()
{
pinMode(LED_BUILTIN, OUTPUT) ; // LED_BUILTIN為預設腳位13的內建LED,OUTPUT代表輸出腳位13進行使用
}
void loop()
{
digitalWrite(LED_BUILTIN, HIGH) ; //因為LED的開關只有0跟1,所以使用數位寫入和讀取;這裡表示讓腳位13呈現高電位( 1 ),也就是打開LED
delay(1000) ; //延遲1000ms,也等於1秒鐘
digitalWrite(LED_BUILTIN, LOW) ; //腳位13呈現低電位( 0 ),關掉LED
delay(1000) ; //延遲1000ms,也等於1秒鐘
}
程式碼打完後,把Arduino連接上電腦,按下左上角的上傳,就可以看到效果了。
沒有留言:
張貼留言