Bonjour,
J'ai posé la question sur le forum en anglais, mais à part des critiques sur ma façon de présenter mon code, je n'ai pas eu beaucoup de réponses constructives... Je tente ma chance ici...
J'ai une fonction readBatterie() sur mon pro-mini qui mesure une tension de batterie au travers d'un diviseur de tension sur la pin A7 (analogue uiquement). L'entrée est donc bien chargée et ce n'est pas un problème de "hard".
Je fais 10 mesures puis la moyenne.
Ma boucle est appelée en début de loop et tout se passe bien. Si j'appelle la fonction plusieurs fois à la suite, les mesures sont bonnes et suivent bien la variation de la tension.
Mon programme passe ensuite en sommeil et est réveillé par une interruption d'une RTC. Je "detach" les interruptions, et je refais un appel à la fonction, et là, elle me donne EXACTEMENT les mêmes 10 valeurs que celles du 1er appel alors que la tension a bien varié.
Je remets pourtant bien à zéro les variables, (que j'ai affichées pour debug) mais rien n'y fait !
J'ai essayé en passant les variables en "volatile", sans succès.
J'avoue que je suis coincé...
Quelqu'un aurait-il une idée ?
float tensionBatterie;
const byte PIN_VOLTMETER = A7;
const float REFVOLTAGE = 3.281; // exact voltage of Arduino supply measured on pin VCC
const float PONTDIVISEUR = 0.23295; // measured voltage divider ratio 27000/8200 Ohm
const float SEUILBATTERIE = 11.0; // low voltage alarm level
void readBatterie() {
int analogBatt=0;
tensionBatterie=0;
analogRead(PIN_VOLTMETER);
delay(750);
for (byte i=0; i < 10; i++) {
analogBatt += analogRead(PIN_VOLTMETER);
Serial.println(analogBatt);
}
analogBatt /= 10;
// TEST
Serial.println(analogBatt);
tensionBatterie = analogBatt * (REFVOLTAGE / 1024);
tensionBatterie /= PONTDIVISEUR ;
#ifdef DEBUG
Serial.print(F("Ubatt = "));
Serial.println(tensionBatterie);
#endif
if ( tensionBatterie < SEUILBATTERIE ) {
alerteBatterie = 1;
#ifdef DEBUG
Serial.println(F("ALARME BATTERIE"));
#endif
}
}