mirror of
https://github.com/deunix-educ/voice-assistant.git
synced 2026-10-13 00:11:57 +02:00
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>
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
#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;
|
||||
}
|
||||
Reference in New Issue
Block a user