# Marine Compass Display — Estado del Proyecto ## Qué funciona ### Ventana principal (`ui/main_window.py`) - Layout 60/40: rosa de los vientos (izq) + panel de info (der) - Modo fullscreen con F para toggle, Escape para cerrar - Modo kiosk (`--kiosk`): cursor oculto, screensaver desactivado (Linux/RPi) - Smoothing de rumbo configurable en `config.py` (`HEADING_SMOOTHING`) ### Rosa de los vientos (`ui/compass_widget.py`) - Tarjeta giratoria: el norte siempre apunta al norte real - Línea lubber fija en rojo (arriba = rumbo del barco) - Readout digital del rumbo **arriba** de la rosa, justo bajo la línea lubber - Formato: `045.0°M` o `045.0°T` según modo seleccionado - Estrella de 16 puntas: N=rojo, cardinales=blanco, intercardinales=oro - Ring de ticks cada 5°, números cada 10° - Modo noche / día - Ball central muestra pitch+roll del buque ### Panel de información (`ui/info_panel.py`) - **HDG grande**: muestra °M o °T según el botón HDG seleccionado ← bug corregido hoy - Filas de datos: HDG(T), ROT, PITCH, ROLL, VAR, HEAVE, YAW RATE - ROT Arc: semicírculo animado, azul=estribor, rojo=babor, escala ±60°/min - Siluetas de barco animadas (motor-cruiser 40ft): - **PITCH** (vista lateral): hull completo, cabina, flybridge, radar arch, línea de boot roja, línea de vida punteada, arco de proa - **ROLL** (vista de proa): casco V, francobordo con curvatura, raíl de rociada, windshield en V con cristales azules separados, arco radar, luces de navegación rojo/verde - **YAW** (vista de planta): casco cúbico bezier, cockpit con bancadas, cabina, flybridge, escotillas de cubierta, púlpito de proa, luces de nav - Botones táctiles: HDG °M/°T, NIGHT, PORTS - Marcos separados por gaps (para case con compartimentos físicos) - Responsive: se adapta a cualquier tamaño de pantalla ### Simulador NMEA (`simulator/nmea_simulator.py`) - Secuencia realista: INITIAL → TURN_STBD → COMP_STBD → STEADY_STBD → TURN_PORT → COMP_PORT → NORMAL - Genera: HCHDG (rumbo), IIROT (ROT), IIXDR (pitch, roll, aceleración, giroscopio) - Servidor TCP en 127.0.0.1:10110 - Variación magnética: -7.5° (Stuart, FL) - SOG: 8.5 kn, ROT máx: 60°/min ### Lanzamiento (`launch.bat`) - `launch.bat --sim` → usa `python` (con consola), se ven logs del simulador en tiempo real - `launch.bat` → usa `pythonw` (sin consola), modo kiosk limpio para hardware ### Parser NMEA (`core/nmea_parser.py`) - Parsea HCHDG, IIROT, IIXDR - `NavData.hdg_true_calc` = hdg_mag + variation (calculo automático) --- ## Pendiente / Mejoras posibles - [ ] Silueta ROLL (vista de proa): el usuario quiere más detalle y mejores proporciones - [ ] Test en hardware real con puerto serial - [ ] Modo RPi: probar con `--kiosk` en Raspberry Pi con pantalla táctil - [ ] NMEA: agregar soporte para VHW, MWV, GGA si se necesita más datos --- ## Cómo probar ``` # Simulador (muestra logs en consola): launch.bat --sim # Con hardware real en COM3: launch.bat --port COM3 --baud 4800 # Puerto configurado en config.py: launch.bat # Python directo (más control): python main.py --sim python main.py --port COM3 ``` --- ## Archivos clave | Archivo | Función | |---------|---------| | `main.py` | Entry point, args, QApplication | | `config.py` | Puertos serial, smoothing, FPS | | `ui/main_window.py` | Ventana principal, layout, timer | | `ui/compass_widget.py` | Rosa de los vientos (QPainter) | | `ui/info_panel.py` | Panel derecho: datos, siluetas, botones | | `ui/styles.py` | Colores y helpers de tema | | `core/nmea_parser.py` | Parser NMEA 0183 | | `core/serial_reader.py` | Lector serial (QThread) | | `simulator/nmea_simulator.py` | Simulador de maniobras + TCP server |