Files
voice-assistant/firmware/src/PushButton.cpp
T
Denis Defolie d20976fea2 Assistant vocal local ESP32 : étapes 1 à 15, et 15b écrite
État du projet au premier commit :
- firmware ESP32 : micro I2S, lecture anti-gigue, MQTT (état retenu, testament),
  mains libres, domotique de démonstration, chien de garde, présence du serveur ;
- serveur Python : sessions, VAD, faster-whisper, pyannote, identification,
  droits par profil, domotique, mot de réveil, Piper ;
- broker Mosquitto : configuration, comptes et ACL (non activés en développement) ;
- étape 15b écrite, en attente d'essai : agent MQTT pour machines Linux.

Étapes 1 à 15 validées. 203 tests, pyright sans erreur.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-30 17:41:11 +02:00

55 lines
1.3 KiB
C++

#include "PushButton.h"
PushButton::PushButton(int pin, uint32_t debounceMs)
: _pin(pin), _debounceMs(debounceMs) {}
void PushButton::begin() {
pinMode(_pin, INPUT_PULLUP);
// Niveau bas = appuyé, car l'autre borne du bouton est reliée à GND.
_lastRawState = (digitalRead(_pin) == LOW);
_stableState = _lastRawState;
_lastChangeMs = millis();
}
void PushButton::update() {
const bool raw = (digitalRead(_pin) == LOW);
const uint32_t now = millis();
if (raw != _lastRawState) {
_lastRawState = raw;
_lastChangeMs = now;
return;
}
// L'état brut est resté identique assez longtemps : on le valide.
if (raw != _stableState && (now - _lastChangeMs) >= _debounceMs) {
_stableState = raw;
if (raw) {
_pressedEvent = true;
} else {
_releasedEvent = true;
}
}
}
bool PushButton::isDown() const {
return _stableState;
}
bool PushButton::wasPressed() {
const bool event = _pressedEvent;
_pressedEvent = false;
return event;
}
bool PushButton::wasReleased() {
const bool event = _releasedEvent;
_releasedEvent = false;
return event;
}
void PushButton::clearEvents() {
_pressedEvent = false;
_releasedEvent = false;
}