arduino语法Word格式文档下载.docx
- 文档编号:16896254
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:23
- 大小:207.94KB
arduino语法Word格式文档下载.docx
《arduino语法Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《arduino语法Word格式文档下载.docx(23页珍藏版)》请在冰豆网上搜索。
digitalWrite(ledPin,LOW);
这里还使用了一个名为延时的delayTime变量,在延时(delay)函数中使用的参数单位为毫秒,用到delay函数中,即延时1000毫秒。
【示例2】改变闪烁频率的闪灯程序
如果希望小灯闪烁快些,将延时函数值改小就可以了,读者可以尝试将delayTime改成500,可以看到小灯闪烁的频率变大了。
如果在程序的后面再加上1行代码“delayTime=delayTime+100;
”可以发现小灯闪烁的频率越来越小,即小灯闪烁的越来越慢了。
当按下“重置”按钮后,小灯闪烁又重新变快了,如下面程序2-5所示。
程序2-5:
改变闪烁频率的闪灯程序
//延时
delayTime=delayTime+100;
//每次增加延时时间0.1s
2.4.2常量
常量是指值不可以改变的量,例如定义常量constfloatpi=3.14,当pi=5时就会报错,因为常量是不可以被赋值的。
编程时,常量可以是自定义的,也可以是Arduino核心代码中自带的。
下面就介绍一下Arduino核心代码中自带的一些常用的常量,以及自定义常量时应该注意的问题。
1.逻辑常量(布尔常量):
false和true
false的值为零,true通常情况下被定义为1,但true具有更广泛的定义。
在布尔含义(BooleanSense)里任何非零整数为true。
所以在布尔含义中-1、2和-200都定义为true。
2.数字引脚常量:
INPUT和OUTPUT
首先要记住这两个常量必须是大写的。
当引脚被配置成INPUT时,此引脚就从引脚读取数据;
当引脚被配置成OUTPUT时,此引脚向外部电路输出数据。
在前面程序中经常出现的pinMode(ledPin,OUTPUT),表示从ledPin代表的引脚向外部电路输出数据,使得小灯能够变亮或者熄灭。
3.引脚电压常量:
HIGH和LOW
这两个常量也是必须大写的。
HIGH表示的是高电位,LOW表示的是低电位。
例如:
digitalWrite(pin,HIGH);
就是将pin这个引脚设置成高电位的。
还要注意,当一个引脚通过pinMode被设置为INPUT,并通过digitalRead读取(read)时。
如果当前引脚的电压大于等于3V,微控制器将会返回为HIGH,引脚的电压小于等于2V,微控制器将返回为LOW。
当一个引脚通过pinMode配置为OUTPUT,并通过digitalWrite设置为LOW时,引脚为0V,当digitalWrite设置为HIGH时,引脚的电压应在5V。
4.自定义常量
在Arduino中自定义常量包括宏定义#define和使用关键字const来定义,它们之间有细微的区别。
在定义数组时只能使用const。
一般const相对的#define是首选的定义常量语法。
2.5Arduino语法——数据类型
Arduino与C语言类似,有多种数据类型。
数据类型在数据结构中的定义是一个值的集合,以及定义在这个值集上的一组操作,各种数据类型需要在特定的地方使用。
一般来说,变量的数据类型决定了如何将代表这些值的位存储到计算机的内存中。
在声明变量时需要指定它的数据类型,所有变量都具有数据类型,以便决定存储不同类型的数据。
2.5.1常用的数据类型
常用的数据类型有布尔类型、字符型、字节型、整型、无符号整型、长整型、无符号长整型、浮点型、双精度浮点型等,本小节会依次介绍这些数据类型。
1.布尔类型
布尔值(bollean)是一种逻辑值,其结果只能为真(true)或者假(false)。
布尔值可以用来进行计算,最常用的布尔运算符是与运算(&
&
)、或运算(||)和非运算(!
)。
表2-2是与、或和非运算的真值表。
表2-2真值表
与
与运算
A假
A真
B假
假
B真
真
或
或运算
非
非运算
如表2-2所示的真值表中,对于与运算,仅当A和B均为真时,运算结果为真,否则,运算结果为假;
对于或运算,仅当A和B均为假时,运算结果为假,否则,运算结果为真。
对于非运算,当A为真时,运算结果为假;
当A为假时,运算结果为真。
2.字符型
字符型(char)变量可以用来存放字符,其数值范围是-128~+128。
charA=58;
3.字节型
字节(byte)只能用一个字节(8位)的存储空间,它可以用来存储0~255之间的数字。
byteB=8;
4.整型
整型(int)用两个字节表示一个存储空间,它可以用来存储-32768~+32767之间的数字。
在Arduino中,整型是最常用的变量类型。
intC=13;
5.无符号整型
同整型一样,无符号整型(unsignedint)也用两个字节表示一个存储空间,它可以用来存储0~65536之间的数字,通过范围可以看出,无符号整型不能存储负数。
unsignedintD=65535;
6.长整型
长整型(long)可以用4个字节表示一个存储空间,其大小是int型的2倍。
它可以用来存储-2147483648~2147483648之间的数字。
longE=2147483647;
7.无符号长整型
无符号长整型(unsignedlong)同长整型一样,用4个字节表示一个存储空间,它可以用来存储0~4294967296之间的数字。
unsignedlongF=4294967295;
8.浮点型
浮点数(float)可以用来表示含有小数点的数,例如:
1.24。
当需要用变量表示小数时,浮点数便是所需要的数据类型。
浮点数占有4个字节的内存,其存储空间很大,能够存储带小数的数字。
a=b/3;
当b=9时,显然a=3,为整型。
当b=10时,正确结果应为3.3333,可是由于a是整型,计算出来的结果将会变为3,这与实际结果不符。
但是,如果方程为:
floata=b/3.0。
当b=9时,a=3.0。
当b=10时,a=3.3333,结果正确。
如果在常数后面加上“.0”,编译器会把该常数当做浮点数而不是整数来处理。
9.双精度浮点型
双精度浮点型(double)同float类似,它通常占有8个字节的内存,但是,双精度浮点型数据比浮点型数据的精度高,而且范围广。
但是,双精度浮点型数据和浮点型数据在Arduino中是一样的。
2.5.2数据类型转换
在编写程序过程中需要用到一些有关数据类型转换的函数,这里介绍几个常见的数据类型转换函数。
(1)char()
功能:
将一个变量的类型变为char。
语法:
char(x)
参数:
x:
任何类型的值
返回值:
char型值
(2)byte()
将一个值转换为字节型数值。
byte(x)
字节
(3)int()
将一个值转换为整型数值。
int(x)
整型的值
(4)long()
将一个值转换为长整型数值。
long(x)
长整型的值
(5)float()
将一个值转换换浮点型数值。
float(x)
浮点型的值
(6)word()
把一个值转换为word数据类型的值,或由两个字节创建一个字符。
word(x)或word(H,L)
任何类型的值,H:
高阶字节(左边),L:
低阶字节(右边)
字符
2.5.3自定义数据类型
在Arduino中可以根据自己的需要定义结构类型的数据,其方法和C语言是一致的。
struct名称
成员列表;
};
structStudent
char[20]name;
intnumber;
char[2]sex;
intscore;
2.6Arduino语法——数组
数组是一种可访问的变量的集合。
Arduino的数组是基于C语言的,实现起来虽然有些复杂,但使用却很简单。
2.6.1创建或声明一个数组
数组的声明和创建与变量一致,下面是一些创建数组的例子。
arrayInts[6];
arrayNums[]={2,4,6,8,11};
arrayVals[6]={2,4,-8,3,5};
chararrayString[7]="
Arduino"
;
由例子中可以看出,Arduino数组的创建可以指定初始值,如果没有指定,那么编译器默认为0,同时,数组的大小可以不指定,编译器在监察时会计算元素的个数来指定数组的大小。
在arrayString中,字符个数正好等于数组大小。
在声明时元素的个数不能够超过数组的大小,即小于或等于数组的大小。
2.6.2指定或访问数组
在创建完数组之后,可以指定数组的某个元素的值。
intintArray[3];
intArray[2]=2;
数组是从零开始索引的,也就说,数组初始化之后,数组第一个元素的索引为0,如上例所示,arrayString[0]为“A”即数组的第一个元素是0号索引,并以此类推。
这也意味着,在包含10个元素的数组中,索引9是最后一个元素。
因此,在下个例子中:
intintArray[10]={1,2,3,4,5,6,7,8,9,10};
//intArray[9]的数值为10
//intArray[10],该索引是无效的,它将会是任意的随机信息(内存地址)
出于这个原因,在访问数组时应该注意。
如果访问的数据超出数组的末尾—如访问intArray[10],则将从其他内存中读取数据。
从这些地方读取的数据,除了产生无效的数据外,没有任何作用。
向随机存储器中写入数据绝对是一个坏主意,通常会导致一些意外的结果,如导致系统崩溃或程序故障。
顺便说一句,不同于Basic或Java,C语言编译器不会检查访问的数组是否大于声明的数组。
【示例3】串口打印数组
数组创建之后在使用时,往往在for循环中进行操作,循环计数器可用于访问数组中的每个元素。
例如,将数组中的元素通过串口打印,程序可以这样写。
程序2-6:
串口打印数组
voidsetup()
{//putyoursetupcodehere,torunonce:
intintArray[10]={1,2,3,4,5,6,7,8,9,10};
//定义长度为10的数组
inti;
for(i=0;
i<
10;
i=i+1)//循环遍历数组
Serial.println(intArray[i]);
//打印数组元素
}
voidloop()
{//putyourmaincodehere,torunrepeatedly:
2.7Arduino语法——运算符
本节介绍最常用的一些Arduino运算符,包括赋值运算符、算数运算符、关系运算符、逻辑运算符和递增/减运算符。
2.7.1赋值运算符
=(等于)为指定某个变量的值,例如:
A=x,将x变量的值放入A变量。
+=(加等于)为加入某个变量的值,例如:
B+=x,将B变量的值与x变量的值相加,其和放入B变量,这与B=B+x表达式相同。
-=(减等于)为减去某个变量的值,例如:
C-=x,将C变量的值减去x变量的值,其差放入C变量,与C=C-x表达式相同。
*=(乘等于)为乘入某个变量的值,例如:
D*=x,将D变量的值与x变量的值相乘,其积放入D变量,与D=D*x表达式相同。
/=(除等于)为和某个变量的值做商,例如:
E/=x,将E变量的值除以x变量的值,其商放入E变量,与E=E/x表达式相同。
%=(取余等于)对某个变量的值进行取余数,例如:
F%=x,将F变量的值除以x变量的值,其余数放入F变量,与F=F%x表达式相同。
=(与等于)对某个变量的值按位进行与运算,例如:
G&
=x,将G变量的值与x变量的值做AND运算,其结果放入G变量,与G=G&
x表达式相同。
|=(或等于)对某个变量的值按位进行或运算,例如:
H|=x,将H变量的值与x变量的值相OR运算,其结果放入变量H,与H=H|x相同。
^=(异或等于)对某个变量的值按位进行异或运算,例如:
I^=x,将I变量的值与x变量的值做XOR运算,其结果放入变量I,与I=I^x相同。
<
=(左移等于)将某个变量的值按位进行左移,例如:
J<
=n,将J变量的值左移n位,与J=J<
n相同。
>
=(右移等于)将某个变量的值按位进行右移,例如:
K>
=n,将K变量的值右移n位,与K=K>
2.7.2算数运算符
+(加)对两个值进行求和,例如:
A=x+y,将x与y变量的值相加,其和放入A变量。
-(减)对两个值进行做差,例如:
B=x-y,将x变量的值减去y变量的值,其差放入B变量。
*(乘)对两个值进行乘法运算,例如:
C=x*y,将x与y变量的值相乘,其积放入C变量。
/(除)对两个值进行除法运算,例如:
D=x/y,将x变量的值除以y变量的值,其商放入D变量。
%(取余)对两个值进行取余运算,例如:
E=x%y,将x变量的值除以y变量的值,其余数放入E变量。
2.7.3关系运算符
==(相等)判断两个值是否相等,例如:
x==y,比较x与y变量的值是否相等,相等则其结果为1,不相等则为0。
!
=(不等)判断两个值是否不等,例如:
x!
=y,比较x与y变量的值是否相等,不相等则其结果为1,相等则为0。
(小于)判断运算符左边的值是否小于右边的值,例如:
x<
y,若x变量的值小于y变量的值,其结果为1,否则为0。
(大于)判断运算符左边的值是否大于右边的值,例如:
x>
y,若x变量的值大于y变量的值,其结果为1,否则为0。
=(小等于)判断运算符左边的值是否小于等于右边的值,例如:
=y,若x变量的值小等于y变量的值,其结果为1,否则为0。
=(大等于)判断运算符左边的值是否大于等于右边的值,例如:
=y,若x变量的值大等于y变量的值,其结果为1,否则为0。
2.7.4逻辑运算符
(与运算)对两个表达式的布尔值进行按位与运算,例如:
(x>
y)&
(y>
z),若x变量的值大于y变量的值,且y变量的值大于z变量的值,则其结果为1,否则为0。
||(或运算)对两个表达式的布尔值进行按位或运算,例如:
y)||(y>
z),若x变量的值大于y变量的值,或y变量的值大于z变量的值,则其结果为1,否则为0。
!
(非运算)对某个布尔值进行非运算,例如:
y),若x变量的值大于y变量的值,则其结果为0,否则为1。
2.7.5递增/减运算符
++(加1)将运算符左边的值自增1,例如:
x++,将x变量的值加1,表示在使用x之后,再使x值加1。
--(减1)将运算符左边的值自减1,例如:
x--,将x变量的值减1,表示在使用x之后,再使x值减1。
2.8Arduino语法——条件判断语句
Arduino语言基于C和C++,有过开发经验的都知道,C语言中有一些内建指令,这些内建指令中有很重要的几个语句经常用到,这里介绍常用的条件判断语句if和else。
if语句
在考虑问题和解决问题的过程中,很多事情不是一帆风顺的,需要进行判断再做出不同的行为。
这里就需要用到了条件语句,有些语句并不是一直执行的,需要一定的条件去触发。
同时,针对同一个变量,不同的值进行不同的判断,也需要用到条件语句。
同样,程序如果需要运行一部分,也可以进行条件判断。
if的语法如下:
if(delayTime<
100)
delayTime=1000;
如果if后面的条件满足,就执行{}内的语句。
if中表示判断的语句使用到的关系运算符如表2-3所示。
表2-3关系运算符
运算符
含义
例子
结果
小于
1<
2
2<
1
大于
2>
1>
=
小于等于
=2
3<
(续表)
大于等于
3>
=3
==
等于
2==2
1==2
不等于
1!
2!
【示例4】使用if制作改变闪烁频率的闪灯程序
在介绍变量时,用了一个闪灯的例子进行举例说明,最后加了一行代码来使小灯闪烁的频率越来越小,即小灯越闪越慢。
可是如果希望小灯越闪越快,并且到一定的程度重新恢复初始的闪灯频率,应该怎么办呢?
看下面的程序。
程序2-7:
//点亮小灯
//熄灭小灯
delayTime=delayTime-100;
//每次将延时时间减少0.1s
if(delayTime<
{
delayTime=1000;
//当延时时间小于0.1s时,重新校准延时为1s
在这个程序中用到了if条件判断语句,程序每次运行到if语句时都会进行检查,在delayTime>
=100时,大括号里面的delayTime=1000是不执行的。
程序进入下一次循环。
当delayTime<
100,delayTime=1000被执行,delayTime的值改变成为1000,并进入到下一次循环中。
【示例5】使用if…else制作改变闪烁频率的闪灯程序
if语句另一种形式也很常用,即if…else语句。
这种语句语义为:
在条件成立时执行if语句下括号的内容,不成立时执行else语句下的内容。
对闪灯的程序进行修改,使用else语句,如程序2-8所示。
程序2-8:
使用else语句的闪灯程序
//当延时小于0.1s时校准延时时间为1s
else
delayTime=delayTime-100;
//大于或等于0.1s时将延时时间缩短
if-else语句还可以多次连用来进行多次选择判断。
使用时应判断准确逻辑关系,以避免产生错误。
2.9Arduino语法——循环语句
循环语句用来重复执行某一些语句,为了避免死循环,必须在循环语句中加入条件,满足条件时执行循环,不满足条件时退出循环。
本节介绍for循环和while循环。
2.9.1for循环
在loop()函数中,程序执行完一次之后会返回loop中重新执行,在内建指令中同样有一种循环语句可以进行更准确的循环控制——for语句,for循环语句可以控制循环的次数。
for循环包括3个部分:
for(初始化,条件检测,循环状态){程序语句}
初始化语句是对变量进行条件初始化,条件检测是对变量的值进行条件判断,如果为真则运行for循环语句大括号中的内容,若为假则跳出循环。
循环状态则是在大括号语句执行完之后,执行循环状态语句,之后重新执行条件判断语句。
【示例6】使用计数器和if语句的闪灯程序
同样以闪灯程序为例,这次是让小灯闪烁20次之后停顿3秒。
在没有学习for循环语句之前,用if语句是完全可以实现的。
由于loo
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- arduino 语法