Arduino学习笔记(一):基础

Arduino程序结构

包括两个主要函数:

  1. void setup(){}
    程序运行时会调用一次setup函数,主要用于初始化变量和设置引脚工作模式等。
  2. void loop(){}
    相当于死循环while(1){}。
    当然,可以自定义函数,并在以上两个函数中被调用。注意,setup函数和loop函数是必不可少的。

数据类型

Arduino学习笔记(一):基础byte:一个字节,存储一个8位无符号数。
word:在Uno和其他基于ATMEGA板上,存储一个16位无符号数;而在Due和Zero上,存储一个32位无符号数。
array:并非数据类型,只是表示支持数组。
字符串对象(String):可以像普通变量一样被创建并分配一个值或字符串。赋值运算符不能用于字符数组,但能用于String对象。主要缺点是,会占用大量的内存。

时间函数

  1. delay()函数,以毫秒为单位,阻塞延时。
  2. delayMicroseconds()函数,以微秒为单位,阻塞延时。
  3. millis()函数,以毫秒为单位,返回从Arduino板上电开始计时的时间。
  4. micros()函数,以微秒为单位,返回从Arduino板上电开始计时的时间。

I/O函数

Arduino引脚默认为输入模式,呈现高阻抗状态。可通过pinMode()函数设置引脚为INPUT_PULLUP,使能上拉电阻,则空闲状态下,引脚电平为高电平。上拉电阻能提供足够的电流驱动LED灯变亮。
当设置引脚为输出模式时,将呈现低阻抗状态。

pinMode()函数

函数原型:pinMode(pin, mode)。可将指定引脚设置为输入或输出模式。使用INPUT_PULLUP模式启动内部上拉电阻,而INPUT模式禁止内部上拉。

digitalWrite()函数

函数原型:digitalWrite(pin, value)。可向指定的数字引脚写入HIGH或LOW值。若将某个引脚设置为INPUT模式时,调用digitalWrite()函数可启动(HIGH)或禁止(LOW)该引脚的内部上拉电阻。

digitalRead()函数

函数原型:digitalRead(pin)。可读取指定数字引脚的电平。

analogWrite()函数

函数原型:analogWrite(pin, value)。用于向指定引脚输出一定占空比的PWM波。value:0~255(导通-关断)。在大多数Arduino板上,此功能近支持数字引脚3,5,6,9,10和11,即带有 “~” 的数字引脚。

analogRead()函数

函数原型:analogRead(pin)。可读取指定模拟引脚的电压大小,返回相应的AD值(0~1023),对应于0~5V。

analogReference()函数

函数原型:analogReference(type)。
type可取:

  1. DEFAULT
    默认5或3.3V的模拟参考值
  2. INTERNAL(不适用于Arduino Mega)
    内置参考,在ATmega168或ATmega328上等于1.1V,而在ATmega8上等于2.56V
  3. INTERNAL1V1(适用于Arduino Mega)
    内置参考1.1V
  4. INTERNAL2V56(适用于Arduino Mega)
    内置参考2.56V
  5. EXTERNAL
    参考值为外部施加到AREF引脚的电压大小(限0到5V内的电压)

字符函数

Arduino学习笔记(一):基础

随机数

randomSeed()函数

函数原型:randomSeed(seed)。伪随机数生成器,本质上生成的数是随机分布的,但其顺序是可预测的,即会循环出现。用例:randomSeed(analogRead(5)); //拾取模拟引脚5(未使用)的随机噪音,返回其AD值。

random()函数

函数原型:

  1. long random(max)。返回一个范围为0到max之间的随机数。
  2. long random(min, max)。返回一个范围为min到max之间的随机数。

中断

  1. 硬件中断:大多数Arduino设计有两个硬件中断,其相应引脚为数字引脚2和3。
  2. 软件中断:Arduino支持的是attachInterrupt()函数,其函数原型为:attachInterrupt(digitalPinToInterrupt(pin), ISR, mode);
    或attachInterrupt(pin, ISR, mode),仅支持Arduino Due, Zero板。
    其中,ISR即指定中断处理函数。
    mode的取值:
    1)LOW:低电平触发
    2)CHANGE:跳变沿触发
    3)FALLING:下降沿触发

Arduino通信

UART

  1. 串口初始化设置:Serial.begin(baund)。设置波特率。
  2. 串口发送数据:Serial.print(data)或Serial.println(data) 、Serial.write(data)。
  3. 串口接收数据:Serial.read()。

I2C

使用SDA(数据)和SCL(时钟)引脚。需要使用到Wire库,即程序中需要包含Wire.h头文件。

发送(主机)

  1. 初始化,设置为主机:Wire.begin()。
  2. 启动,指定I2C从设备地址:Wire.beginTransmission(addr)。
  3. 数据缓存:Wire.write(value)。采用队列缓存数据。
  4. 传输数据,然后关闭:Wire.endTransmission()。
  5. 数据请求:Wire.requestFrom(addr, bytes)。向指定地址的从机请求一定字节数的数据。
  6. 数据请求的应答:Wire.onRequest(func)。接收到数据请求时,调用指定的函数进行处理。

接收(从机)

  1. 初始化,设置为从机,并指定地址:Wire.begin(addr)。
  2. 指定接收数据处理函数:Wire.onReceive(func)。
  3. 监测是否有数据:Wire.available()。
  4. 接收I2C总线上的数据:Wire.read()。

SPI

串行外设接口(SPI)总线可用于串行通信,全双工。使用SCK(时钟)、MOSI(主出从入)和MISO(主入从出)。需要用到SPI库,即程序中要包含SPI.h头文件。

  1. 初始化:SPI.begin()。