Files
voice-assistant/firmware/src/StatusLed.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

48 lines
1.0 KiB
C++

#include "StatusLed.h"
StatusLed::StatusLed(int pin) : _pin(pin) {}
void StatusLed::begin() {
pinMode(_pin, OUTPUT);
write(false);
}
void StatusLed::on() {
_blinking = false;
write(true);
}
void StatusLed::off() {
_blinking = false;
write(false);
}
void StatusLed::blink(uint32_t periodMs, uint32_t onMs) {
const uint32_t lit = onMs == 0 ? periodMs / 2 : onMs;
if (_blinking && _periodMs == periodMs && _onMs == lit) {
return; // déjà dans ce mode : ne pas réinitialiser la phase
}
_blinking = true;
_periodMs = periodMs;
_onMs = lit;
_lastToggleMs = millis();
}
void StatusLed::update() {
if (!_blinking) {
return;
}
const uint32_t now = millis();
const uint32_t phase = _state ? _onMs : (_periodMs - _onMs); // durée de l'état courant
if ((now - _lastToggleMs) >= phase) {
_lastToggleMs = now;
write(!_state);
}
}
void StatusLed::write(bool state) {
_state = state;
digitalWrite(_pin, state ? HIGH : LOW);
}