diff --git a/sketches/doorbell-touch-esp32-32e/doorbell-touch-esp32-32e.ino b/sketches/doorbell-touch-esp32-32e/doorbell-touch-esp32-32e.ino index 523a58a..6f4ddb6 100644 --- a/sketches/doorbell-touch-esp32-32e/doorbell-touch-esp32-32e.ino +++ b/sketches/doorbell-touch-esp32-32e/doorbell-touch-esp32-32e.ino @@ -61,85 +61,14 @@ void setup() { Serial.println("[BOOT] Ready — monitoring ntfy.sh\n"); } + + // ── Silence handler (delegates to DoorbellLogic) ──────────────── void silenceAlerts() { Serial.println("[SILENCE] User completed hold-to-silence gesture"); logic.onTouch(TouchEvent{true, 0, 0}); } -// ── Silence handler (delegates to DoorbellLogic) ──────────────── -void silenceAlerts() { -Serial.println("[SILENCE] User completed hold-to-silence gesture"); -logic.onTouch(TouchEvent{true, 0, 0}); -} - void loop() { -// ── Silence handler (delegates to DoorbellLogic) ──────────────── -void silenceAlerts() { - Serial.println("[SILENCE] User completed hold-to-silence gesture"); - logic.onTouch(TouchEvent{true, 0, 0}); -} logic.update(); - - const ScreenState& state = logic.getScreenState(); - - // ---- Touch handling varies by screen ---- - - if (state.screen == ScreenID::ALERT) { - // Hold-and-release to silence - HoldState hold = display.updateHold(HOLD_TO_SILENCE_MS); - - if (hold.completed) { - // Finger lifted after full charge → silence now - display.stopHint(); - delay(80); - silenceAlerts(); - } else if (hold.active || hold.charged) { - // Real interaction in progress — suppress hint - display.stopHint(); - } else { - // No touch — run coaching hint - display.updateHint(); - } - } else if (state.screen == ScreenID::DASHBOARD) { - TouchEvent evt = display.readTouch(); - if (evt.pressed) { - int tile = display.dashboardTouch(evt.x, evt.y); - if (tile >= 0) { - Serial.printf("[DASH] Tile %d tapped\n", tile); - // Tile-specific actions go here - } else { - logic.onTouch(evt); - } - delay(300); // debounce - } - - } else if (state.screen == ScreenID::OFF) { - // Any touch wakes - TouchEvent evt = display.readTouch(); - if (evt.pressed) { - logic.onTouch(evt); - delay(300); - } - - } else { - // Boot/WiFi screens: simple touch passthrough - TouchEvent evt = display.readTouch(); - if (evt.pressed) { - logic.onTouch(evt); - delay(300); - } - } - - // ---- Render ---- - display.setBacklight(state.screen != ScreenID::OFF); - display.render(logic.getScreenState()); - - // ---- Serial commands ---- - if (Serial.available()) { - String cmd = Serial.readStringUntil('\n'); - cmd.trim(); - if (cmd.length() > 0) logic.onSerialCommand(cmd); - } - }