arduino语法.docx

上传人:b****4 文档编号:5369670 上传时间:2023-05-08 格式:DOCX 页数:29 大小:207.95KB
下载 相关 举报
arduino语法.docx_第1页
第1页 / 共29页
arduino语法.docx_第2页
第2页 / 共29页
arduino语法.docx_第3页
第3页 / 共29页
arduino语法.docx_第4页
第4页 / 共29页
arduino语法.docx_第5页
第5页 / 共29页
arduino语法.docx_第6页
第6页 / 共29页
arduino语法.docx_第7页
第7页 / 共29页
arduino语法.docx_第8页
第8页 / 共29页
arduino语法.docx_第9页
第9页 / 共29页
arduino语法.docx_第10页
第10页 / 共29页
arduino语法.docx_第11页
第11页 / 共29页
arduino语法.docx_第12页
第12页 / 共29页
arduino语法.docx_第13页
第13页 / 共29页
arduino语法.docx_第14页
第14页 / 共29页
arduino语法.docx_第15页
第15页 / 共29页
arduino语法.docx_第16页
第16页 / 共29页
arduino语法.docx_第17页
第17页 / 共29页
arduino语法.docx_第18页
第18页 / 共29页
arduino语法.docx_第19页
第19页 / 共29页
arduino语法.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

arduino语法.docx

《arduino语法.docx》由会员分享,可在线阅读,更多相关《arduino语法.docx(29页珍藏版)》请在冰点文库上搜索。

arduino语法.docx

arduino语法

2.4Arduino语法——变量和常量

加载第一个程序后,要想写出一个完整的程序,需要了解和掌握Arduino语言,本节将对Arduino语言做一个初步讲解,首先介绍变量和常量。

2.4.1变量

变量来源于数学,是计算机语言中能储存计算结果或者能表示某些值的一种抽象概念。

通俗来说可以认为是给一个值命名。

当定义一个变量时,必须指定变量的类型。

如果要变量全是整数,这种变量称为整型(int),那么如果要定义一个名为LED的变量值为11,变量应该这样声明:

intled11;

一般变量的声明方法为类型名+变量名+变量初始化值。

变量名的写法约定为首字母小写,如果是单词组合则中间每个单词的首字母都应该大写,例如ledPin、ledCount等,一般把这种拼写方式称为小鹿拼写法(pumpycase)或者骆驼拼写法(camelcase)。

变量的作用范围又称为作用域,变量的作用范围与该变量在哪儿声明有关,大致分为如下两种。

(1)全局变量:

若在程序开头的声明区或是在没有大括号限制的声明区,所声明的变量作用域为整个程序。

即整个程序都可以使用这个变量代表的值或范围,不局限于某个括号范围内。

(2)局部变量:

若在大括号内的声明区所声明的变量,其作用域将局限于大括号内。

若在主程序与各函数中都声明了相同名称的变量,当离开主程序或函数时,该局部变量将自动消失。

使用变量还有一个好处,就是可以避免使用魔数。

在一些程序代码中,代码中出现但没有解释的数字常量或字符串称为魔数(magicnumber)或魔字符串(magicstring)。

魔数的出现使得程序的可阅读性降低了很多,而且难以进行维护。

如果在某个程序中使用了魔数,那么在几个月(或几年)后将很可能不知道它的含义是什么。

为了避免魔数的出现,通常会使用多个单词组成的变量来解释该变量代表的值,而不是随意给变量取名。

同时,理论上一个常数的出现应该对其做必要地注释,以方便阅读和维护。

在修改程序时,只需修改变量的值,而不是在程序中反复查找令人头痛的“魔数”。

【示例1】带变量的闪灯程序

在接下来的程序2-4里会用到ledPin这个变量,通过它来做一个带变量的闪灯程序。

程序2-4:

带变量的闪灯程序

intledPin=13;

intdelayTime=1000;

voidsetup()

{

pinMode(ledPin,OUTPUT);

}

voidloop()

{

digitalWrite(ledPin,HIGH);

delay(delayTime);//延时1s

digitalWrite(ledPin,LOW);

delay(delayTime);//延时1s

}

这里还使用了一个名为延时的delayTime变量,在延时(delay)函数中使用的参数单位为毫秒,用到delay函数中,即延时1000毫秒。

【示例2】改变闪烁频率的闪灯程序

如果希望小灯闪烁快些,将延时函数值改小就可以了,读者可以尝试将delayTime改成500,可以看到小灯闪烁的频率变大了。

如果在程序的后面再加上1行代码“delayTime=delayTime+100;”可以发现小灯闪烁的频率越来越小,即小灯闪烁的越来越慢了。

当按下“重置”按钮后,小灯闪烁又重新变快了,如下面程序2-5所示。

程序2-5:

改变闪烁频率的闪灯程序

intledPin=13;

intdelayTime=1000;

voidsetup()

{

pinMode(ledPin,OUTPUT);

}

voidloop()

{

digitalWrite(ledPin,HIGH);

delay(delayTime);//延时

digitalWrite(ledPin,LOW);

delay(delayTime);

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真

或运算

A假

A真

B假

B真

非运算

A假

A真

如表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)

参数:

x:

任何类型的值

返回值:

字节

(3)int()

功能:

将一个值转换为整型数值。

语法:

int(x)

参数:

x:

任何类型的值

返回值:

整型的值

(4)long()

功能:

将一个值转换为长整型数值。

语法:

long(x)

参数:

x:

任何类型的值

返回值:

长整型的值

(5)float()

功能:

将一个值转换换浮点型数值。

语法:

float(x)

参数:

x:

任何类型的值

返回值:

浮点型的值

(6)word()

功能:

把一个值转换为word数据类型的值,或由两个字节创建一个字符。

语法:

word(x)或word(H,L)

参数:

x:

任何类型的值,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<

>>=(右移等于)将某个变量的值按位进行右移,例如:

K>>=n,将K变量的值右移n位,与K=K>>n相同。

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

>(大于)判断运算符左边的值是否大于右边的值,例如:

x>y,若x变量的值大于y变量的值,其结果为1,否则为0。

<=(小等于)判断运算符左边的值是否小于等于右边的值,例如:

x<=y,若x变量的值小等于y变量的值,其结果为1,否则为0。

>=(大等于)判断运算符左边的值是否大于等于右边的值,例如:

x>=y,若x变量的值大等于y变量的值,其结果为1,否则为0。

2.7.4逻辑运算符

&&(与运算)对两个表达式的布尔值进行按位与运算,例如:

(x>y)&&(y>z),若x变量的值大于y变量的值,且y变量的值大于z变量的值,则其结果为1,否则为0。

||(或运算)对两个表达式的布尔值进行按位或运算,例如:

(x>y)||(y>z),若x变量的值大于y变量的值,或y变量的值大于z变量的值,则其结果为1,否则为0。

(非运算)对某个布尔值进行非运算,例如:

!

(x>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

1>1

<=

小于等于

2<=2

3<=2

(续表)

运算符

含义

例子

结果

>=

大于等于

3>=3

2>=3

==

等于

2==2

1==2

!

=

不等于

1!

=2

2!

=2

【示例4】使用if制作改变闪烁频率的闪灯程序

在介绍变量时,用了一个闪灯的例子进行举例说明,最后加了一行代码来使小灯闪烁的频率越来越小,即小灯越闪越慢。

可是如果希望小灯越闪越快,并且到一定的程度重新恢复初始的闪灯频率,应该怎么办呢?

看下面的程序。

程序2-7:

改变闪烁频率的闪灯程序

intledPin=13;

intdelayTime=1000;

voidsetup()

{

pinMode(ledPin,OUTPUT);

}

voidloop()

{

digitalWrite(ledPin,HIGH);//点亮小灯

delay(delayTime);//延时

digitalWrite(ledPin,LOW);//熄灭小灯

delay(delayTime);

delayTime=delayTime-100;//每次将延时时间减少0.1s

if(delayTime<100)

{

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语句的闪灯程序

intledPin=13;

intdelayTime=1000;

voidsetup()

{

pinMode(ledPin,OUTPUT);

}

voidloop()

{

digitalWrite(ledPin,HIGH);

delay(delayTime);

digitalWrite(ledPin,LOW);

delay(delayTime);

if(delayTime<100)

{

delayTime=1000;//当延时小于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语句是完全可以实现的。

由于loop

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 经管营销 > 经济市场

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2