如何修复 mbed AnalogIn.read_voltage() 返回 nan 或 0.000 (PlatformIO)
问题:
你正在尝试像这样在 mbed / PlatformIO 中读取 ADC 电压:
example.cpp
AnalogIn myADC(PA_5);
// 读取并打印电压,然后返回
float v = myADC.read_voltage();
printf("%f\n", v);但这只打印 nan 或 0.000。
解决方案
mbed 不知道你平台的参考电压。最简单的方法是在 AnalogIn 的构造函数中提供参考电压:
analogin_fix.cpp
AnalogIn myADC(PA_5, 3.3);这指定了 3.3V 的参考电压。虽然这适用于大多数应用程序的默认配置,但注意参考电压可能因微控制器的配置而异。
根据我的经验,如果参考电压不是立即显而易见的,几乎总是最好通过实验验证参考电压而不是试图理论化。
完整示例:
main.cpp
#include <mbed.h>
BufferedSerial pc(USBTX, USBRX, 115200); // tx, rx
AnalogIn myADC(PA_5, 3.3);
FileHandle *mbed::mbed_override_console(int fd) {
return &pc;
}
int main() {
while(1) {
float v = myADC.read_voltage();
printf("%f\n", v);
ThisThread::sleep_for(100ms);
}
}mbed_app.json
{
"target_overrides": {
"*": {
"target.printf_lib": "std"
}
}
}Check out similar posts by category:
C/C++, Mbed, PlatformIO
If this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow