---
# System prepended metadata

title: Arduino 語法
tags: [Arduino]

---

---
tags: Arduino
---
# Arduino 語法
    與C相似，故在此介紹較為常用I/O語法
## 一、基本結構
### (一)setup()
##### 開始執行程式碼時，會先呼叫 setup( ) 函式，利用它去初始化變數、pin 腳模式、啟動宣告的 libraries 等等…，這個函式通電或重置後只會執行一次。

### (二)loop()
##### 在執行 setup( )函式之後，緊接會執行 loop( ) 函式。它會連續且重複的執行，讓你的程式產生動作及回應。
### (三)範例
```cpp=
int led = 9;     // LED 連接到數位 pin9
void setup()    //設定初始值 及output
{
  pinMode(led, OUTPUT);
}
void loop()    //重複執行
{
 digitalWrite(led, LOW);    //led 設為低電位
 delay(1500); //停留1.5秒
 digitalWrite(led, HIGH);    //led 設為高電位
 delay(1500); //停留1.5秒 
}
```
## 二、數位 I/O 功能
### (一)pinMode()
##### 指定一個 (數位) pin 腳做為輸入或者輸出。
### (二)digitalWrite()
##### 寫 HIGH 或 LOW 到數位 pin 腳中。
### (三)digitalRead()
##### 從指定的數位 pin 腳讀取數值，得到的值只會是 HIGH 或 LOW。
#### (四)範例:同上
```cpp=
```cpp=
int ledPin = 13; // LED 與 pin 13 連接
int inPin = 7;   // 按鈕與 pin 7 連接
int val = 0;     // 用 val 變數來儲存讀取到的數值
 
void setup()
{
  pinMode(ledPin, OUTPUT);      // 將數位 pin 腳 13 設定為輸出
  pinMode(inPin, INPUT);      // 將數位 pin 腳 7 設定為輸入
}
 
void loop()
{
  val = digitalRead(inPin);   // 讀取輸入 pin 腳
  digitalWrite(ledPin, val);    // 將 LED 設定成按鈕的數值
}
```

## 三、類比 I/O 功能
### (一)analogRead()
##### 從指定的 pin 腳讀取類比電壓訊號，此函式會將 0 到 5 伏特的輸入電壓轉換成 0 到 1023 的整數 (或者是 0 到 2047)
### (二)analogWrite() – PWM
##### 對 pin 腳寫入一個類比訊號數值 (pin 腳將輸出 PWM 波型)，可以用在改變 LED 的亮度以及控制馬達的轉速等。
### (三)analogReadResolution()
##### 設定 analogRead() 所回傳的數值大小 (以 bit 為單位)，它預設為 10bits (回傳值範圍在 0 到 1023)。
### (四)analogWriteResolution()
##### analogWriteResolution() 可以設定 analogWrite() 函式的解析度，analogWrite() 的輸入值預設是 0 到 255 (8 bits)。

### (五)範例
```cpp=
int ledPin = 9;      // LED 燈連接到數位 pin 9
int analogPin = 3;   // 可變電阻連接到類比 pin 3
int val = 0;         // 儲存讀取到的電壓數值
 
void setup()
{
  pinMode(ledPin, OUTPUT);   // 設定 pin 9 腳為輸出
}
 
void loop()
{
  val = analogRead(analogPin);   // 讀取類比輸入 pin 腳
  analogWrite(ledPin, val / 4);  // analogRead 數值從 0 到 1023 
                                 // analogWrite 數值從 0 到 255
}
```


## 四、進階 I/O 功能
### (一)tone()
##### 在指定的 pin 腳上產生一個指定頻率的方波 (工作週期是 50% 的 PWM 信號)，可以指定持續時間或者持續直到呼叫 noTone()，在這個指定的 pin 腳上可以接蜂鳴器或者喇叭來發出一段音頻。
### (二)noTone()
##### 停止由 tone() 產生的方波，在沒有任何音頻產生的時候呼叫此函式是沒有作用的。
##### 注意: 如果你想要在多個 pin 腳上撥放不同的音頻，在呼叫下一個 tone() 前你需要先呼叫noTone()。
### (三)shiftOut()
##### 以 byte 為單位將資料送出，一次一個 bit。可以從最高或者最低有效位元開始送出資料；每一個 bit 會被輸出到一個資料 pin 腳上，再經過時脈 pin 腳上的高 / 低電位變化邊緣讓接收端判讀該 bit 是否有效。
### (四)shiftIn()
##### 以 byte 為單位來接收資料，一次一個 bit。可以從最高或者最低有效位元開始接收資料；接收每一個 bit 的過程中，時脈 pin 腳會先被拉成高電位，然後從資料 pin 上讀取一個 bit，再將時脈 pin 腳拉成低電位。
### (五)pulseIn()
##### 讀取 pin 腳上的脈衝 (高或低電位) 持續時間；舉個例子，如果輸入值是 HIGH，pulseIn() 會等 pin 腳上的電位變成 HIGH 之後開始計時，等到又變回 LOW 才停止；之後會回傳脈衝的持續時間，單位是微秒。




## 四、時間
### (一)millis()
##### 回傳從開始運行程式到目前所經過的時間，單位是毫秒。
### (二)micros()
##### 回傳從開始運行程式到目前所經過的時間，單位是微秒。
### (三)delay()
##### 將程式暫停一段由參數指定的時間 (單位是毫秒，1000 毫秒 = 1 秒)。
### (四)delayMicroseconds()
##### 將程式暫停一段由參數指定的時間 (單位是微秒)，1000 微秒 = 1 毫秒，1000000 微秒 = 1 秒。

#### (五)範例
```cpp=
int outPin = 8;                 // 數位pin 8
 
void setup()
{
  Serial.begin(9600);
  pinMode(outPin, OUTPUT);      // 將數位 pin 腳設定為輸出
}
 
void loop()
{
  digitalWrite(outPin, HIGH);   // 點亮 LED 燈
  delay(1000);                  // 等待一秒
  delayMicroseconds(50);        // 等待 50 微秒     
  digitalWrite(outPin, LOW);    // 熄滅 LED 燈
  delayMicroseconds(50);        // 等待 50 微秒 
  Serial.print("Time: ");
  time = millis();              // 印出程式執行的(毫秒)時間
  Serial.println(time);         // 等待一秒讓資料不致輸出過多
  Serial.print("Time: ");
  time = micros();              // 印出程式執行的(為秒)時間
  Serial.println(time);
  // 等待一秒讓資料不致輸出過多
  
}
```