前一章我們介紹了"函數"的建立以及呼叫,目的是為了提升程式碼的可讀性以及版面的簡潔,這章我們則介紹 "變量命名" 來幫助我們進一步提升可讀性及變動性。
程式碼的部分沿用上一章,但在第一行多加了一行 int LED1 = 13; 我們將這行程式碼分為三個部份來解釋
1. int
int 代表資料為整數變量型態,這是最常使用的資料型態之一,僅可以儲存整數值(也就是1,2,3,4這種)。
int 在 Arduino 內長度定義為 16 bits(若在 32bits 的處理器中, int 大多是定義為 32bits) ,16 bits 代表資料數值範圍為 -32768 到 +32767,超過此範圍的數值就不能使用 int 型態來進行儲存或表示。(此部分牽扯到計算機概論,16bits 代表由 16 位數的二進制所組成,暫不在此做過多的解釋)
而 char 亦為整數變量型態,其為 8bits 的整數變量型態。
而 flaot 為 32bits 的 浮點數變量型態,意指只有定義為 float 的變量可以儲存或表示小數點。
2. LED1
變量的名稱,可自行隨意命名。但如同函數的命名一樣不得與關鍵字強碰,以及不可以數字為開頭。
3. = 13;
= 代表賦值 意指將等號後方的值,賦值至前方的變量中。
這麼多似乎有點饒口,我們將整條程式碼再次寫出後一次念完。
int LED1 = 13;
口訣: 指定一個名為 LED1 的整數變量,並將 13 賦值給它。
或更白話的說,指定一個名為 LED1 的整數變量,並將 13變成它。
最最白話: 整數 LED1 變成 13
這樣的寫法有什麼優點呢? 以上圖舉例來說原本 LED1 的地方都是填入 13 也就是下方的程式碼這樣
假設我們要將 LED 在電路中的連接要更改至第 12 腳呢? 如果以原本的寫法就必須寫為
那如果用這章教的變量命名方法呢? 我們就可以很快速的將 LED 腳位做變動,如下
那如果我們要一次對三顆 LED 燈進行亮滅呢? 首先假設三顆 LED 燈分別接在電路上的 13、12及11腳,不用變量命名的方式則會寫成
用了這樣的方法後我們會發現,程式的可讀性會下降。例如過了一個禮拜後我們在打開這個程式,只看到了 11 、 12 及 13 腳位被設置成輸出模式,並且數位輸出 HIGH/LOW 高低電位交替。但我們並不知道 11 、 12 及 13 連接著什麼東西。倘若用變量命名的方式如
如此一來就算過了一段時間再回頭過來看這段程式碼,也曉得 11、12 及 13 腳位代表什麼意思,以及電路上是接了什麼東西。
PS:
除了用 int LED1 = 13; 來進行變量命名外,常見的還有使用 #define 的方式來進行。如
#define LED1 13
三個値之間以空格隔開,並不需要等號以及分號
這樣的寫法有什麼優點呢? 以上圖舉例來說原本 LED1 的地方都是填入 13 也就是下方的程式碼這樣
void setup(){
pinMode(13,OUTPUT);
}
void loop(){
LED_ON();
digitalWrite(13,LOW);
delay(200);
}
void LED_ON(){
digitalWrite(13,HIGH);
delay(200);
}
假設我們要將 LED 在電路中的連接要更改至第 12 腳呢? 如果以原本的寫法就必須寫為
void setup(){
pinMode(12,OUTPUT);
}
void loop(){
LED_ON();
digitalWrite(12,LOW);
delay(200);
}
void LED_ON(){
digitalWrite(12,HIGH);
delay(200);
}
那如果用這章教的變量命名方法呢? 我們就可以很快速的將 LED 腳位做變動,如下
int LED1 = 12;
void setup(){
pinMode(LED1,OUTPUT);
}
void loop(){
LED_ON();
digitalWrite(LED1,LOW);
delay(200);
}
void LED_ON(){
digitalWrite(LED1,HIGH);
delay(200);
}
那如果我們要一次對三顆 LED 燈進行亮滅呢? 首先假設三顆 LED 燈分別接在電路上的 13、12及11腳,不用變量命名的方式則會寫成
void setup(){
pinMode(11,OUTPUT);
pinMode(12,OUTPUT);
pinMode(13,OUTPUT);
}
void loop(){
LED_ON();
digitalWrite(11,LOW);
digitalWrite(12,LOW);
digitalWrite(13,LOW);
delay(200);
}
void LED_ON(){
digitalWrite(11,HIGH);
digitalWrite(12,HIGH);
digitalWrite(13,HIGH);
delay(200);
}
用了這樣的方法後我們會發現,程式的可讀性會下降。例如過了一個禮拜後我們在打開這個程式,只看到了 11 、 12 及 13 腳位被設置成輸出模式,並且數位輸出 HIGH/LOW 高低電位交替。但我們並不知道 11 、 12 及 13 連接著什麼東西。倘若用變量命名的方式如
int LED1 = 13;
int LED2 = 12;
int LED2 = 11;
void setup(){
pinMode(LED1,OUTPUT);
pinMode(LED2,OUTPUT);
pinMode(LED3,OUTPUT);
}
void loop(){
led_on();
digitalWrite(LED1,LOW);
digitalWrite(LED2,LOW);
digitalWrite(LED3,LOW);
delay(200);
}
void led_on(){
digitalWrite(LED1,HIGH);
digitalWrite(LED2,HIGH);
digitalWrite(LED3,HIGH);
delay(200);
}
如此一來就算過了一段時間再回頭過來看這段程式碼,也曉得 11、12 及 13 腳位代表什麼意思,以及電路上是接了什麼東西。
PS:
除了用 int LED1 = 13; 來進行變量命名外,常見的還有使用 #define 的方式來進行。如
#define LED1 13
三個値之間以空格隔開,並不需要等號以及分號