***謙受益、滿招損!***

**2015成功科研:I:問題、II:回饋,III:撰寫、IV:55屆心得**
**2014成功科研:I:問題、II:回饋,III:撰寫、IV:54屆心得**2014國展在宜蘭2014台灣國際科展
**2013成功科研I:問題II:回饋,III:撰寫IV53屆心得**2013國展在新竹
**2012成功科研I:問題、II:想法、III:感想、IV:52屆心得**2012國展在彰化
**2011成功科研I:問題、II:想法、III:心得、IV:51屆心得**

2011年3月9日 星期三

arduino 語言I

Arduino 語言支援的變數型態:
布林boolean
布林變數的值只能為真(true)或是假(false)
字元char
單一字元例如 A,和一般的電腦做法一樣Arduino 將字元儲存成一個數字,即使你看到的明明就是一個文字。
用數字表示一個字元時,它的值有效範圍為 -128 127
-----------------------------------------------------------------------------------------------------------------
注意:有兩種主流的電腦編碼系統ASCII UNICODEASCII 表示了127個字元, 用來在序列終端機和分時計算機之間傳輸文字。
UNICODE可表示的字元量比較多,在現代電腦作業系統內它可以用來表示多國語言。
在位元數需求較少的資訊傳輸時,例如義大利文或英文這類由拉丁文,阿拉伯數字和一般常見符號構成的語言,ASCII仍是目前主要用來交換資訊的編碼法。
-----------------------------------------------------------------------------------------------------------------
位元組byte
儲存的數值範圍為0255。如同字元一樣位元組型態的變數只需要用一個位元組(8位元)的記憶體空間儲存。
整數int
整數資料型態用到2位元組的記憶體空間,可表示的整數範圍為 32,768  32,767; 整數變數是Arduino內最常用到的資料型態。
整數unsigned int
無號整數同樣利用2位元組的記憶體空間,無號意謂著它不能儲存負的數值,因此無號整數可表示的整數範圍為 65,535
長整數long
長整數利用到的記憶體大小是整數的兩倍,因此它可表示的整數範圍從 2,147,483,648  2,147,483,647
長整數unsigned long
無號長整數可表示的整數範圍為 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亮度時,你可以宣告六個變數light01light02light03light04light05light06,但其實你有更好的選擇,例如宣告一個整數陣列變數如下:
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前的那段程式碼會先被執行一次,不管特定的條件式為真或為假。因此若有一段程式代碼至少需要被執行一次,就可以使用dowhile架構。
範例 :
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 敘述句時,可以運用下面這個運算符號:
== 等於
!= 不等於
小於
大於
<= 小於等於
>= 大於等於

布林運算符號

當你想要結合多個條件式時,可以使用布林運算符號。
例如你想要檢查從感測器傳回的數值是否於510,你可以這樣寫:
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;

沒有留言:

張貼留言