第3章Arduino编程语言
Arduino编程语言是建立在C/C++语言基础上的,即以C/C++语言为基础,通过把AVR单片机(微控制器)相关的一些寄存器参数设置等进行函数化,以利于开发者更加快速地使用,其主要使用的函数包括: 数字I/O操作函数、模拟I/O操作函数、高级I/O操作函数、时间函数、中断函数、通信函数和数学库等多种函数。
3.1Arduino编程基础
Arduino的程序结构主要包括两部分: void setup()和void loop()。其中,前者是声明变量及接口名称(例如: int val;int ledPin=13;),是在程序开始时使用,初始化变量、引脚模式、调用库函数等(例如: pinMode(ledPin,OUTUPT);)。而void loop(),是在setup()函数之后,voidloop()程序不断地循环执行,是Arduino的主体。
主要使用的关键字有: if、if…else、for、switch、case、while、do…while、break、continue、return、goto。
语法符号: 每条语句以分号“;”结尾,每段程序以花括号“{}”括起来。
数据类型: boolean、char、int、unsigned int、long、unsigned long、float、double、string、array、void。
常量: HIGH或者LOW,表示数字I/O口的电平,HIGH表示高电平(1),LOW表示低电平(0)。INPUT或者OUTPUT,表示数字I/O口的方向,INPUT表示输入(高阻态),OUTPUT表示输出(AVR能提供5V电压,40mA电流)。TRUE或者FALSE,TRUE表示真(1),FALSE表示假(0)。
1. setup()
当程序开始运行时,函数调用一次。用于在循环loop()开始执行之前定义初始环境属性,如引脚模式(INPUT或OUTPUT)、启动串行端口等。在setup()中声明的变量在loop()中是不可访问的。语法规则为void setup() {},举例如下:
void setup()
{
pinMode(8, OUTPUT);
Serial.begin(9600);
}
void loop()
{
Serial.print('.');
delay(1000);
}
2. loop()
连续执行包含在其块内的代码行,直到程序停止。loop()函数与setup()一起使用。每秒执行loop()的次数可以用delay()和delayMicroseconds()函数来控制。
语法规则为loop() {},举例如下:
void setup()
{
pinMode(WLED, OUTPUT); //设置板载LED引脚为输出
}
void loop()
{
digitalWrite(WLED, HIGH); //设置LED为开
delay(1000); //延迟1s
digitalWrite(WLED, LOW); //设置LED为关
delay(1000); //延迟1s
}
3.2数字I/O口的操作函数
数字I/O口的操作函数主要有pinMode()、digitalWrite()、digitalRead(),下面分别介绍各自的用法。
1. pinMode()
pinMode(pin,mode)函数将指定的数字I/O引脚设置为INPUT、OUTPUT或INPUT_PULLUP。可以使用digitalWrite()和digitalRead()方法设置或读取数字I/O引脚的值,它是一个无返回值函数。函数有两个参数: pin和mode。pin参数表示要配置的引脚,mode参数表示设置的参数INPUT(输入)、OUTPUT(输出),也可以使用INPUT_PULLUP模式使能内部上拉电阻。此外,INPUT模式显式禁用内部上拉。
INPUT参数用于读取信号,OUTPUT用于输出控制信号。PIN的范围是数字引脚0~13,也可以把模拟引脚(A0~A5)作为数字引脚使用,此时编号为14脚对应模拟引脚0,19脚对应模拟引脚5。一般会放在setup里,先设置再使用。
在下面的例子中,将数字引脚3定义为pinIN,将数字引脚4定义为pinOUT。通过方法pin将pinIN编程为INPUT,将pinOUT设置为OUTPUT。在循环中,用数字读数读取pinIN的值,如果为高电平(值为1),引脚输出设置为高电平或低电平。
int pinIN = 3;
int pinOUT = 4;
int value = 0;
void setup() {
pinMode(pinIN, INPUT);
pinMode(pinOUT, OUTPUT);
}
void loop() {
value = digitalRead(pinIN);
if (value == HIGH)
{
digitalWrite(pinOUT, HIGH);
} else {
digitalWrite(pinOUT, LOW);
}
}