arduino的基本函数
数字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)
- shiftOut函数能够将数据通过串行的方式在引脚上输出
- 相当于一般意义上的同步串行通信
- 这是控制器与控制器、控制器与传感器之间的常用的通信方式。
- 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=13;
volatile 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=9;
void 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总线的使用。
更多推荐
所有评论(0)