Beheben: mbed AnalogIn.read_voltage() gibt nan oder 0.000 zurück (PlatformIO)
English
Deutsch
Problem:
Sie versuchen, eine ADC-Spannung in mbed / PlatformIO so zu lesen:
example.cpp
AnalogIn myADC(PA_5);
// Spannung lesen und ausgeben, dann zurückkehren
float v = myADC.read_voltage();
printf("%f\n", v);aber dies gibt nur nan oder 0.000 aus.
Lösung
mbed kennt die Referenzspannung für Ihre Plattform nicht. Die einfachste Methode ist, die Referenzspannung im Konstruktor von AnalogIn anzugeben:
analogin_fix.cpp
AnalogIn myADC(PA_5, 3.3);Dies gibt eine Referenzspannung von 3.3V an. Dies gilt für die meisten Anwendungen in ihrer Standardkonfiguration, beachten Sie jedoch, dass die Referenzspannung je nach Konfiguration Ihres Mikrocontrollers unterschiedlich sein kann.
Meiner Erfahrung nach ist es fast immer besser, die Referenzspannung experimentell zu überprüfen, anstatt zu versuchen, sie theoretisch abzuleiten, wenn sie nicht sofort offensichtlich ist.
Vollständiges Beispiel:
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