!文章内容如有错误或排版问题,请提交反馈,非常感谢!
Arduino 特有函数
Arduino 的“特有函数”指的是那些在标准 C/C++ 编程中不常见,但由 Arduino 核心库 (Arduino Core) 提供,专门用于简化微控制器硬件操作的函数。它们让你可以用更直观的方式控制引脚、进行通信、管理时间等,而无需深入了解底层的寄存器操作。
Arduino 特有函数大致可以分为以下几类:
结构与生命周期函数
- setup():
- 作用: 这个函数在 Arduino 板上电或复位时只执行一次。
- 用途: 通常用于初始化设置,例如配置引脚模式(输入/输出)、启动串口通信、初始化库等。
- loop():
- 作用: 这个函数在 setup() 执行完毕后无限循环执行。
- 用途: 你的主要程序逻辑,如读取传感器数据、控制执行器、处理数据等,都放在这里。
数字 I/O (Input/Output)
用于控制数字引脚的输入和输出。
- pinMode(pin, mode):
- 作用: 设置指定引脚的模式。
- 参数: pin (引脚编号), mode (模式,可以是 INPUT、OUTPUT 或 INPUT_PULLUP)。
- 示例: pinMode(13, OUTPUT); (将引脚13设置为输出模式)
- digitalWrite(pin, value):
- 作用: 将数字引脚设置为高电平或低电平。
- 参数: pin (引脚编号), value (值,可以是 HIGH 或 LOW)。
- 示例: digitalWrite(13, HIGH); (将引脚13设置为高电平,LED 点亮)
- digitalRead(pin):
- 作用: 读取数字引脚的状态(高电平或低电平)。
- 参数: pin (引脚编号)。
- 返回值: HIGH 或 LOW。
- 示例: int buttonState = digitalRead(2); (读取引脚2的状态)
模拟 I/O (Input/Output)
用于处理模拟信号。
- analogRead(pin):
- 作用: 从指定的模拟引脚读取模拟值。
- 参数: pin (模拟引脚编号,如 A0-A5)。
- 返回值: 一个 0 到 1023 之间的整数值,对应 0V 到 5V 的电压。
- 示例: int sensorValue = analogRead(A0); (读取模拟引脚A0的值)
- analogWrite(pin, value):
- 作用: 在支持 PWM (脉冲宽度调制) 的数字引脚上输出一个模拟值(模拟电压)。
- 参数: pin (支持 PWM 的数字引脚,如 3, 5, 6, 9, 10, 11), value (值,0 到 255 之间,0 为关闭,255 为完全开启)。
- 示例: analogWrite(9, 128); (在引脚9输出一半亮度)
- analogReference(type):
- 作用: 配置模拟输入的参考电压。
- 参数: type (参考类型,如 DEFAULT (5V), INTERNAL (1.1V), EXTERNAL 等)。
时间函数
用于控制程序的时间流逝。
- delay(ms):
- 作用: 暂停程序执行指定的毫秒数。
- 参数: ms (毫秒数)。
- 示例: delay(1000); (暂停 1 秒)
- delayMicroseconds(us):
- 作用: 暂停程序执行指定的微秒数。
- 参数: us (微秒数)。
- 示例: delayMicroseconds(50); (暂停 50 微秒)
- millis():
- 作用: 返回 Arduino 板启动以来经过的毫秒数。
- 返回值: unsigned long 类型,最大值约 50 天后溢出。
- 用途: 常用于实现非阻塞延时和计时功能。
- 示例: unsigned long currentMillis = millis();
- micros():
- 作用: 返回 Arduino 板启动以来经过的微秒数。
- 返回值: unsigned long 类型,最大值约 70 分钟后溢出。
- 用途: 用于需要更高精度计时的场合。
数学函数
提供一些常用的数学操作,通常与标准 C++ 的 math.h 库有重叠,但这里特指 Arduino 方便使用的。
- min(x, y): 返回两个数中的最小值。
- max(x, y): 返回两个数中的最大值。
- abs(x): 返回数的绝对值。
- constrain(x, a, b): 将一个数限制在指定范围内。
- map(value, fromLow, fromHigh, toLow, toHigh): 将一个值从一个范围映射到另一个范围。
- 示例: int ledBrightness = map(sensorValue, 0, 1023, 0, 255);
- pow(base, exponent): 计算幂。
- sqrt(x): 计算平方根。
字符和字符串函数
用于处理字符和字符串,通常与标准 C/C++ 库有重叠。
- isAlpha(), isDigit(), isAlphaNumeric() 等:用于字符类型判断。
- String 对象相关方法: Arduino 提供了 String 对象来方便地处理字符串,虽然它不是纯粹的 C 字符串,但用起来更像高级语言。例如 .length(), .substring(), .indexOf() 等。
随机数函数
- randomSeed(seed): 为随机数生成器设置种子。
- random(max): 生成一个 0 到 max-1 之间的随机数。
- random(min, max): 生成一个 min 到 max-1 之间的随机数。
中断函数
用于响应外部事件而无需持续轮询。
- attachInterrupt(interrupt, function, mode):
- 作用: 将一个函数绑定到外部中断引脚,当引脚状态改变时执行。
- 参数: interrupt (中断号,通常是 digitalPinToInterrupt(pin) 的返回值), function (中断服务函数), mode (触发模式,如 LOW, CHANGE, RISING, FALLING)。
- 示例: attachInterrupt(digitalPinToInterrupt(2), blinkLED, CHANGE);
- detachInterrupt(interrupt):
- 作用: 解除中断绑定。
串口通信函数 (Serial Communication)
用于 Arduino 与电脑或其他设备进行数据通信。
- begin(speed):
- 作用: 启动串口通信,并设置波特率。
- 参数: speed (波特率,如 9600, 115200 等)。
- 示例:begin(9600);
- print(data) / Serial.println(data):
- 作用: 将数据打印到串口。println 会在数据后添加换行符。
- 参数: data (要打印的数据,可以是各种数据类型)。
- 示例:println(“Hello Arduino!”);
- available():
- 作用: 返回串口缓冲区中可读取的字节数。
- read():
- 作用: 读取串口缓冲区中的下一个字节。
Arduino 特有变量
除了特有的函数,Arduino 也引入了一些特有变量,它们在 Arduino 编程中扮演着重要角色,帮助你更方便地与硬件交互或管理程序状态。这些变量通常是预定义好的,可以直接在你的代码中使用。
HIGH 和 LOW
- 类型: 常量 (实际上是宏定义)
- 作用: 用于表示数字引脚的两种状态。
- HIGH 代表高电平 (通常是 5V 或3V,取决于 Arduino 板的工作电压)。
- LOW 代表低电平 (通常是 0V)。
- 用途: 配合 digitalWrite() 设置引脚输出状态,或作为 digitalRead() 的返回值。
- 示例:
digitalWrite(LED_BUILTIN, HIGH); // 点亮板载LED if (digitalRead(buttonPin) == LOW) { // 检测按钮是否按下 // ... }
INPUT, OUTPUT, 和 INPUT_PULLUP
- 类型: 常量 (实际上是宏定义)
- 作用: 用于设置数字引脚的工作模式。
- INPUT:将引脚设置为输入模式。这意味着 Arduino 会读取该引脚上的电压,例如连接按钮或传感器。
- OUTPUT:将引脚设置为输出模式。这意味着 Arduino 可以通过该引脚提供高电平或低电平,例如控制 LED 或电机。
- INPUT_PULLUP:将引脚设置为输入模式,并同时启用 Arduino 内部的上拉电阻。上拉电阻的作用是在没有外部信号时将引脚拉到高电平。这对于连接按钮等开关特别有用,可以简化外部电路。
- 用途: 配合 pinMode() 函数。
- 示例:
pinMode(buttonPin, INPUT_PULLUP); // 设置按钮引脚为带内部上拉的输入 pinMode(motorPin, OUTPUT); // 设置电机引脚为输出
LED_BUILTIN
- 类型: 常量 (实际上是宏定义)
- 作用: 这是 Arduino 板载 LED 连接的引脚号。在大多数 Arduino Uno 和兼容板上,它通常是数字引脚 D13。
- 用途: 方便地控制板载 LED,而无需记住具体的引脚号,这使得代码更具可移植性,因为不同 Arduino 板的板载 LED 可能连接到不同的引脚。
- 示例:
pinMode(LED_BUILTIN, OUTPUT); digitalWrite(LED_BUILTIN, HIGH); // 点亮板载LED
A0, A1, A2, A3, A4, A5
- 类型: 常量 (实际上是宏定义)
- 作用: 用于表示 Arduino Uno 等板上的模拟输入引脚。这些宏将模拟引脚映射到内部的数字表示,方便在 analogRead() 中使用。
- 用途: 读取模拟传感器的值。
- 注意: 在一些函数中,你也可以直接使用数字来表示模拟引脚,例如 analogRead(0) 等同于 analogRead(A0)。
- 示例:
int sensorValue = analogRead(A0); // 读取A0引脚的模拟值
PI
- 类型: 常量 (浮点数)
- 作用: 圆周率 π 的值,精确到小数点后几位(通常是14159265358979323846)。
- 用途: 在进行数学计算时使用。
- 示例:
float circumference = 2 * PI * radius;
DEC, HEX, OCT, BIN
- 类型: 常量 (实际上是宏定义)
- 作用: 用于指定print() 或 Serial.println() 函数打印数字时的进制。
- DEC:十进制 (Decimal)
- HEX:十六进制 (Hexadecimal)
- OCT:八进制 (Octal)
- BIN:二进制 (Binary)
- 用途: 方便地以不同进制格式输出数据进行调试或显示。
- 示例:
int num = 255; Serial.println(num, DEC); // 输出 255 Serial.println(num, HEX); // 输出 FF Serial.println(num, OCT); // 输出 377 Serial.println(num, BIN); // 输出 11111111
true 和 false
- 类型: 布尔常量
- 作用: 用于表示布尔逻辑值。
- true:逻辑真,通常在内部表示为非零值 (1)。
- false:逻辑假,通常在内部表示为零 (0)。
- 用途: 在条件判断、循环控制和函数返回值中使用。
- 示例:
bool lightOn = true; if (sensorReading > 100) { lightOn = false; }
NULL
- 类型: 空指针常量
- 作用: 表示一个空指针,即不指向任何有效内存地址的指针。
- 用途: 在处理指针时,检查指针是否为空,或将指针初始化为空。
- 示例:
char* myString = NULL; if (myString == NULL) { // ... }
如何知晓 Arduino 有哪些特有函数/变量?
了解和查找 Arduino 特有函数主要有以下几种方法:
- Arduino 官方语言参考 (Arduino Language Reference):
- 最佳资源! 这是最权威、最详细的官方文档。它列出了所有 Arduino 核心库提供的函数,并提供详细的说明、参数、返回值、示例代码以及相关函数链接。
- 访问方式:
- 在线: 前往 https://www.arduino.cc/reference/en/
- 离线 (通过 IDE): 在 Arduino IDE 中,点击 帮助 (Help) > 参考 (Reference)。这会打开你的默认浏览器并跳转到官方在线参考页面。
- 使用建议: 当你看到不认识的函数时,立即查阅这个参考文档。养成这个习惯会大大加速你的学习进程。
- Arduino IDE 的示例代码 (Examples):
- 通过 文件 (File) > 示例 (Examples) 菜单,你可以找到大量的官方示例代码。
- 这些示例不仅展示了如何使用各种硬件,更重要的是,它们展示了如何将各种特有函数组合起来以实现特定功能。通过阅读和理解这些示例代码,你可以自然地学习到很多特有函数的用法。
- 在线教程和社区论坛:
- 许多 Arduino 教程网站(如 Instructables、Adafruit Learn、SparkFun Learn 等)都会详细介绍 Arduino 特有函数的使用方法。
- 在 Arduino 官方论坛或其他技术社区(如 Stack Overflow)中,你可以找到大量关于特定函数使用的问题和解答。
- 智能代码补全 (如果使用 VS Code + Arduino 扩展):
- 如果你使用像 VS Code 这样带有强大 IntelliSense (智能代码补全) 功能的 IDE,当你输入函数名的一部分时,IDE 会自动提示可能的函数,并显示其参数和简要说明。这能帮助你快速发现和了解函数。
这些特有变量极大地简化了 Arduino 编程,让你能够更专注于应用程序的逻辑,而不用去记忆底层的硬件细节或数值表示。
参考链接: