Arduino SDK 常用函数
本文介绍了 Arduino 的常用函数,主要包含:
- 输入输出(I/O)
- 时间相关
- 串口通信
列出了用法并给出了示例。
以下内容中的 int
指代整型变量,但实际上整型变量也有所不同,例如 analogWrite()
函数的原型如下:
void analogWrite(uint8_t pin, int val);
不必深究,只需要把它当成整形变量即可。
必备函数
setup()
Arduino通电或复位后,即会开始执行 setup()
函数中的程序,该函数只会执行一次。
例子:
void setup() {
pinMode(3, OUTPUT);
for (int i = 4; i < 11; i++) {
pinMode(i, OUTPUT);
}
}
loop()
在setup() 函数中的程序执行完后,Arduino会接着会无限循环 loop()
函数。
例子:
void loop() {
digitalWrite(led, HIGH);
delay(1000);
digitalWrite(led, LOW);
delay(1000);
}
main()
函数呢?
你可能会问,为什么这个C++项目没有 main()
函数呢?
实际上,实际上 main()
函数存在于Arduino核心库中,且仍然是程序的入口。
我们翻看一下 Arduino 核心库的 main.cpp 就可以看到:
#include <Arduino.h>
int atexit(void (*)()) { return 0; } //这表示参数为一个指向 无参数无返回值 的函数的指针
void initVariant() __attribute__((weak));
void initVariant() { }
void setupUSB() __attribute__((weak));
void setupUSB() { }
int main(void)
{
init();
initVariant();
#if defined(USBCON)
USBDevice.attach();
#endif
setup();
for (;;) {
loop();
if (serialEventRun) serialEventRun();
}
return 0;
}
由上可见,对于一个 Arduino 项目,必须包含 setup()
和 loop()
,而不能包含 main()
输入输出
pinMode(pin, mode)
在使用引脚前,需要先定义引脚的模式(读或写)
参数
int pin
指定的引脚编号,如: 10
, A0
等。
int mode
共三种模式:
INPUT
输入模式
OUTPUT
输出模式
INPUT_PULLUP
输入上拉模式,也就是启动板载电阻,使该引脚可以直接连接 5V 电压而不需要在之间另加电阻,但不能接负电位,不能接大于 5V 的电压。
示例
pinMode(3, OUTPUT); // 设置 3 号引脚为输出模式
pinMode(4, INPUT); // 设置 4 号引脚为输入模式
pinMode(5, INPUT_PULLUP); // 设置 5 号引脚为输入上拉模式
digitalWrite(pin, value)
设置指定引脚的电位,在此之前要保 证该引脚已经 pinMode
过,且为输出模式。
参数
int pin
指定的引脚编号。
int value
可以为以下两者之一:
HIGH
高电平
LOW
低电平
例子
digitalWrite(3, HIGH); // 设置 3 号引脚为 高电平
digitalWrite(4, LOW); // 设置 4 号引脚为 低电平
digitalRead(pin)
读取指定引脚的电位,在此之前要保证该引脚已经 pinMode
过,且为输入模式
参数
int pin
指定的引脚编号。
返回值
int
指定的引脚的电位,为以下两者之一:
HIGH
高电平
LOW
低电平
例子
// 假设 4 号引脚连接的是 高电平
int state = digitalRead(4);
// state = HIGH; 也就是 stats = 1;
analogWrite(pin, value)
设定指定引脚的电位,在此之前要保证该引脚已经 pinMode
过,且为输出模式
此外,还要保证该引脚支持模拟输出,也就是引脚旁边有一个波浪线。
参数
int pin
指定的引脚编号。
int value
指定电位的值,范围为 0~255
,从 0V 到 5V 成比例对应。
示例
analogWrite(3, 0); // 设置 3 号引脚为 0V
analogWrite(3, 255); // 设置 3 号引脚为 5V
analogWrite(3, 233); // 设置 3 号引脚为 (5 * 233 / 255)V
analogRead()
读取指定引脚的电位,在此之前要保证该引脚已经 pinMode
过,且为输入模式
此外,还要保证该引脚支持模拟输入,在 Arduino Uno 里支持模拟输入的只有: A0
, A1
, A2
,A3
, A4
, A5
六个。
参数
int pin
指定的引脚编号。
返回值
int
指定的引脚的电位,范围: 0~1023
,从 0V 到 5V 成比例对应。
例子
// 假设 4 号引脚连接的是 3V
int state = analogRead(4);
// state = 3 * 1023 / 5;