
所谓函数是指一段在一起的、可以做某一件事儿的程序。也叫做子程序、(OOP中)方法。一个较大的程序一般应分为若干个程序块,每一个模块用来实现一个特定的功能。arduino使用c语言进行编程。通过操作IO口完成一系列的功能。对C语言不清楚的同学请自行百度。
arduinoIDE中内置了很多的函数可以使用。这些函数是基础中的基础。从本次推送开始,将向大家介绍各类基础函数。
一、数字输入输出
在使用输入或输出功能前,你需要先通过pinMode() 函数配置引脚的模式为输入模式或输出模式。
函数名称:pinMode(pin, mode)
参数pin为指定配置的引脚编号
参数mode为指定的配置模式
通常可用模式有三种:
INPUT 输入模式
OUTPUT 输出模式
INPUT_PULLUP 输入上拉模式
之前我们在点灯程序中使用到了pinMode(13, OUTPUT),即是把13号引脚配置为输出模式。
在下面的按钮控制LED程序中,监测按钮状态时,需要使用pinMode(PIN,INPUT)
在将端口配置成INPUT模式时,端口的电平高低是不确定的,有时为了让端口处于恒定的状态(高电平),可以使用pinMode(PIN,INPUT_PULLUP)
函数名称:digitalWrite(pin, value)
将引脚配置成输出模式后,你还需要使用digitalWrite() 让其输出高电平或者是低电平。
参数pin为指定输出的引脚编号;
参数value为你要指定输出的电平
使用HIGH指定输出高电平,或是使用LOW指定输出低电平。
digitalWrite(led, HIGH); // 点亮LED delay(1000); // 等待一秒钟 digitalWrite(led, LOW); // 通过将引脚电平拉低,关闭LED delay(1000); // 等待一秒钟Arduino中输出的低电平为0V,输出的高电平为当前Arduino的工作电压。
例如Arduino UNO的工作电压为5V,其高电平输出也是5V;Arduino Uno工作电压为3.3V,所以高电平输出也就是3.3V。
函数名称:digitalRead(pin)
读取指定引脚的电平
参数pin为指定读取状态的引脚编号。
返回值为获取到的信号状态,1为高电平,0为低电平。
实例程序:
/*通过2号引脚连接的按键,控制13号引脚连接的LED*/// 设置各引脚别名const int buttonPin = 2; // 连接按键的引脚const int ledPin = 13; // 连接LED的引脚// 变量定义int buttonState = 0; // 建立一个变量,存储按键状态的变量void setup() { // 初始化LED引脚为输出状态 pinMode(ledPin, OUTPUT); // 初始化按键引脚为输入状态 pinMode(buttonPin, INPUT); }void loop(){ // 读取按键状态并存储在变量中 buttonState = digitalRead(buttonPin); // 检查按键是否被按下 // 如果按键按下,那buttonState应该为高电平 if (buttonState == HIGH) { // 点亮LED digitalWrite(ledPin, HIGH); } else { // 熄灭LED digitalWrite(ledPin, LOW); }二、模拟输入输出
函数名称:analogRead(pin)
模拟输入引脚是带有ADC(Analog-to-Digital Converter,模数转换器)功能的引脚。所谓ADC是指将模拟信号如电压值转换为数字信号
它可以将外部输入的模拟信号转换为芯片运算时可以识别的数字信号,从而实现读入模拟值的功能。
模拟输入功能需要使用analogRead() 函数。
参数pin是指定要读取模拟值的引脚,被指定的引脚必须是模拟输入引脚。
如analogRead(A0),即是读取A0引脚上的模拟值。UNO板子,只有A0--A5引脚有此功能。

模拟输入引脚
Arduino Uno模拟输入功能有10位精度,即可以将0~5V的电压信号转换为0~1023的整数形式表示。
/*光敏电阻检测环境光*/void setup(){ // 初始化串口 Serial.begin(9600);}void loop() {// 读出当前光线强度,并输出到串口显示 int sensorValue = analogRead(A0);//定义变量,并将读取的模拟值传给此变量 Serial.println(sensorValue);//通过串口监视器输出数值 delay(1000);}函数名称:analogWrite(pin,value)
使用analogWrite() 函数实现PWM输出功能。PWM叫做脉宽调制,是利用微处理器的数字输出来对模拟电路进行控制的一种非常有效的技术.简单的说,比如你有5V电源,要控制一台灯的亮度,有一个传统办法,就是串联一个可调电阻,改变电阻,灯的亮度就会改变。
还有一个办法,就是PWM调节。不用串联电阻,而是串联一个开关。假设在1秒内,有0.5秒的时间开关是打开的,0.5秒关闭,那么灯就亮0.5秒,灭0.5秒。这样持续下去,灯就会闪烁。如果把频率调高一点,比如是1毫秒,0.5毫秒开,0.5毫秒灭,那么灯的闪烁频率就很高。我们知道,闪烁频率超过一定值,人眼就会感觉不到。所以,这时你看不到灯的闪烁,只看到灯的亮度只有原来的一半。同理,如果1毫秒内,0.1毫秒开,0.9毫秒灭,那么,灯的亮度就只有原来的10分之一。广泛用于调光、调速等方面。
在Arduino Uno中,提供PWM功能的引脚为3、5、6、9、10、11。

带“~”符号的引脚为有pwm功能的引脚
在analogWrite() 和analogRead() 函数内部,已经完成了引脚的初始化,因此不用在Setup() 函数中进行初始化操作。
/*Fading通过analogWrite() 函数实现呼吸灯效果*/int ledPin = 9; // LED连接在9号引脚上void setup() { // Setup部分不进行任何处理} void loop() { // 从暗到亮,以每次加5的形式逐渐亮起来 for(int fadeValue = 0 ; fadeValue <= 255; fadeValue +=5) { // 输出PWM analogWrite(ledPin, fadeValue); // 等待30ms,以便观察到渐变效果 delay(30); } // 从亮到暗,以每次减5的形式逐渐暗下来 for(int fadeValue = 255 ; fadeValue >= 0; fadeValue -=5) { // 输出PWM analogWrite(ledPin, fadeValue); // 等待30ms,以便观察到渐变效果 delay(30); } }三、时间运行函数
函数名称:millis()
能获取Arduino通电后(或复位后)到现在的时间。大概运行50天后,运行时间会溢出,溢出后会从新从0开始计数
返回系统运行时间,单位毫秒
函数名称:micros()
返回系统运行时间,单位微秒。
使用以下程序会将系统运行时间输出到串口,你可以通过串口监视器观察到程序运行时间。
/*获取系统运行时间*/unsigned long time1;unsigned long time2;void setup(){ Serial.begin(9600);}void loop(){ time1 = millis(); time2 = micros(); // 输出系统运行时间 Serial.print(time1); Serial.println("ms"); Serial.print(time2); Serial.println("us"); // 等待1秒开始下一次loop循环 delay(1000);}四、延时函数
在之前的点灯程序中,我们通过使用延时函数,使LED按一定频率闪烁。
Arduino提供了毫秒级和微秒级两种延时函数。
运行延时函数时,会等待指定的时间,再运行此后的程序。
你可以通过参数设定延时时间。
函数名称:delay(ms)
此函数为毫秒级延时。
参数为时长,类型unsigned long
函数名称:delayMicroseconds( us )
此函数为微秒级延时。
参数为时长,类型unsigned int