Arduino 語言支援的變數型態:
布林boolean
布林變數的值只能為真(true)或是假(false)
字元char
單一字元例如 A,和一般的電腦做法一樣Arduino 將字元儲存成一個數字,即使你看到的明明就是一個文字。
用數字表示一個字元時,它的值有效範圍為 -128 到127。
-----------------------------------------------------------------------------------------------------------------
注意:有兩種主流的電腦編碼系統ASCII 和UNICODE。ASCII 表示了127個字元, 用來在序列終端機和分時計算機之間傳輸文字。
UNICODE可表示的字元量比較多,在現代電腦作業系統內它可以用來表示多國語言。
在位元數需求較少的資訊傳輸時,例如義大利文或英文這類由拉丁文,阿拉伯數字和一般常見符號構成的語言,ASCII仍是目前主要用來交換資訊的編碼法。
-----------------------------------------------------------------------------------------------------------------
位元組byte
儲存的數值範圍為0到255。如同字元一樣位元組型態的變數只需要用一個位元組(8位元)的記憶體空間儲存。
整數int
整數資料型態用到2位元組的記憶體空間,可表示的整數範圍為 –32,768 到 32,767; 整數變數是Arduino內最常用到的資料型態。
整數unsigned int
無號整數同樣利用2位元組的記憶體空間,無號意謂著它不能儲存負的數值,因此無號整數可表示的整數範圍為0 到 65,535。
長整數long
長整數利用到的記憶體大小是整數的兩倍,因此它可表示的整數範圍從 –2,147,483,648 到 2,147,483,647。
長整數unsigned long
無號長整數可表示的整數範圍為0 到 4,294,967,295。
浮點數float
浮點數就是用來表達有小數點的數值,每個浮點數會用掉四位元組的RAM,注意晶片記憶體空間的限制,謹慎的使用浮點數。
雙精準度 浮點數double
雙精度浮點數可表達最大值為 1.7976931348623157 x 10308。
字串string
字串用來表達文字信息,它是由多個ASCII字元組成(你可以透過序串埠發送一個文字訊息或者將之顯示在液晶顯示器上)。字串中的每一個字元都用一個組元組空間儲存,並且在字串的最尾端加上一個空字元以提示Ardunio處理器字串的結束。下面兩種宣告方式是相同的。
char string1[] = "Arduino"; // 7 字元 + 1 空字元
char string2[8] = "Arduino"; // 與上行相同
陣列array
一串變數可以透過索引去直接取得。假如你想要儲存不同程度的LED亮度時,你可以宣告六個變數light01,light02,light03,light04,light05,light06,但其實你有更好的選擇,例如宣告一個整數陣列變數如下:
int light[6] = {0, 20, 50, 75, 100};
"array" 這個字為沒有直接用在變數宣告,而是[]和{}宣告陣列。
控制指令
Ardunio 利用一些關鍵字控制程式碼的邏輯。
if … else
If必須緊接著一個問題表示式(expression),若這個表示式為真,緊連著表示式後的代碼就會被執行。若這個表示式為假,則執行緊接著else之後的代碼. 只使用 if不搭配else是被允許的。
範例:
if (val == 1) {
digitalWrite(LED,HIGH);
}
for
用來明定一段區域代碼重覆指行的次數。
範例:
for (int i = 0; i < 10; i++) {
Serial.print("ciao");
}
switch case
if 敘述是程式裡的分叉路口,switch case 是更多選項的路口。Swith case 根據變數值讓程式有更多的選擇,比起一串冗長的if敘述,使用swith case可使程式代碼看起來比較簡潔。
範例 :
switch (sensorValue) {
case 23:
digitalWrite(13,HIGH);
break;
case 46:
digitalWrite(12,HIGH);
break;
default: // 以上條件都不符合時,預設執行的動作
digitalWrite(12,LOW);
digitalWrite(13,LOW);
}
while
當while之後的條件成立時,執行括號內的程式碼。
範例 :
// 當sensor值小於512,閃爍LED燈
sensorValue = analogRead(1);
while (sensorValue < 512) {
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,HIGH);
delay(100);
sensorValue = analogRead(1);
}
do … while
和while 相似,不同的是while前的那段程式碼會先被執行一次,不管特定的條件式為真或為假。因此若有一段程式代碼至少需要被執行一次,就可以使用do…while架構。
範例 :
do {
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,HIGH);
delay(100);
sensorValue = analogRead(1);
} while (sensorValue < 512);
break
Break讓程式碼跳離迴圈,並繼續執行這個迴圈之後的程式碼。此外,在break也用於分隔switch case 不同的敘述。
範例 :
//當sensor值小於512,閃爍LED燈
do {
// 按下按鈕離開迴圈
if (digitalRead(7) == HIGH)
break;
digitalWrite(13,HIGH);
delay(100);
digitalWrite(13,HIGH);
delay(100);
sensorValue = analogRead(1);
} while (sensorValue < 512);
continue
continue 用於迴圈之內,它可以強制跳離接下來的程式,並直接執行下一個迴圈。
範例 :
for (light = 0; light < 255; light++)
{
// 忽略數值介於 140 到 200之間
if ((x > 140) && (x < 200))
continue;
analogWrite(PWMpin, light);
delay(10);
}
return
函數的結尾可以透過return回傳一個數值。
例如,有一個計算現在溫度的函數叫 computeTemperature(),你想要回傳現在的溫度給temperature變數,你可以這樣寫:
int temperature = computeTemperature();
int computeTemperature() {
int temperature = 0;
temperature = (analogRead(0) + 45) / 100;
return temperature;
}
算術運算和方程式
你可以透過特殊的語法用 Arduino 去做一些複雜的計算。 + 和–就是一般學校教的加減法,乘法用*示,而除法用 /表示。
另外餘數除法(%),用於計算整數除法的餘數值。你可以透過多層次的括弧去指定算術之間的循序。和數學函式不一樣,中括號和大括號在此被保留在不同的用途(分別為陣列索引,和宣告區域程式碼)。
範例 :
a = 2 + 2;
light = ((12 * sensorValue) - 5 ) / 2;
remainder = 3 % 2;
比較運算符號
當你在指定if,while, for 敘述句時,可以運用下面這個運算符號:
== 等於
!= 不等於
< 小於
> 大於
<= 小於等於
>= 大於等於
布林運算符號
當你想要結合多個條件式時,可以使用布林運算符號。
例如你想要檢查從感測器傳回的數值是否於5到10,你可以這樣寫:
if ((sensor => 5) && (sensor <=10))
這裡有三個運算符號: 交集(and)用 && 表示; 聯集(or)用 || 表示; 反相(finally not)用 !表示。
復合運算符號
有一般特殊的運算符號可以使程式碼比較簡潔,例如累加運算符號。
例如將一個值加1,你可以這樣寫:
value = value +1;
你也可以用一個復合運算符號累加(++):
value++;
累加和遞減 (++和 --)
當你在累加1或遞減1到一個數值時。請小心i++和++i之間的不同。如果你用的是 i++,i會被累加並且i的值等於i+1;但當你使用++i 時,i的值等於i,直到這行指令被執行完時i再加1。同理應用於––。
+= , –=, *= and /=
這些運算符號可讓表示式更精簡,下面二個表示式是等價的:
a = a + 5;a += 5;
沒有留言:
張貼留言