const int pinPoussoirs = A0;
const int seuilHautRepos = 1020; // Seuil à partir duquel on considère qu'aucun bouton n'est appuyé
const int debounceDelay = 30; // Délai de debounce en ms
const int nombreLectures = 5; // Nombre de lectures pour la moyenne
const int tolerance = 5; // Tolérance de variation pour considérer une lecture stable
int lecture;
void setup() {
Serial.begin(115200);
Serial.println(F("Lecture d'un bouton analogique avec debounce et moyenne sur plusieurs lectures"));
}
void loop() {
static bool boutonEnfonce = false;
static unsigned long dernierTempsLecture = 0;
int val = analogRead(pinPoussoirs);
if (val < seuilHautRepos) {
if (!boutonEnfonce && (millis() - dernierTempsLecture > debounceDelay)) {
// Attente d'un appui stable
int somme = 0;
bool stable = true;
for (int i = 0; i < nombreLectures; i++) {
lecture = analogRead(pinPoussoirs);
somme += lecture;
delay(5); // court délai entre les lectures
// Vérification de stabilité par rapport à la première lecture
if (i == 0 && abs(lecture - val) > tolerance) {
stable = false;
break;
}
}
if (stable) {
int moyenne = somme / nombreLectures;
int numPoussoir = 1 + (moyenne + 32) / 64;
boutonEnfonce = true;
Serial.print("Valeur moyenne : ");
Serial.print(moyenne);
Serial.print(" / Poussoir N : ");
Serial.println(numPoussoir);
}
}
} else {
if (boutonEnfonce) {
boutonEnfonce = false;
dernierTempsLecture = millis(); // Réinitialise le debounce pour la prochaine détection
}
}
delay(10); // Délai pour limiter le polling
}