OK, also der Grund, weswegen das mit dem direkten Auslesen der Spannung nicht funktioniert hat war, dass ich die Dämpfung lokal in der Messfunktion und nicht in setup() eingetragen hatte. Mache ich das, so kommen die Werte gut hin.
Sieht jetzt so aus:
float Battery_GetVoltage(void) {
float resistorDividerFactor = 1 / ((float) rdiv2 / (rdiv2 + rdiv1));
float averagedAnalogValue = 0;
uint8_t i;
for (i = 0; i <= 19; i++) {
averagedAnalogValue += (float) analogReadMilliVolts(VOLTAGE_READ_PIN);
}
averagedAnalogValue /= 20000.0f; // Calc avg. value of loop and convert mV to V
return averagedAnalogValue * resistorDividerFactor + offsetVoltage;
}
Zusätzlich habe ich in Battery_Init() noch eingetragen:
analogSetPinAttenuation(VOLTAGE_READ_PIN, ADC_0db);
Das werde ich mal bisschen testen. Offset habe ich aktuell auf -0,04V stehen.
Davon ab macht es Sinn, die Stufen für die Spannungseinstellungen im Webinterface von 0,1 V auf 0,05 V zu reduzieren. Dann könnte man nämlich „Alle LEDs leuchten bei dieser Spannung (in Volt)“ auf 3,25 V setzen. Denke das wäre besser als 3,3 V - siehe Messreihe. Das erzeugt nämlich sonst „Hä, wieso entlädt sich der Akku so schnell? Den habe ich doch die ganze Nacht geladen!“.