1、Arduino程序必要的setup)和loop)
void setup)
{}
void loop)
{}
setup)函数中的代码只会被运行一次,通常用来做一些初始化工作;loop)中的代码会被无限次地重复运行,此函数为程序的主体部分。
2、程序中的值
2.1 变量和常量
常量是一个字面量,只可以表示一个特定的量。
2.2 变量类型
2.3 变量的作用域和修饰符
2.3.1 变量的作用域
作用域及作用范围,Arduino语言中的变量是由确定性的作用范围的。变量的作用域是被限制在语句块中的。在变量作用域之外的位置无法访问到该变量。
2.3.2 变量的修饰符
在Arduino语言中,有static、volatile和const三个变量修饰符。static和const 的作用是修改变量的存储位置以适应不同的需求。
2.4 获取变量大小的工具—sizeof)
通过sizeof)获取指定变量的大小。
2.5 变量类型转换
Arduino语言提供了一些函数可以将指定的值转换为特定的类型
3、运算符
3.1 数学运算符
3.2 比较运算符
3.3 布尔运算符
布尔运算符用来对两个布尔表达式进行运算,运算的结果仍然为布尔值。
3.4 指针运算符
指针运算符包括&引用)和*间接引用)。& 运算符用来引用变量或者函数的地址,* 则是通过地址间接地引用指定地址中的内容。
3.5 位运算符
3.6 复合运算符
复合操作运算符是部分数学运算符、位运算符与赋值运算的一种简写形式。
4、语法进阶
4.1 预定义命令#define和 #include
预处理的语句是在编译器的预处理步骤进行处理。
预处理命令#define 用来定义一个常量,它的语法形式如下:#define constantName value
4.2 语句和语句块
4.2.1 语句:Arduino 将分号;)视为一条语句的结束符号。
4.2.2 语句块:
两个花括号之间的语句块,它有两个作用:将多条语句作为一个整体和形成一个作用域。同时,语句块又是一个独立的作用域,因此其中定义的变量a无法在语句块之外使用。
4.3 注释
多行注释:“/* */”
单行注释:“//”
5、控制结构
5.1 条件判断语句if 和if …… else
5.2 跳转语句break、continue、return和goto
break用于跳出switch、while、do……while和for结构。
continue用于在while、do……while和for循环结构中结束当前循环。
return用于立即结束当前程序执行。
goto用于将程序执行流程跳转到指定位置后继续执行。
5.3 分支语句switch case
5.4 循环语句while和do……while
5.4.1 通过while结构就可以使计算机重复地执行一些语句,直到所要求的条件不满足为止,其语法结构如下:
while条件)
语句
后续语句
5.4.2 do …… while结构与while结构的执行过程类似,但do …… while结构会保证其中的“语句”会执行一次:
do{
语句
}while条件)
后续语句
5.5 循环语句for
for结构用来在满足指定条件的情况下循环执行语句,其语法结构如下:
for语句1;语句2;语句3)
语句
后续语句
6、函数
6.1 系统函数
系统函数是Arduino语言默认提供的函数,这些函数可以直接拿来使用而不需要定义。
-
数字I/O口的操作函数
-
pinModepin,mode);
pinMode函数用以配置引脚与输出或输入模式,它是一个无返回值函数。函数有两个参数,pin和mode。pin参数表示要配置的引脚,mode参数表示设置的参数INPUT输入)和OUTPUT输出)。INPUT参数用于读取信号,OUTPUT用于输出控制信号。PIN的范围是数字引脚0-13,也可以把模拟引脚(A0-A5)作为数字引脚使用,此时编号为14脚对应模拟引脚0,19引脚对应模拟引脚5,。一般会放在setup里,先设置再使用。
-
digitalWritepin,value);
该函数的作用是设置引脚的输出电压为高电平或低电平。该函数也是一个无返回值的的函数。Pin参数表示所要设置的引脚,value参数表示输出的电压HIGH(高电平)或LOW(低电平)。
注意:使用前必须先用pinMode设置。
-
digitalReadpin);
该函数在引脚设置为输入的情况下,可以获取引脚的电压情况HIGH(高电平)或者LOW低电平。
-
模拟I/O口的操作函数
-
analogReferencetype);
该函数用于配置模拟引脚的参考电压,有三种类型:default:默认值,参考电压是5v;internal:低电压模式,使用片内基准电压源2,56v;external:扩展模式,通过AREF引脚获取参考电压(注意:不使用本函数的话,默认是参考电压5v。使用AREF接参考电压,需接个5K欧的上拉电阻)
-
analogReadpin);
用于读取引脚的模拟量电压值,每读取一次需要花100US的时间,参数pin表示所要获取模拟量电压值的引脚,返回为int型。精度10位,返回值从0-1023。(注意:函数参数的pin范围是0-5,对应板上的模拟口A0-A5)
-
analogWritepin,value);
该函数是通过PWM的方式在引脚上输入一个模拟量。PWM——Pulse-Width Modulation——脉冲宽度调制。
PWM输出的一般形式:
主要用于LED宽度控制,电机转速控制等方面。Arduino中的PWM的评率大约为490HZ。
UNO板上支持以下数字引脚(不是模拟输入引脚)作为PWM模拟输出:3、5、6、9、10、11板上带PWM输出的都有~号。(注意:PWM输出位数为8位,从0-255)
-
高级I/O
Pulselnpin,state,timeout)
该函数用于读取引脚脉冲的时间长度,脉冲可以是HIGH或者LOW。如果是HIGH,函数将先等引脚变为高电平,然后开始计时,一直到变为低电平。
返回脉冲持续的时间长度,单位为ms,如果超时没有读到的话,返回0。
例程说明:
做一个按钮脉冲计时器,测一下按钮的时间,测测谁的反应快,看谁能按出最短的时间。按钮接第3脚。
-
时间函数
-
delayms);
延时函数,参数是延时的时长,单位是ms(毫秒)
-
delayMicrosecondsus);
延时函数,参数是延时的时长,单位是us微秒)。1ms=1000us。该函数可以产生更短的延时。
-
millis);
应用该函数,可以获取单片机通电到现在运行的时间长度,单位是ms,系统最长的记录时间为9小时22分,超出从0开始。返回值是unsigned long型。该函数适合作为定时器使用,不影响单片机的其他工作。(使用delay函数期间无法做其他工作。)100ms=1s
-
micros);
该函数返回开机到现在运行的微秒数。返回值是unsigned long 70分钟溢出。1000us=1ms
例程原理
连续按按钮,看你的反应有多快?
按钮接D3;从第2按开始,每按一次会减去上一次按的时间,看你连续按的时间间隔有多快?
-
中断函数
中断——由于某一个随机事件的发生,计算机暂停源程序的运行,转去执行另一个程序(随机事件),处理完毕后又自动返回原程序继续运行。
中断源——引起中断的原因,或能发生中断源申请的来源。
主程序——计算机现行运行的程序。
中断服务子程序——处理突发事件的程序。
-
attachInterruptinterrput,function,mode);
该函数用于设置外部中断,函数有3个参数,分别表示中断源,中断处理函数和触发模式。
中断源可选0或者1,对应2或者3号数字引脚。
中断处理函数是一段子程序,当中断发生时执行该子程序部分。
触发模式有四种类型,LOW(低电平触发)、CHANGE变化时触发)、RISING低电平变为高电平出触发)、FALLING高电平变为低电平触发)。
例程原理:
数字D2口接按钮开关,D4口接LED灯1(红色)。D5口接LED2(绿色)。在例程中LED3每秒闪烁一次。使用中断0来控制LED1,中断1来控制LED2。按下按钮,马上响应中断,由于中断响应速度快,LED3不受影响,继续闪烁。比查询的效率要高。尝试4个参数,例程1试验LOW,CHANGE参数,例程2试验RISING和FALLING参数。
-
detachInterruptinterrput);
该函数用于取消中断,参数interrupt表示所要取消的中断源。
-
串口通讯函数
串口概述:
串口接口Serial Interface是指数据一位位地顺序传送,其特点是通信线路简单,只要一对传输线就可以实现双向通信。
串口的数据传输率是115kbps – 230kbps。初期是为了实现连接计算机外设的目的,一般用来连接鼠标和外置Modem以及老式摄像头和写字板等设备。由于串口(COM)不支持热插拔及传输速率较低目前部分新主板和大部分便捷电脑已经开始取消改接口,目前串口多用于工控和测量设备以及部分通信设备中。
串口的应用:
应用举例:各种传感器采集装置,GPS信号采集装置,多个单片机通讯系统,门禁刷卡系统的数据传输,机械手控制、操纵面板控制电机等等。广泛应用于低速数据传输的工程应用。
-
Serial.begin);
该函数用于设置串口的比特率。一般的波特率有9600,19200,57600,115200等。波特率是指每秒传输的比特数。除以8可以得到每秒传输的字节数。示范:Serial.begin57600);
-
Serial.available);
该函数用来判断串口是否收到数据,函数的返回值为int型,不带参数。
-
Serial.read);
将串口数据读入该函数不带参数,返回值为串口数据,int型。
-
Serial.print);
该函数往串口发数据。可以发变量,也可以发字符串。
例句1:Serial.print“today is good”);
例句2:Serial.print“x,DEC”);以10进制发送x;
例句3:Serial.print“x,HEX”);以16进制发送变量x。
-
Serial.println);
该函数与Serial.print)类似,只是多了换行功能。
-
数学库
- minx,y);求两者最小值
- maxx,y);求两者最大值
- absx);求绝对值
- sinrad);求正弦值
- cosrad);求正切值
- tanrad);求正切值
- randomsmall,big);求两者之间的随机数
RANDOMSMALL,BIG);
返回值为long。
举例:
long x;
x=random0,100);可以生成从0到100以内的整数
6.2 调用函数
调用函数就是要使用函数的功能,可以使用如下语法进行调用:funcnamearg1,arg2……);
6.3 自定义函数
定义函数的语法如下:
typeSpecifier functionNameargList){}