Arduino概要
Revised on February 25, 2021
 Arduino Uno開發板
 ATmega328P MCU
 資料傳輸介面
 Arduino IDE
 TinkerCAD (Arduino線上模擬系統)
 Arduino Uno資料型別
 Arduino運算子與優先序
 ArduinoIO控制指令
 ⼀款開放原始碼(open source)的單晶片微控制板
 14組數位I/O(其中有6組提供8位元脈波寬度調變輸出,PWM)、6組10
位元ADC類比輸入(也可以做為數位I/O)
 內建UART、SPI、I2C傳輸介面
 可使用C like高階語言或積木式指令開發應用系統
 巨量的週邊模組及開源函式庫,方便快速開發應用系統
 對非資電專業⼈⼠⽽言也容易上⼿,是創客最常使用的平台之⼀
Arduino是什麼?
2
Arduino UNO開發板
數位訊號接腳 (I/O),D0與D1也是UART傳輸
接腳;D10~D13也是SPI;~表示支援PWM輸出
電源指示燈
ICSP接頭
類比訊號輸入接腳
電源輸出接腳
DC 9V插座
φ2.1mm,內正外負
穩壓IC
USB過載保護
(500mA)
Type B
USB接頭
重置按鈕
LED (D13)
串列傳輸LED
ATmega328p
16MHz
I2C SDA(與A4相連)
I2C SCL(與A5相連)
SPI
USB Jack
Power Jack
3
ATmega328P 1/4
Atmel公司
mega族系
程式記憶體容量(32K bytes Flash ROM)
8位元CPU
Pico Power(低功耗)
ATmega328P
4
 Arduino Uno開發板的微處理器
 8位元MCU Plastic Dual Inline Package (PDIP)
 Up to 20 MIPS Throughput at 20MHz
 131 Powerful Instructions
 Most Single Clock Cycle Execution
 On-chip 2-cycle Multiplier
 32 x 8 General Purpose Working Registers
 32KBytes Flash Memory (程式記憶體)
 1KBytes EEPROM (資料記憶體,系統斷電後,資料依然能夠留存)
 2KBytes Internal SRAM (資料記憶體)
 Write/Erase Cycles: 10,000 Flash/100,000 EEPROM
 Data Retention: 20 years at 85°C/100 years at 25°C
 Current sinks and sources are 40mA
ATmega328P 2/4
5
 14組數位I/O接腳D0~D13
 6組8位元解析度PWM輸出(D3, D5, D6, D9, D10, D11)
 6組10位元解析度類比輸入接腳A0~A5
 I2C傳輸:SDA(A4)、SCL(A5)
 UART傳輸:RXD(D0)、TXD(D1)
 SPI傳輸:MOSI(D11)、MISO(D12)、SCK(D13)
 2組8位元Timer/Counters (Timer0, Timer2)
 1組16位元Timer/Counter (Timer1)
 2組外部中斷INT0(D2)、INT1(D3)
ATmega328P 3/4
6
 8位元MCU Plastic Dual Inline Package (PDIP)
ATmega328P 4/4
7
 Universal Asynchronous Receiver/Transmitter(通用異步收發器)
 傳輸速度⼀般不超過20Kbps
 RS-232 (最大傳輸距離15m,只能1對1傳輸)
 RS-485 (抗雜訊,最大傳輸距離1200m,最多接32 devices)
UART
8
 Inter-Integrated Circuit (積體電路匯流排)
 資料線 (SDA, Serial Data Line) A4
 時脈線 (SCL, Serial Clock Line) A5
 傳輸速度可以到1Mbps
 理論上I2C可以連接128個裝置,由Master主導資料傳輸
I2C
9
 Serial Peripheral Interface (序列週邊介面)
 可以接多個裝置,SD記憶卡就是這個介面
 傳輸速度可以到200Mbps,與UART/RS-232⼀樣,屬於全雙⼯,發送
與接收可同時進行
SPI
MAX7219點矩陣模組
10
 https://www.arduino.cc/en/Main/Software
 選單命令Tools> Board> …,指定所連接的Arduino控制板
 選單命令Tools> Port> …,指定Arduino控制板所連接之串列埠
Arduino IDE 1/2
主選單
11
Arduino IDE 2/2
驗證/編譯程式
上傳程式到控制板
控制板及連接埠
編輯區
訊息區
工具列
Arduino IDE版本
程式檔名
開啟序列埠監控視窗
12
 https://www.tinkercad.com/
 支援Arduino Uno板電路設計及程式模擬
TinkerCAD 1/2
專案用來分類管理你的電路設計
新增電路設計
13
TinkerCAD 2/2
檢視零件清單
電子零件區
電路佈線區
自動調整電路大小
拖曳零件到電路佈線區
返回主頁面
刪除零件(或按Delete鍵)
旋轉零件
編輯程式 模擬執行
14
電路名稱(點擊重新命名)
//設置函式,Arduino重置時,會先執行設置函式,且只會執行⼀次
void setup() {
// put your setup code here, to run once:
}
//程式主廻圈,執行完setup()後,會循環執行loop函式
void loop() {
// put your main code here, to run repeatedly:
}
Arduino程式基本架構
15
 資料型別決定資料容器(變數)的資料格式與容量
 數值資料超出有效範圍時會造成Overflow或Underflow
 boolean
 只有true或false二種值 (HIGH或LOW)
Arduino Uno資料型別 1/4
16
負數最小值 正數最大值
0
負數 正數
overflow
underflow
 char
 字元資料,佔1 byte
 使用單引號標記字元,例如'A'
 也可使用ACSII code,例如65
 做為數值資料時,有效值-128~127
 unsigned char
 1 byte,數值0~255
 byte
 8-bit無號數,數值0~255
Arduino Uno資料型別 2/4
17
 int
 16-bit整數,-32,768~32,767
 unsigned int
 16-bit無號數,0~65,535
 word
 16-bit無號數,0~65,535
 short
 16-bit整數,-32,768~32,767
Arduino Uno資料型別 3/4
18
 long
 32-bit整數,-2,147,483,648L~2,147,483,647L
 unsigned long
 32-bit無號數,0~4,294,967,295L
 float
 4 bytes浮點數,最大值3.4028235E+38,最小值-3.4028235E+38
 double
 4 bytes倍精準數,同float
Arduino Uno資料型別 4/4
19
 十進制 (decimal)
 123
 二進制 (binary)
 B1111011
 限用於表示8位元數值 (0 to 255)
 八進制 (octal)
 0173
 十六進制 (hexadecimal)
 0x7B
數值資料表示法 1/2
20
 浮點數
 10.0 10.0
 2.34E5 234000
 67e-12 0.000000000067
數值資料表示法 2/2
21
 算術運算子 (Arithmetic Operators)
Arduino運算子 1/3
 % (modulo)
 * (multiplication)
 + (addition)
 - (subtraction)
 / (division)
 = (assignment operator)
float r=3/2; //r=1.0
float r=3/2.0; //r=1.5
float r=3/(float)2; //r=1.5
 比較運算子 (Comparison Operators)
 != (not equal to)
 < (less than)
 <= (less than or equal to)
 == (equal to)
a==b, a=b
 > (greater than)
 >= (greater than or equal to)
22
 位元運算子 (Bitwise Operators)
Arduino運算子 2/3
 & (bitwise and)
 << (bitshift left)
LSB補0
 >> (bitshift right)
MSB補符號位元
 ^ (bitwise xor)
 | (bitwise or)
 ~ (bitwise not)
 布林運算子 (Boolean Operators)
 ! (logical not)
 && (logical and)
 || (logical or)
23
a b a & b a | b a ^ b ~a ~b a >> 1 a << 1
B0101 B0110 B0100 B0111 B0011 B1010 B1001 B0010 B1010
 遞增運算
 ++ (increment)
x++; 等同x = x+1;
 遞減運算
 -- (decrement)
x--; 等同x = x-1;
Arduino運算子 3/3
24
運算子 優先序
() 1
!、~、++、−− 2
×、/ 3
+、− 4
>>、<< 5
<、<=、>、>= 6
==、!= 7
^、&、| 8
&& 9
|| 10
= 12
Arduino運算子優先序
25
 D0 to D13可動態規劃做為數位輸入或數位輸出控制
 pinMode(接腳編號,INPUT|OUTPUT)
 接腳編號:0~13數字表示D0~D13
 範例
#define RED_LED 12
#define SW 8
void setup() {
pinMode(RED_LED, OUTPUT); //設定D12為輸出
pinMode(SW, INPUT); //設定D8為輸入
}
Arduino Uno數位IO腳位設定
26
 digitalWrite(接腳編號,HIGH|LOW)
 接腳編號:0~13數字表示D0~D13
 範例
#define RED_LED 12
void setup() {
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED, HIGH);
}
Arduino Uno數位輸出控制
27
 變數 = digitalRead(接腳編號);
 接腳編號:0~13數字表示D0~D13
 傳回值:HIGH or LOW
 範例
#define SW 8
bool keystate;
void setup() {
pinMode(SW, INPUT);
keystate = digitalRead(SW);
}
Arduino數位輸入控制
28
 digitalWrite()/digitalRead()指令每次只能控制⼀個IO腳位,暫
存器作業指令則可同時控制⼀組IO埠接腳
 Port D (PD0~PD7)對應到數位I/O接腳D0~D7
 Port B (PB0~PB5)對應到數位I/O接腳D8~D13
 方向暫存器
 0表示輸入,1表示輸出
 PORT D方向暫存器為DDRD,PORT B方向暫存器為DDRB
 DDRB = B00111000
 設定D13 D12 D11為輸出
 設定D10 D9 D8為輸入
暫存器作業指令 1/2
29
 資料暫存器
 PORT D資料暫存器為PORTD,PORT B資料暫存器為PORTB
 0表示LOW,1表示HIGH
 PORTB = B00001000
 D11輸出HIGH
 D8 D9 D10 D12 D13輸出LOW
 輸入暫存器
 PORT D輸入暫存器為PIND,PORT B輸入暫存器為PINB
暫存器作業指令 2/2
30
 ATmeg328微控制器數位接腳內建上接電阻 (Pull-up resistors),
阻值在20K~50K之間,並可以指令啟用
 要啟用上接電阻必須將輸入接腳模式設定為INPUT_PULLUP
 pinMode(接腳編號, INPUT_PULLUP)
 接腳編號:0~13數字表示D0~D13
使用內建上接電阻
pull-up resistor
10KΩ
Input
未啟用上接電阻時
Input
啟用上接電阻時
31
 D3, D5, D6, D9, D10, D11 支援8位元PWM輸出 (頻率為490Hz)
 analogWrite(接腳編號, 0~255)
 接腳編號:3, 5, 6, 9, 10, 11分別表示D3, D5, D6, D9, D10, D11
 範例
#define RED_LED 3
void setup() {
pinMode(RED_LED, OUTPUT);
analogWrite(RED_LED, 128);
}
Arduino類比輸出控制
32
 接腳:A0,A1,A2,A3,A4,A5
 變數 = analogRead(接腳編號);
 接腳編號:A0~A5
 傳回值:10位元ADC,0~1023
 指令執行時間約100 microseconds
 範例
#define VR A0
int value;
void setup() {
pinMode(VR, INPUT);
value = analogRead(VR);
}
Arduino類比輸入控制
33
 http://www.arduino.cc/reference/en/
Arduino語言參考資料
34

Arduino overview