ui/index.html — full dashboard rewrite: - 3-column layout: LEFT telemetry gauges, CENTER 3D SaltyBot, RIGHT comms - LEFT: artificial horizon (canvas, pitch/roll/ladder/roll-arc), yaw compass tape, pitch/roll/yaw readouts, bidirectional motor bar, battery bar, BME280 environment section (auto-shows on data), MAG heading row - CENTER: Three.js SaltyBot model (PR#41) with ground plane + animated wheel rolling proportional to motor_cmd - RIGHT: USB tx/rx packet counters, mode badge (MANUAL/ASSISTED/AUTO), CRSF RSSI/LQ, dual RC stick overlay canvases (CH1–4), Jetson active dot - BOTTOM: KP/KI/KD/SP/MAX sliders with APPLY + QUERY, collapsible log console - Style: Tailwind CSS CDN, dark cyberpunk theme, neon cyan + orange accents src/main.c — telemetry JSON additions: - buf: 256 → 320 bytes (headroom for new fields) - ja: Jetson active flag (0/1) via jetson_cmd_is_active() - txc: TX telemetry frame counter (uint32, main-loop local) - rxc: RX CDC packet counter (cdc_rx_count from usbd_cdc_if) - ch1–ch4: CRSF channels mapped to µs (1000–2000) via crsf_to_range(), appended alongside rssi/lq when RC is alive lib/USB_CDC/src/usbd_cdc_if.c: - cdc_rx_count: volatile uint32_t, incremented in CDC_Receive on every packet; extern'd in main.c for telemetry Closes #43. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Description
SaltyLab self-balancing bot firmware (STM32F722)
Languages
Python
67.1%
C
11.4%
JavaScript
9.2%
OpenSCAD
7.8%
HTML
1.5%
Other
2.9%