Arduino提供了大量的基础函数,包括I/O控制、时间函数、中断函数、数学函数、串口通信函数等,这些基础函数使单片机系统开发不再有复杂的底层代码,使用者可以很方便的对板子上的资源进行控制。

另外,Arduino还提供了许多关于这些基础函数的应用实例,这些例子程序可以在Arduino开发环境的Files-Examples中找到,从而大大降低了初学者的学习难度,缩短了单片机系统开发周期。

数字I/O口的操作

1、pinMode(pin,mode)函数

pinMode函数用于配置引脚为输入或者输出模式,它是一个无返回值的函数,一般放在setup()函数体重,先设置再使用。

pinMode函数由两个参数--pin 和 mode,pin参数表示要配置的引脚代号,以Arduino Uno为例,它的取值范围是0~13,也可以把模拟引脚(A0~A5)作为数字引脚使用,此时编号为14脚到19脚。

mode参数表示设置的模式——INPUT输入模式或者OUTPUT输出模式,其中INPUT用于读取信号,OUTPUT用于输出控制信号。

配置数字引脚3位输出模式的语句如下所示:

pinMode(3,OUTPUT);

2、digitalWrite(pin,value)

digitalWrite函数的作用是设置引脚的输出电压为高电平或低电平,也是一个无返回值的函数,在使用该函数设置引脚之前,需要先用pinMode()函数交引脚设置为OUTPUT模式,因为数字口具有输入或输出两种状态,需要预先定义。

digitalWrite函数有两个参数---pin 和 value, pin 代表引脚,value代表输出的电平——HIGH(高电平)或LOW(低电平)。

配置数字引脚2的输出电平为高:

pinMode(2,OUTPUT);
digitalWrite(2,HIGH);

3、digitaRead(pin)

digitalRead函数的作用是获取引脚的电平情况,该函数返回值为int型———HIGH(高电平)或者LOW(低电平),在使用该函数时需要预先定义管脚INPUTmode。

digitalRead函数只有一个参数——pin,他表示所要获取的电压情况的引脚号,如果引脚没有连接到任何地方,那么将随机返回HIGH或者LOW。

获取4号管脚的电压情况语句:

pinMode(4,INPUT);
digitalRead(4);

模拟I/O接口的操作函数

1、analogReference(type)

analogReference函数的作用是配置模拟输入引脚的基准电压(即输入范围的最大值),它是一个无返回值的函数,只有一个参数type,type的选项有DEFAULT(默认)/INTERANL(内部)/INTERNAL1V1/INTERNAL2V56/EXTERNAL,,具体含义如下:

DEFAULT:默认5V或者3.3V为基准电压。
INTERANL:低电压模式,使用片内基准电压源
INTERNAL1V1:低电压模式,以1.1V为基准电压
INTERNAL2V56:低电压模式,以2.56V为基准电压。
EXTERNAL:扩展接口,以AREF引脚(0~5V)的电压为基准电压。


设置模拟输入引脚的基准电压默认的语句:

analogRefernece(DEFAULT);

2、analogRead(pin)

analogRead函数的作用是从指定的模拟引脚读取模拟量,读取周期为100微妙,即最大读取速度可达每秒10000次,参数pin表示读取的模拟输入引脚编号,返回值为int型(范围在0~1023)。

Arduino Uno主板有6个通道10位AD转换器,即精度为10位,返回值是0~1023,也就是说输入电压为5V的读取精度为5V/1024个单位,约定于每个单位0.049V(4.9mV)。输入范围和进度可以通过analogReference()进行修改。

如输入电压为a,那么获取的模拟量输入3的电压值为:

int potPin = 3;
int value = 0;
void setup()
{
    Serial.begin(9600);
}
void loop()
{
    value = analogRead(potPin) *a*1000/1023;    //输入电压为a
    Serial.println(value);
}

3、analogWrite(pin,value)

analogWrite函数的作用是通过PWM的方式将模拟值输入到引脚,即调用analogWrite函数后,相应的引脚会产生一个指定占空比的稳定方波(频率大约为490Hz),直到下一次调用该函数,可应用在LED亮度调节、电机调速控制等方面。

analogWrite函数是无返回值函数,有两个参数pin和value,参数pin表示输出PWM的引脚,这里只能选择函数支持的引脚,这个函数支持的引脚为3、5、6、9、10和11,参数value表示PWM占空比,因为PWM输出位数为8,所以其范围在0~255,对应占空比为0~100%,带PWM功能的引脚标有波浪线'~'。

从引脚11输出PWM:

int sensor = A0;
int LED = 11;
int value = 0;
 
void setup()
 
{
    Serial.begin(9600);
}
 
void loop()
{
    value = analogRead(sensor);
    Serial.println(value,DEC);  //可以观察读取的模拟量的值
    analogWrite(LED,value/4);   //读取的模拟量是0~1023*分辨率,结果除以4才能到0-255
}

注意:

引脚5和6的PWM功能输出时将产生高于预期的占空比,这是因为millis()和delay()函数共用一个内部定时器,使得内部计时器在处理PWM时候分心,这种情况一般出现在低占空比时。

时间函数

delay(ms)
delay函数是一个延时函数,它是一个无返回值函数,参数是延时的时间长度,单位是ms。

delayMicroseconds(us)
delayMicroseconds函数是一个延时函数,可以产生更短时间的延时,参数是延时的长度,单位为微秒。

中断函数

单片机的中断可以描述为:由于某一随机事件的发生,单片机暂停在原程序的运行,转而执行另一个程序(随机事件),处理完毕之后又自动回到断点处继续执行,其中,中断源、主程序、中断服务程序简述如下:

中断源:引起中断的原因,或能够发生中断请求的来源。
主程序:单片机现在运行的程序。
中断服务程序:处理中断请求的程序。

interrupts()和noInterrupts()
在Arduino中,interrupts函数和noInterrupts函数分别负责打开与关闭中断,这两个函数均为无返回值的函数,无参数。

attachInterrrupt(interrupt,function,mode)
该函数用于设置外部中断,有三个参数,分别表示中断源、中断处理函数和触发模式,它们的具体含义如下:

中断源:可选0、1,对应2或3号数字引脚。
中断处理函数:指定中断的处理函数,是一段程序,当中断发生时执行该子程序部分,其中参数为函数的指针。

触发模式:有四种类型-LOW(低电平触发)、CHANGE(跳变时触发)、RISING(上升沿触发)、FALLING(下降沿触发)。
detachInterrupt(interrupt)用于取消中断。

串口通信函数

1、Serial.begin()
用于设置串口的波特率,波特率是指每秒传输的比特数,除以8就可以得到每秒传输的字节数,一般用9600、19200、57600、115200。

2、Serial.available()
用于判断串口是否接受到数据,该函数返回值为int型,不带参数。

3、Serial.read()
用于将串口数据读入,该函数返回值是int型,不带参数。

4、Serial.print()
用于从串口输出数据,数据可以是变量,也可以是字符串。

5、Serial.printIn()
比Serial.print()多了回车换行功能。

Serial.printIn(x,DEC);//输出并换行