Draft: shared protocol, remote firmware, project docs
Not yet verified on hardware. - shared/HexapodProtocol: CmdPacket (now 20 bytes, adds remote_roll / remote_pitch), FLAG_* bits and radio settings as the single protocol definition; static payload size = sizeof(CmdPacket) on both radios. - robot: use the shared protocol; vx = forward (harness w/x <-> q/e); InputMapper adds remote tilt on top of the right stick when FLAG_REMOTE_GYRO is set, and robot.ino no longer zeroes stick roll/pitch when it's off. - remote (Teensy 4.1): Sticks (calibration, EEPROM), RemoteIMU, RemoteState (interlocks, link-loss disarm, smoothing), PacketBuilder, RadioLink, NextionUI, SerialConsole. - CLAUDE.md, README.md, remote/README.md, remote/NEXTION.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
ad77b06c36
commit
91dac16fca
30 files changed
+1706
-57
No files matched your search
@@ -0,0 +1,75 @@
|
||||
# Nextion HMI build guide
|
||||
|
||||
The firmware drives the display by **component name**, and the display
|
||||
talks back with small custom frames sent from each button's touch event.
|
||||
Build one page in Nextion Editor to match the tables below. Layout, fonts
|
||||
and colors are up to you. The names and event code must match exactly.
|
||||
|
||||
The remote is authoritative. Use **plain Button** components (not
|
||||
Dual-state buttons) and don't toggle anything locally in the HMI. The
|
||||
remote repaints every label and color from its own state, including a
|
||||
full redraw every 2 s and whenever the display reboots.
|
||||
|
||||
## Program.s / page setup
|
||||
|
||||
In **Program.s**, before `page 0`, add:
|
||||
|
||||
```
|
||||
bauds=115200
|
||||
```
|
||||
|
||||
This sets the display to the `NEXTION_BAUD` in `remote/Config.h`. The
|
||||
display ships at 9600, and `bauds=` persists across power cycles.
|
||||
|
||||
Name the page `main` (page 0). The firmware never changes pages.
|
||||
|
||||
## Components
|
||||
|
||||
Text components need **txt_maxl** at least as large as the longest string
|
||||
the firmware writes. Button bounds here allow some slack.
|
||||
|
||||
| Name | Type | txt_maxl | Firmware writes |
|
||||
|----------|---------|----------|----------------------------------------------|
|
||||
| `bArm` | Button | 10 | `ARMED` / `DISARMED`, bco red / gray |
|
||||
| `bKill` | Button | – | nothing (static "DISARM" label, make it red) |
|
||||
| `bStand` | Button | 6 | `STAND` / `SIT`, bco green / gray |
|
||||
| `bGait` | Button | 8 | `TRIPOD` / `WAVE` |
|
||||
| `bMode` | Button | 8 | `DIRECT` / `HEADING` |
|
||||
| `bRs` | Button | 10 | `R: ROTATE` / `R: MOVE` |
|
||||
| `bRGyro` | Button | – | bco green / gray (label it "REMOTE GYRO") |
|
||||
| `bBGyro` | Button | – | bco green / gray (label it "ROBOT GYRO") |
|
||||
| `hSpeed` | Slider | – | `val` 0..255 (set **maxval = 255**) |
|
||||
| `nSpeed` | Number | – | `val` 0..100 (speed %) |
|
||||
| `bCal` | Button | 9 | `CAL` / `SAVE CAL`, bco orange while active |
|
||||
| `bCalX` | Button | – | nothing (static "CANCEL CAL") |
|
||||
| `bZero` | Button | – | nothing (static "LEVEL") |
|
||||
| `tLink` | Text | 10 | `LINK 97%` / `NO LINK`, pco green / red |
|
||||
| `tMsg` | Text | 40 | status / rejection messages |
|
||||
|
||||
## Touch events
|
||||
|
||||
Put this in each component's **Touch Release Event** (the Speed slider
|
||||
uses **Touch Move** as well so the value tracks your finger). Frame format:
|
||||
`'#'` (0x23), length, command byte, optional value byte.
|
||||
|
||||
| Component | Event code | Command |
|
||||
|-----------|------------------------------------------|--------------------------------|
|
||||
| `bArm` | `printh 23 01 41` | `A` toggle arm (needs sticks centered) |
|
||||
| `bKill` | `printh 23 01 4B` | `K` disarm, always accepted |
|
||||
| `bStand` | `printh 23 01 53` | `S` toggle sit/stand |
|
||||
| `bGait` | `printh 23 01 47` | `G` tripod ↔ wave |
|
||||
| `bMode` | `printh 23 01 4D` | `M` direct ↔ heading-hold |
|
||||
| `bRs` | `printh 23 01 58` | `X` right stick rotate ↔ translate |
|
||||
| `bRGyro` | `printh 23 01 52` | `R` remote-gyro tilt on/off |
|
||||
| `bBGyro` | `printh 23 01 42` | `B` robot self-stabilize on/off |
|
||||
| `hSpeed` | `printh 23 02 56`<br>`prints hSpeed.val,1` | `V` + speed byte |
|
||||
| `bZero` | `printh 23 01 5A` | `Z` zero handset level |
|
||||
| `bCal` | `printh 23 01 43` | `C` start / save stick calibration |
|
||||
| `bCalX` | `printh 23 01 51` | `Q` cancel calibration |
|
||||
|
||||
**Uncheck "Send Component ID"** on every component. The firmware ignores
|
||||
standard touch frames, and they only add serial traffic.
|
||||
|
||||
Protocol details and the parser live in `NextionUI.h/.cpp`. To add a
|
||||
control, pick an unused command byte, add it to `NextionUI::decodeCustom()`
|
||||
and `UiCmd`, handle it in `RemoteState::handle()`, and add a row here.
|
||||
Reference in new issue
Block a user