Follower

2017年6月10日 星期六

【Arduino Lesson 0】認識一下Arduino

  Arduino,不負責任發音為「阿督NO」,外國人則發音「阿墜NO」,根據發音可以得知有三個音節,不過這裡不教英文,學發音請自己參閱KK音標。



  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(其中有6Pins可提供PWM輸出)
類比 Input Pins
6
I/O Pin 的直流電流
20mA
3.3V Pin 的直流電流
50mA
Flash 記憶體(快閃記憶體)
32KB(其中0.5KBbootloader使用)
SRAM(靜態隨機存取記憶體)
2KB
EEPROM(電子抹除式可複寫唯獨記憶體)
1KB
Clock speed
16MHz
長度
6.86cm
寬度
5.34cm
重量
25g

硬體構造基本介紹:



  1. 數位輸入/輸出:搭配digitalread()、digitalwrite()analogWrite()指令來使用〈analogWrite()只有PMW Pin有作用〉
  2. 板子上的LED:內建LED,其連接Pin為Digital的接腳13。
  3. 電源指示燈:顯示Arduino是否有通電。
  4. 主控IC:使用Atmel的megaAVR家族的「ATMEGA328P-PU」,是Arduino的核心。
  5. 類比輸入:相對於數位輸入只能提供0跟1,類比輸入提供10位元(最高數值1024)的解析度,在應用某些感測器和元件必須使用類比輸入。
  6. GND和5V Pin:提供外接電路5V和接地。
  7. 外接電源插座:當Arduino無法從USB port供電時,這裡可以提供7~12V的直流電壓。
  8.  TX和RX:負責處理Arduino和電腦之間的通訊〈也可以用軟體模擬TX/RX,詳情請見藍芽章節〉。
  9. USB port:提供Arduino電源、燒錄程式和通訊。
  10. 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()」,其意義在圖片上的英文也說明的很清楚了,翻譯成白話解釋為:
  1. void setup():這一區可以驅動Arduino版上的腳位,各個元件的初始化專用code也放於此。
  2. 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連接上電腦,按下左上角的上傳,就可以看到效果了。


沒有留言:

張貼留言