语法符号:
; (分号)
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)。
变量:
变量用来指定处理器 内存中的一个位置,变量可以用来储存数据,程序人员可以透过脚本代码去不限次数的操作变数的值。