arduino内建函式一

所谓函式是指一段在一起的、可以做某一件事儿的程式。也叫做子程式、(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 // 输出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