語法符號:
; (分號)
C 語言程序是以分號為結尾。這樣的語法讓你可以自由地安排代碼,你可以將兩個指令放置在同一行,只要中間用分號隔開。 (但這樣做可能降低程式的可讀性,不建議。)
範例:
delay(100);
{} (大括號)
大括號用來將程式代碼分成一個又一個的區塊,如以下範例所示,在loop()函數的前、後,必須用大括號括起來。
範例:
void loop()
{
Serial.pritln("cial");
}
程式的註釋就是對代碼的解釋和說明,編寫註釋有助於人們閱讀代碼時瞭解代碼的功能。
Arduino處理器在對程式碼進行編譯時會忽略註釋的部份。
Arduino 語言中的編寫註釋有兩種方式
//單行註釋:這整行的文字會被處理器忽略
/*多行註釋:
在這個範圍內你可以
寫一整首詩
*/
關鍵字:
if...else
必須緊接著一個問題表示式(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也用於分隔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
用於循環之內,它可以強制跳離接下來的程序,並直接執行下一個循環。
範例 :
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;
}
goto
goto語句也稱為無條件轉移語句,其一般格式如下: goto 語句標號;
運算符:
= 賦值
+ 相加
- 相減
* 相乘
/ 相除
% 餘數除法
== 等於
!=不等於
< 小於
> 大於
<= 小於等於
>= 大於等於
&& 交集
|| 聯集
! 反相
++ 累加
-- 遞減
數據類型:
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" 這個字為沒有直接用在變量宣告,而是[]和{}宣告數組。
常量:在Arduino語言中事先定義了一些具特殊用途的保留字。
HIGH | LOW
表示數字IO口的電平,HIGH 表示高電平(1),LOW 表示低電平(0)。 HIGH 和LOW 也用來表示你開啟或是關閉了一個Arduino的腳位(pin)
INPUT | OUTPUT
表示數字IO口的方向,INPUT 表示輸入(高阻態),OUTPUT 表示輸出(AVR能提供5V電壓 40mA電流)。
true | false
true 表示真(1),false表示假(0)。
變量:
變量用來指定處理器 內存中的一個位置,變量可以用來儲存數據,程序人員可以透過腳本代碼去不限次數的操作變數的值。
閱讀更多 奔跑的晶體管 的文章