Arduino - 高级 I/O 函数
Arduino - 高级 I/O 功能
Section titled “Arduino - 高级 I/O 功能”在本章中,我们将探索高级输入/输出功能,这些功能让你能够更精细地控制开发板的行为。我们将重点关注 analogReference(),这是一个用于优化模拟输入的强大函数。
The analogReference() 函数
Section titled “The analogReference() 函数”默认情况下,Arduino 的模数转换器 (ADC) 将 0V 到 5V(或某些开发板上的 3.3V)之间的输入电压映射到 0 到 1023 之间的整数值。analogReference() 函数允许你更改此电压范围的上限,这可以显著提高你的测量精度,尤其对于在较低电压下运行的传感器。
AVR 开发板(例如 UNO, Mega)的参考选项
Section titled “AVR 开发板(例如 UNO, Mega)的参考选项”DEFAULT:默认的模拟参考。在 5V 开发板上是 5V,在 3.3V 开发板上是 3.3V。INTERNAL:内置的参考电压。在 ATmega328P (UNO) 上,这是一个稳定的 1.1V。在 ATmega2560 (Mega) 上,这也是 1.1V (INTERNAL1V1) 或 2.56V (INTERNAL2V56)。EXTERNAL:使用施加到 AREF 引脚的电压(仅限 0V 到 5V)作为参考。
analogReference(type);type 可以是 DEFAULT、INTERNAL、INTERNAL1V1、INTERNAL2V56 或 EXTERNAL,具体取决于你的开发板。
切勿在 AREF 引脚上使用低于 0V 或高于 5V 的外部参考电压。 当使用外部参考时,你必须在调用 analogRead() 之前调用 analogReference(EXTERNAL)。否则可能会导致内部参考电压与 AREF 引脚短路,从而可能对微控制器造成永久性损坏。
现代最佳实践
Section titled “现代最佳实践”- 查阅你的开发板文档:使用不同微控制器(如基于 ARM 的 Arduino Due、Zero 或 UNO R4)的开发板具有不同的内部参考选项和电压水平。在使用此函数之前,请务必查阅你特定开发板的官方文档。
- 使用稳定的参考源:当使用
EXTERNAL时,请确保电压源稳定且干净。参考电压上的任何噪声都会直接影响读数的准确性。
示例:使用 3.3V 参考电压读取传感器
Section titled “示例:使用 3.3V 参考电压读取传感器”设想一个最大输出为 3.3V 的传感器。通过将模拟参考电压设置为 3.3V,我们可以在这个较小的电压范围内利用 ADC 的全部 0-1023 分辨率,从而获得更精确的读数。
/* 此示例演示了如何使用外部模拟参考电压。 将稳定的 3.3V 电源连接到 AREF 引脚。 将传感器的输出连接到引脚 A0。*/
// 最佳实践:使用 const 定义引脚const int SENSOR_PIN = A0;
void setup() { Serial.begin(9600);
// 针对带有原生 USB 的开发板的良好实践: while (!Serial) { ; // 等待串口连接。 }
// 将模拟参考电压设置为 AREF 引脚上的外部电压。 // 重要提示:运行前请确保你的 3.3V 电源已连接到 AREF。 analogReference(EXTERNAL);}
void loop() { // 从传感器读取值 int sensorValue = analogRead(SENSOR_PIN);
// 将 0-1023 的读数根据 3.3V 参考电压转换为实际电压 float voltage = sensorValue * (3.3 / 1023.0);
Serial.print("原始传感器值:"); Serial.print(sensorValue); Serial.print(",计算电压:"); Serial.print(voltage); Serial.println(" V");
delay(500); // 等待半秒钟再进行下一次读取}