5Arduino编程语言基础Word格式.docx

上传人:b****5 文档编号:19371937 上传时间:2023-01-05 格式:DOCX 页数:15 大小:24.56KB
下载 相关 举报
5Arduino编程语言基础Word格式.docx_第1页
第1页 / 共15页
5Arduino编程语言基础Word格式.docx_第2页
第2页 / 共15页
5Arduino编程语言基础Word格式.docx_第3页
第3页 / 共15页
5Arduino编程语言基础Word格式.docx_第4页
第4页 / 共15页
5Arduino编程语言基础Word格式.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

5Arduino编程语言基础Word格式.docx

《5Arduino编程语言基础Word格式.docx》由会员分享,可在线阅读,更多相关《5Arduino编程语言基础Word格式.docx(15页珍藏版)》请在冰豆网上搜索。

5Arduino编程语言基础Word格式.docx

char类型

字符类型,长度为1个字节,本质为8位整型,表示范围为-128到127,可被赋值为字符或上述范围内的整数。

Charchr_a=‘a’;

Charchr_c=97;

unsignedchar类型

无符号字符类型,长度为1个字节,相当于8位无符号数,表示范围为0到255,可被赋值为字符或上述范围内的整数。

虽然Arduino所采用的单片机芯片RAM容量高于MCS-51单片机,但相比PC仍然是非常有限的,因此,依然要遵照单片机程序设计中对变量的使用“能省则省”的原则,根据变量可能的取值范围合理选择变量类型。

浮点类型

float类型

浮点数是指具有小数点的数字,浮点数通常用于近似模拟值和连续值,因为它们的分辨率高于整数。

Arduino中的浮点数长度为32位(4字节),表示范围为3.4028235E+38到3.4028235E-38。

floatnum=1.352;

double类型

在16位Arduino板上,double与float类型的长度相同,因此表示范围和精度也完全相同。

在32位Arduino板(如Due)上,双精度长度为64位(8字节),精度更高。

doublenum=45.352;

布尔类型

Boolean类型

C语言中是没有布尔类型的,C语言使用0或NULL代表“逻辑假”(false),使用非零值代表“逻辑真”(true)。

Arduino里设置了布尔类型,每个布尔变量占用1字节的内存,取值为true或false。

布尔类型使得逻辑表达式或代码更易读。

booleanval=false;

booleanstate=true;

字节与字类型

byte类型

byte类型等同于unsignedchar类型,长度为1字节,存储一个8位无符号数,表示范围从0到255。

bytem=25;

word类型

与unsignedint类型相同。

在8位Arduino板中为16位(2字节),在16位Arduino板(如Due、Zero)中,长度为32位(4字节)。

wordw=10000;

空类型

void

void关键字仅用于函数声明。

它表示该函数不会向调用它的函数返回任何信息。

数组类型

array

Arduino中数组的定义与使用与C语言完全相同。

intmyInts[6];

intmyPins[]={2,4,8,3,6};

intmySensVals[6]={2,4,-8,3,2};

charmessage[6]="

hello"

;

字符串(字符数组)

string

Arduino对字符串的处理有两种方式:

一是与传统C语言完全相同的字符数组方式,二是String对象方式。

charStr1[15];

charStr2[8]={'

a'

'

r'

d'

u'

i'

n'

o'

};

charStr3[8]={'

\0'

charStr4[]="

arduino"

charStr5[8]="

charStr6[15]="

也可以使用二维数组的形式来实现多行字符串的存储:

char*myStrings[]={"

Thisisstring1"

"

Thisisstring2"

Thisisstring3"

"

Thisisstring4"

Thisisstring5"

"

Thisisstring6"

voidsetup(){

Serial.begin(9600);

voidloop(){

for(inti=0;

i<

6;

i++){

Serial.println(myStrings[i]);

delay(500);

}

常量和变量

变量

Arduino的变量命名规则与C语言完全相同,变量名只能由字母、数字和下划线组成,且只能由字母和下划线开头。

与C语言一样,变量名是大小写敏感的。

与C语言相同,Arduino的变量按照作用范围分为全局变量和局部变量,全局变量在所有函数的外部声明,所有函数都可以访问全局变量的值,局部变量在函数形参及函数体内部声明,仅在声明的函数体内部可以访问。

全局变量在整个程序运行过程中始终存在,而局部变量在函数调用结束后其所占用的空间就会被释放,其值将随之消失。

常量

常量的命名规则同变量。

按照C语言的编程规约,一般常量名用全大写字母,以便于与变量名区分。

Arduino有一些内置的常量定义:

1.HIGH|LOW

通常用于表示某个引脚的高低电平,HIGH表示高电平,LOW表示低电平。

这对常量经常配合数字引脚输入输出函数(digitalWrite()、digitalRead())使用。

2.INPUT|OUTPUT|INPUT_PULLUP

用于表示某个引脚工作在输入或输出模式,INPUT表示输入,OUTPUT表示输出,INPUT_PULLUP表示启用内部上拉电阻的输入。

当某引脚被设定为INPUT后,如果外接到电源的上拉电阻(一般阻值为10K),则按键按下后该引脚的输入值为LOW,按键断开时该引脚的输入值为HIGH,如果接到地的下拉电阻,则相反。

如果没有外接的上拉或下拉电阻,当按键断开时,引脚将处于“浮空”状态,输入究竟是高电平还是低电平是不确定的。

为了避免这种不确定性,可以将该引脚输入模式设定为INPUT_PULLUP,这时将会启用单片机内部的上拉电阻,起到与外接上拉电阻同样的作用。

上述三个常量与pinMode()函数配合使用,综合举例如下:

intledPin=13;

//将LED连接到13号引脚

pinMode(ledPin,OUTPUT);

//将ledPin引脚设置为输出状态

voidloop()

digitalWrite(ledPin,HIGH);

//向ledPin引脚输出高电平

delay(1000);

//延时1000毫秒

digitalWrite(ledPin,LOW);

//向ledPin引脚输出低电平

intinPin=7;

//将一个按键连接到7号引脚

intval=0;

//用于保存按键输入状态的变量

//将ledPin设置为输出状态

pinMode(inPin,INPUT);

//将inPin设置为输入状态

val=digitalRead(inPin);

//将按键的状态读取到val变量

digitalWrite(ledPin,val);

//将val变量的值输出到LED

整型常量

数制

举例

格式

十进制

123

二进制

B11010011

以“B”开头,八个0、1组成

八进制

0123

以“0”开头,数字范围为0-7

十六进制

0x123

以“0x”开头,数字范围为0-9,A-F或a-f

浮点常量

类型

纯小数

.123

纯小数可以省略小数点前的0

普通浮点数

1.234

科学计数法

1.23e4、1.23E-4

E或e均可

运算符

Arduino的运算符类型与用法与C语言完全相同。

算术运算符

=、+、-、*、/、%

比较运算符

==、<

、>

、<

=、>

=、!

=

逻辑运算符

&

、||、!

位运算符

、|、~、^、>

>

<

复合运算符

++、--、+=、-=、*=、/=、%=、&

=、|=

指针运算符

*、&

分支结构

Arduino的分支结构语法与C语言完全相同,包括if、if…else、switchcase三种结构。

单分支if结构:

if(表达式)

//若表达式为真,则执行{}内语句

双分支if…else结构:

else

//若表达式为假,则执行else后面{}内语句

多分支switchcase结构:

switch(变量){

case常量1:

//若变量的值等于常量,则执行

break;

//跳出switch结构,应确保每个case分支最后有break

case常量2:

//语句

default:

//若前面所有常量值均不匹配,则执行default后面语句

循环结构

Arduino的循环结构与C语言完全相同,包括for、while、do…while三种结构。

也允许在循环体中使用break、continue,但为了保持结构化程序设计规则,一般不推荐使用这两条语句。

for循环:

for(初始化部分;

进入循环的条件;

循环变量值的修改){

//一条或多条语句;

while循环:

while(表达式){

//循环体,若表达式值为真,则执行

do…while循环:

do

//循环体

}while(表达式);

while循环的循环体有可能没有被执行的机会(当括号中的表达式为假时),do…while循环的循环体则至少被执行一次。

Arduino编程语言本质上是一种面向过程的语言,与传统C语言类似,函数是构成Arduino程序的基本结构单位,Arduino内置函数涵盖了常用的输入输出、中断处理、数值计算、类型转换、字符处理、延时与定时等功能。

对各种外部传感器及扩展接口的支持,主要通过类库来实现,这使得Arduino语言具备了“基于对象”的特性——仅引入了类、对象、方法(函数)等面向对象的基本特性,因而并非真正“面向对象”的语言。

正是由于丰富的函数和类库的存在,极大地降低了Arduino应用系统的编程难度,诸如串行通信、I2C接口、中断处理、各种外接传感器模块的使用等都可以找到相应的函数或类库,编程者无需了解低层操作细节,只需要调用相应函数或对象的方法即可。

Arduino允许用户开发类库,Arduino社区有大量用户贡献和维护的类库。

函数

基本输入输出函数

Arduino的基本输入输出函数主要用于实现对通用I/O接口的读写操作,可以分为数字输入输出和模拟输入输出两类。

数字输入输出即向引脚读写高低电平。

模拟输入输出的含义是:

模拟输入仅适用于具有模数转换功能的引脚,即Arduino控制板上通常标注的A0、A1等引脚,其本质是模数转换,即将外加在该引脚上的电压值转换为数值存储到相应变量中;

所谓模拟输出,并非真正输出连续变化的电压或电流,而是输出一定频率的PWM信号,主要用于电机调速、舵机转向、LED调光等场景。

数字输入输出函数

与数字信号输入输出相关的函数主要有pinMode()、digitalWrite()与digitalRead()三个,其中pinMode用来设定某个引脚为输入还是输出状态,也可以用来切换某个引脚的输入或输出状态,digitalWrite()与digitalRead()则用来实现输出与输入操作。

模拟输入函数

如前所述,模拟输入的本质是模数转换,8位Arduino控制板(如Uno、NANO等)具有6-8个模数转换引脚(编号为A0、A1等),也叫6-8个模数转换通道,每通道包含一个10位模数转换器,默认参考电压为5V的情况下,可以将加到引脚上的0-5V范围的电压对应转换为0-1023(210-1)范围的整数。

模数转换示例:

运行以下程序,调节可变电阻器,即可在串口监视器看到0-1023范围内变化的数值。

intanalogPin=3;

//可变电阻器中间引脚接Arduino控制板A3引脚

//可变电阻器另外两端分别接+5V和GND

//用于存储转换结果的变量

Serial.begin(9600);

//初始化串口,以便输出转换结果

val=analogRead(analogPin);

//实现模数转换

Serial.println(val);

//从串口输出转换值

模拟输出函数

如前所述,模拟输出的本质是输出PWM信号。

并非所有的数字引脚内部都有能够支持PWM输出的硬件结构,基于ATMega328单片机的Arduino控制板(如Uno、Nano),A3、A5、A6、A9、A10及A11引脚可用于analogWrite函数的输出。

analogWrite函数有两个参数:

第一个参数指定输出的引脚,第二个参数指定PWM信号占空比,取值范围为0-255。

运行下列程序,将会看到LED的亮度随可变电阻的改变而改变。

intledPin=9;

//LED连接到数字引脚D9

//可变电阻器中间引脚连接到模拟引脚A3

//可变电阻器其余两脚分别接+5V和GND

//用于存储模数转换值的变量

//ledPin(D9)设置为输出

//模数转换

analogWrite(ledPin,val/4);

//用模数转换值控制PWM占空比

//由于模数转换结果在0-1023之间,而PWM占空比的取值范围为0-255,因此要val/4

ATmega328

引脚名称

用作数字输入输出时Arduino编程语言中使用的编号

用作模拟输入时Arduino编程语言中使用的编号

Arduino板上标注的名称

PD0

不可用

PD1

1

PD2

2

PD3

3

3~

PD4

4

PD5

5

5~

PD6

6

6~

PD7

7

PB0

8

PB1

9

9~

PB2

10

10~

PB3

11

11~

PB4

12

PB5

13

PC0

14或A0

A0

PC1

15或A1

A1

PC2

16或A2

A2

PC3

17或A3

A3

PC4

18或A4

A4

PC5

19或A5

A5

高级输入输出函数

tone()与noTone()

用于输出一定频率的方波(占空比50%)信号,对Uno及近似型号,其频率范围为31-65535Hz。

语法:

tone(pin,frequency,duration)

pin:

输出引脚号,frequency:

频率,duration:

输出持续时间,单位为毫秒,数据类型为unsignedlong。

其中第三个参数为可选项,如省略,则直到调用noTone(pin)函数,相应的引脚上才停止输出。

注意,由于这两个函数均是利用了ATmega单片机中的一个定时器来实现的,所以同时只能在一个引脚上使用,如果要在多个引脚上输出,只能先停止正在输出的引脚。

例程如下:

voidsetup(){

voidloop(){

//将引脚8上的输出关闭

noTone(8);

//在引脚6上输出频率为440Hz,持续时间200ms的方波

tone(6,440,200);

delay(200);

//将引脚6上的输出关闭

noTone(6);

//在引脚7上输出频率为494Hz,持续时间500ms的方波

tone(7,494,500);

//将引脚7上的输出关闭

noTone(7);

//在引脚8上输出频率为523Hz,持续时间300ms的方波

tone(8,523,300);

delay(300);

shiftOut()与shiftIn()

这两个函数可以实现将一个或多个字节的数据诸位串行输出或输入,通常配合74HC595这类“串入并出”或“并入串出”芯片使用,达到节约单片机IO口线的目的。

shiftOut(dataPin,clockPin,bitOrder,value)

dataPin:

数据引脚,clockPin:

时钟引脚,提供驱动74HC595芯片进行移位动作的时钟脉冲,bitOrder:

移位的顺序,若从最高位开始移位,则可用系统常量MSBFIRST(MostSignificantBitFirst)表示,若从最低位开始移位,则用LSBFIRST(LeastSignificantBitFirst),value待移位输出或输入的数据,长度为1字节。

intdata=500;

//若输出的数据长度为2字节,则先通过移位运算取得其高字节(高8位)

shiftOut(dataPin,clock,MSBFIRST,(data>

8));

//然后再输出其低8位。

注意,不管data是几个字节,shiftOut()仅能输出其低8位

shiftOut(dataPin,clock,MSBFIRST,data);

下面是一个完整的示例,依次在74HC595的Q0-Q7引脚上输出0-255:

//*******************************************************//

//Name:

shiftOutCode//

//Author:

CarlynMaw,TomIgoe//

//Date:

25Oct,2006//

//Version:

1.0//

//Notes:

Codeforusinga74HC595ShiftRegister//

//:

tocountfrom0to255//

//PinconnectedtoST_CPof74HC595

intlatchPin=8;

//PinconnectedtoSH_CPof74HC595

intclockPin=12;

////PinconnectedtoDSof74HC595

intdataPin=11;

//setpinstoout

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

当前位置:首页 > 高中教育 > 高中教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1