- Botones en GPIO 25 (PLAY=DONE), 26 (V+=NEXT), 27 (V-=SNOOZE)
- KCOM del módulo a GND, lógica invertida (HIGH reposo, LOW al pulsar)
- INPUT_PULLUP, detección por flanco descendente con debounce 200ms
- GPIO 25 ya no es vibrador (ahora es botón DONE), vibrador desactivado
- OLED con feedback toast al pulsar (1.2s sin pisar)
- Toast 'Nueva!' al recibir tarea nueva del polling
- Quitado código de test ADC y de matriz resistiva
Fixes pantalla:
- GPIO 14 ya no es botón (era strapping pin, causaba glitches y reset)
- Botones solo en 25/26/27 que no son strapping pins
- Reescritura desde cero con arquitectura modular (Config, UI, Vib, Task, Api, Portal, Wifi)
- NVS en lugar de SPIFFS para persistencia
- WiFi: máquina de estados BOOT→CONNECTING→CONNECTED/FAILED→PORTAL
- OLED: 5 frames nombrados (boot, connecting, idle, task, portal)
- API: cliente HTTP reutilizable con lectura completa del body
- Portal: AP + DNS + WebServer, /test restaura correctamente web/dns
- Cmd serie: B0/B1/B2 simula botones, S estado, P pines, A ADC, C calibrar
- Vibrador: patrón 2-buzz al recibir tarea nueva
WiFi default: PHARMACO/arnoldgym2010 (BatKuevaUp sin internet)