arduino的adc
arduino支持adc,但是这个是和硬件绑定的
需要芯片支持adc转换芯片,具体要查哪些引脚支持。
基准电压:
基准电压一般就是单片机gpio推挽输出高电平的电压
adc分辨率:
手册一般会说支持xxxbit的adc,那么分辨率就是2的xxx次方(2^xxx)
拿esp32举例
esp32最高支持12bit的adc
那么最高分辨率就是2^12(2的12次方)也就是4096
因为esp32输出电压是3.3,所以基准电压是3.3
也就是能读取0到3.3之间的电压
arduino 官方支持10bit adc
那么最高分辨率就是2^10(2的10次方)也就是1024
因为arduino输出电压是5,所以基准电压是5
也就是能读取0到5之间的电压
读取adc数字量
analogRead(引脚);
参数 | 数据类型 | 作用 | 选项 |
---|---|---|---|
引脚 | int | 支持adc的引脚io | 单片机io |
返回值 | int | 返回0到2的X次方(x就是adc位深比如10bit就是0到1024,12bit就是0到4096) | 无 |
返回值:
引脚的输入电压将在0V到3.3之间,
模拟数字转换(adc)功能作用下,
该输入电压将被映射到数值0-4096之间。
(0V对应数值0, 3.3V对应4096)
以上是esp32单片机的adc
读取adc电压
float 电压 = 0;
电压 = analogRead(引脚) * (基准电压 / adc分辨率);
电压:读取的电压
基准电压:
基准电压一般就是单片机gpio推挽输出高电平的电压
adc分辨率:
手册一般会说支持xxxbit的adc,那么分辨率就是2的xxx次方(2^xxx)
参考:
const int analogInPin = 4; // 定义模拟输入引脚
int sensorValue = 0; // 存储模拟输入的值
float voltage = 0;
void setup()
{
Serial.begin(9600); // 初始化串口通信
}
void loop()
{
sensorValue = analogRead(analogInPin); // 读取模拟输入的值
voltage = sensorValue * (3.3 / 4096); // 将模拟输入的值转换为电压值
// 打印输出
Serial.print("sensor = ");
Serial.print(sensorValue);
Serial.print("\t vol = ");
Serial.print(voltage);
Serial.println("V");
delay(2); // 延迟2毫秒
}
//4号脚输入0到3.3之间的电压