8.2.2 arduino 基本语法概述
Arduino 的语言系统在设计时参考了C、C++、Java,是一种综合性的简洁语言,语法更类似于C++,但是不支持C++的异常处理,没有STL库,你可以把它当作是精简后的C++。
Arduino 基本语法中,注释、宏定义、库文件包含、变量、函数、流程控制、类、继承、多态..... 都与 C++ 高度类似,在此不再赘述,着重要介绍的是,Arduino中的一些API实现。
1.程序结构
一个 Arduino 程序分为两大部分: setup() 与 loop() 函数。
void setup():在这个函数里初始化Arduino的程序,使主循环程序在开始之前设置好相关参数,初始化变量、设置针脚的输出\输入类型、设置波特率...。该函数只会在上电或重启时执行一次。
void loop():这是Arduino的主函数。这套程序会一直重复执行,直到电源被断开。
2.常量
在 Arduino 中封装了一些常用常量,比如:
HIGH | LOW(引脚电压定义)
INPUT|OUTPUT(数字引脚(Digital pins)定义)
true | false(逻辑层定义)
3.通信_Serial
Serial用于Arduino控制板和一台计算机或其他设备之间的通信。您可以使用Arduino IDE内置的串口监视器与Arduino板通信。点击工具栏上的串口监视器按钮,调用begin()函数(选择相同的波特率)。
Serial.begin() 初始化串口波特率
描述:将串行数据传输速率设置为位/秒(波特)。与计算机进行通信时,可以使用这些波特率:300,1200,2400,4800,9600,14400,19200,28800,38400,57600或115200。当然,您也可以指定其他波特率 - 例如,引脚0和1和一个元件进行通信,它需要一个特定的波特率。
语法:Serial.begin(speed)
参数:speed: 位/秒 (波特) - long
返回:无
Serial.print() 从串口打印输出数据
需求:
以人们可读的ASCII文本形式打印数据到串口输出。此命令可以采取多种形式。每个数字的打印输出使用的是ASCII字符。浮点型同样打印输出的是ASCII字符,保留到小数点后两位。Bytes型则打印输出单个字符。字符和字符串原样打印输出。Serial.print()打印输出数据不换行,Serial.println()打印输出数据自动换行处理。
语法:Serial.print(val)
参数
val:打印输出的值 - 任何数据类型
返回:字节 print()将返回写入的字节数,但是否使用(或读出)这个数字是可设定的
Serial.println() 打印输出数据自动换行处理。参考 Serial.print();
Serial.available()
描述:获取从串口读取有效的字节数(字符)。这是已经传输到,并存储在串行接收缓冲区(能够存储64个字节)的数据。 available()继承了 Stream类。
语法:Serial.available()
参数:无
返回:可读取的字节数
Serial.read()
描述:读取传入的串口的数据。read() 继承自 Stream 类。
语法:serial.read()
参数:无
返回:传入的串口数据的第一个字节(或-1,如果没有可用的数据)
4.函数_数字IO
pinMode()
描述:将指定的引脚配置成输出或输入。
语法:pinMode(pin, mode)
参数
pin:要设置模式的引脚
mode:INPUT或OUTPUT
返回:无
digitalWrite()
描述:给一个数字引脚写入HIGH或者LOW。
语法:digitalWrite(pin, value)
参数
pin: 引脚编号(如1,5,10,A0,A3)
value: HIGH or LOW
返回:无
digitalRead()
描述:读取指定引脚的值,HIGH或LOW。
语法:digitalRead(PIN)
参数
pin:你想读取的引脚号(int)
返回:HIGH 或 LOW
注意:如果引脚悬空,digitalRead()会返回HIGH或LOW(随机变化)
5.函数_模拟IO
analogWrite() PWM
描述:从一个引脚输出模拟值(PWM)。可用于让LED以不同的亮度点亮或驱动电机以不同的速度旋转。analogWrite()输出结束后,该引脚将产生一个稳定的特殊占空比方波,直到下次调用analogWrite()(或在同一引脚调用digitalRead()或digitalWrite())。PWM信号的频率大约是490赫兹。
在大多数arduino板(ATmega168或ATmega328),只有引脚3,5,6,9,10和11可以实现该功能。在aduino Mega上,引脚2到13可以实现该功能。老的Arduino板(ATmega8)的只有引脚9、10、11可以使用analogWrite()。在使用analogWrite()前,你不需要调用pinMode()来设置引脚为输出引脚。
语法:analogWrite(pin,value)
参数
pin:用于输入数值的引脚。
value:占空比:0(完全关闭)到255(完全打开)之间。
返回:无
6.函数_时间
delay()
描述:使程序暂定设定的时间(单位毫秒)。(一秒等于1000毫秒)
语法:delay(ms)
参数
ms:暂停的毫秒数(unsigned long)
返回:无
millis()
描述:返回Arduino开发板从运行当前程序开始的毫秒数。这个数字将在约50天后溢出(归零)。
参数:无
返回:返回从运行当前程序开始的毫秒数(无符号长整数)。
7.函数_中断
attachInterrupt()
描述:当发生外部中断时,调用一个指定函数。当中断发生时,该函数会取代正在执行的程序。大多数的Arduino板有两个外部中断:0(数字引脚2)和1(数字引脚3)。
arduino Mege还有其它有四个外部中断:数字2(引脚21),3(引脚20),4(引脚19),5(引脚18)。
语法:attachInterrupt(interrupt, function, mode)
interrupt:中断引脚数
function:中断发生时调用的函数,此函数必须不带参数和不返回任何值。该函数有时被称为中断服务程序。
mode:定义何时发生中断以下四个contstants预定有效值:
LOW 当引脚为低电平时,触发中断
CHANGE 当引脚电平发生改变时,触发中断
RISING 当引脚由低电平变为高电平时,触发中断
FALLING 当引脚由高电平变为低电平时,触发中断.
返回:无
注意事项:当中断函数发生时,delay()和millis()的数值将不会继续变化。当中断发生时,串口收到的数据可能会丢失。你应该声明一个变量来在未发生中断时储存变量。
noInterrupts()(禁止中断)
描述:禁止中断(重新使能中断interrupts())。中断允许在后台运行一些重要任务,默认使能中断。禁止中断时部分函数会无法工作,通信中接收到的信息也可能会丢失。
中断会稍影响计时代码,在某些特定的代码中也会失效。
参数:无
返回:无
interrupts()(中断)
描述:重新启用中断(使用noInterrupts()命令后将被禁用)。中断允许一些重要任务在后台运行,默认状态是启用的。禁用中断后一些函数可能无法工作,并传入信息可能会被忽略。中断会稍微打乱代码的时间,但是在关键部分可以禁用中断。
参数:无
返回:无
Arduino 的API还有很多,但是受于篇幅限制,当前只是简单介绍了和本教程相关的一些API实现。