数字I/O

1.pinMode(pin,mode)
pinMode用以配置引脚为输出或输出模式,它是一个无返回值函数,函数有两个参数pin(表示所要配置的引脚)和Mode(参数表示设置的模式——INPUT或者OUTPUT)。

2.digitalWrite(pin,value)
设置引脚的电压为高电压或低电平。该函数也是一个无返回值的函数,函数有两个参数分别表示:
pin参数:要设置引脚;
value参数:表示输出的电压:HIGH或者LOW。

3.digitalRead(pin)
函数可以获取引脚的电压情况——HIGH或LOW,pin表示所要获取电压值的引脚,该函数返回值为int型。

模拟I/O

1.analogReference(type)
配置模拟引脚的参考电压。在嵌入式应用中引脚获取模拟电压值之后,根据参考电压将模拟值转换到0~1023。该函数无返回值,参数为type类型。

2.analogRead(pin)
用于读取引脚的模拟量电压值,每读一次需要花μs的时间。参数pin表示所要获取模拟量电压值的引脚,该函数返回值为int型,表示引脚模拟量电压值,范围在0~1023。

analogWrite(pin,value)
anlogWrite函数通过PWM的方式在引脚上输出一个模拟量,较多的应用在LED亮度控制、电机转速等方面。
在这里插入图片描述VCC:高电平值
T:PWM波的周期
D:是高电平宽度
D/T:PWM波的占空比,当上述PWM波通过一个低通滤波器后,波形中高频的部分被滤掉得到所需的波形,其平均电压为 V C C × D / T VCC×D/T VCC×D/T

高级I/O

1.shiftOut(dataPin,clockPin,bitOrder,val)

  1. shiftOut函数能够将数据通过串行的方式在引脚上输出
  2. 相当于一般意义上的同步串行通信
  3. 这是控制器与控制器、控制器与传感器之间的常用的通信方式。
  • shiftOut函数无返回值
  • dataPin:数据输出引脚,数据的每位将逐次输出。引脚模式需要设置成输出
  • clockPin:时钟输出引脚,为数据输出提供时钟,引脚模式需要设置成输出。
  • bitOrder:数据位移顺序选择位,该参数为byte类型,有两种类型可选择,分别是高位先入MSBFIRST和低位先入LSBFIRST
  • val:所要输出的数据值

2.pulse(pin,state,timeout)
用于读取引脚脉冲的时间函数;
脉冲为HIGH时:先将等引脚变为高电平,然后开始计时,直到变为低电平为止。返回脉冲持续时间长短,单位ms。如果超时还没有多大平的话,返回0;
返回值为无符号长整型(unsigned long),三个参数分别表示脉冲输入的引脚、脉冲响应的状态(高脉冲或者低脉冲)和超时时间。

时间函数

1.mills()
应用mills函数可获取机器运行的时间长度,单位ms,系统最长记录时间为9小时22分,如果超出时间将从0开始,函数返回值unsigned long型,无参数。
如果用int型保存时间会得到错误结果

2.delay(ms)
延迟函数,单位是ms,无返回值。

3.delayMicroseconds(us)
延迟函数,单位是us。

数学库

min(x,y)
返回x,y中两者较小的。

max(x,y)
返回两者中较大的。

abs(x)
获取x的绝对值。

constrain(amt,low,high)
函数的工作过程是:如果amt小于low,则返回low;如果amt大于high,则返回high;否则,返回amt。
该函数一般可以用于将值归一化到某个区间内

map(x,in_min,in_max,out_min,out_max)
将[in_min,in_max]范围内的x等比映射到[out_min,out_max]范围内。函数返回值为long型,原型为:

sin(rad)、cos(rad)、tan(rad)
三角函数

随机数

randomSeed(seed)
设置随机数种子,随机种子的设置对产生的随机序列有影响。函数无返回值。

random(howsmall,howbig)
函数可以生成一个随机数,两个参数howsmall和howbig决定了随机数的范围,函数的参数及返回值均为long型。

位操作

作用于设置或读取字节中某一位或几位,包括bitRead()、bitSet()、bitClear()等。

中断函数

interrputs()和nolnterrupts
负责打开和关闭中断,函数无返回值,无参数。

attachIntterrupt(interrupt,function,mode)
设置外部中断

  • interrupt:中断源,可选择值0或1,在Arduino中一般对应2号和3号数字脚;
  • function:中断处理函数,用来指定中断的处理函数,参数为函数的指针
  • mode:触发模式有4种:LOW(低电平触发)、CHANGE(变化时触发)、RISING(低电平变为高电平触发)、FALLING(高电平变为低电平触发)。

举例:通过外部引脚触发中断函数,然后控制13号引脚的LED的闪烁。

int pin=13volatile int state=LOW;
void setup()
{
	pinMode(pin,OUTPUT);
	attachInterrupt(0,blink,CHANGE);
	//Z中断源:1
	//中断处理函数:blink()
	//触发模式:CHANGE(变化时触发)
}
void loop()
{
	digitalWrite(pin,state);
}
//中断处理函数
void blink()
{
	state=!state;
}

在使用attachInterrupt函数时要注意以下几点:

  • 在中断函数中delay函数不能使用
  • 使用mills函数始终返回进入中断前的值
  • 读取串口数据的话,可能会丢失
  • 中断函数中使用的变量需要定义为volatile型

串口通信

arduino中串口通信是通过HardwareSerial类来实现的,在头文件HardwareSerial类的对象Serial,直接使用类的成员函数就可以简单地实现串口通信。

串口调光器的程序为例子:

const int ledPin=9void setup()
{
    //设置串口波特率
    Serial.begin(9600);
    //设置LED控制引脚
    pinMode(ledPin,OUTPUT);
}

void loop()
{
	byte brightness;
	//查询串口是否收到数据
	if(Serial.available())
	//Serial.available()函数返回值为int型
	{
		//获取数据,将串口数据读入到变量bright中
		//返回值是int型的串口数据
		brightness=Serial.read();
		//控制LED亮度
		analogWrite(ledPin,brightness);
	}
}

SPI

SPI:同步串行外设接口总线,它可以使MCU与各种外围设备以串行方式进行通信以及交换信息。
总线采用3根或4根数据线进行数据传输,常用的是4根线,即两条控制线(芯片选择CS和时钟SCLK)以及两条数据信号SDI和SDO。

  • 数据信号线SDI称为MISO(主入从出)
  • 数据下划线SDO称为MOSI(主出从入)
  • 控制信号线CS称为SS(从属选择)
  • 将SCLK称为SCK(串行时钟)

在SPI通信中,数据是同步进行发送和接收的。数据传输的时钟基于来自主处理器产生的时钟脉冲。

SPI接口数据传输
SPI是以主从方式工作的,其允许一个主设备和多个设备进行通信,主折半通过不同的SS信号选择不同的从设备进行通信。

在这里插入图片描述当主设备选中某一个设备后,MISO和MOSI用于串行数据的接收和发送,SCK提供串行通信时钟,上升沿发送,下降沿接收。

在实际应用中,未选中的从设备的MOSI信号线需要处于高阻状态,否则会影响主设备与选中的设备间的正常通信。

SPI类及其成员函数
Arduino中的SPI通信是通过SPIClass类来实现的,使用SPIclass类能够方便地将Arduino作为主设备与其他设备进行通信。SPIClass类提供了6个成员函数使用者调用:

  • begin()用于初始化SPI总线
  • setBitOrder()的作用是设置串行数据传输时是先传低位还是先传高位,函数有一个type类型的参数bitOrder,有LSBFIRST(最低位在前)和MSBFIRST(最高位在前)两种类型可选。
  • setClockDivider()函数的作用是设置SPI串行通信的时钟,通信时钟是由系统时钟分频而得到。
  • setDataMode函数的作用是设置SPI数据模式
    在这里插入图片描述
  • setDataMode()的type类型的参数mode有4种类型可选。
  • transfer()函数用来传输一个数据,由于SPI是一种全双工、同步的通信总线,索爷传输一个数据实际上会发送一个数据,实际上接收一个数据。函数的参数为发送的数据值,返回的参数为接收的数据值。
  • end()函数停止SPI总线的使用。
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐