您好,欢迎访问三七文档
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);//延时1sdigitalWrite(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和truefalse的值为零,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],该索引是无效的,它将会是任意的随机信息(内存地址)出于这个原因,在访问数组时应该注意。如果访问的数据超出数组的末尾—如访问intArra
本文标题:arduino语法
链接地址:https://www.777doc.com/doc-4963038 .html