# cabs72030202/jdg2026_machine architecture

> Architecture diagram of the GitHub repository cabs72030202/jdg2026_machine, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/cabs72030202/jdg2026_machine
- Repository: https://github.com/cabs72030202/jdg2026_machine

## Overview

Machine JDG2026 is a coordinated robotics control system: Raspberry Pi controllers read Logitech F710 input, encode it for SPI, and coordinate ESP32 robot programs; ESP32s use ESP-NOW to receive control state and operate robot mechanisms. The graph preserves the documented robot, motor, servo, LED, NFC, and user-interface capabilities. Source excerpts confirm the controller/SPI path, ESP-NOW decoding, and windmill storage implementation; links for other robot programs and hardware subsystems are omitted where their call relationships were not shown.

Main entry points: [`src/esp_windmill_storage.cpp`](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_windmill_storage.cpp) (Windmill Storage), [`src/controller.c`](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/controller.c) (Pi Controller), [`lib/spi_comm/spi_rpi.c`](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/spi_comm/spi_rpi.c) (SPI Master), [`lib/esp-controls/esp-controls.cpp`](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/esp-controls/esp-controls.cpp) (ESP Control State)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_operator["Operator Control"]
  node_controller["Pi Controller<br/>[controller.c]"]
  node_f710["F710 Driver<br/>[f710.c]"]
end

subgraph group_transport["Control Transport"]
  node_spi_master["SPI Master<br/>[spi_rpi.c]"]
  node_spi_link{{"SPI Bus"}}
  node_spi_slave["SPI Slave<br/>[spi_esp.cpp]"]
  node_esp_controls["ESP Control State<br/>[esp-controls.cpp]"]
  node_espnow["ESP-NOW Communication<br/>[wireless-com.cpp]"]
  node_esp_tx["ESP Transmitter<br/>[esp_tx.cpp]"]
end

subgraph group_robots["Robot Programs"]
  node_dam_elevator["Dam Elevator"]
  node_dam_gripper["Dam Gripper"]
  node_nuclear["Nuclear Robot<br/>[esp_nuclear.cpp]"]
  node_solar["Solar Robot<br/>[esp_solar.cpp]"]
  node_wind_elevator["Windmill Elevator"]
  node_wind_gripper["Windmill Gripper"]
  node_wind_storage["Windmill Storage"]
  node_calibration["ESP Calibration"]
end

subgraph group_hardware["Robot Hardware"]
  node_motors["Motor Control<br/>[motor.cpp]"]
  node_mecanum["Mecanum Drive<br/>[mecanum.cpp]"]
  node_servos["Servo Control<br/>[servo180.cpp]"]
  node_leds["LED Control<br/>[ws2811.cpp]"]
  node_nfc["NFC<br/>[nfc.cpp]"]
  node_remotexy["RemoteXY Interface<br/>[esp_xy.cpp]"]
end

node_operator(("Gamepad Operator"))

node_operator -->|"provides input"| node_controller
node_controller -->|"reads events"| node_f710
node_controller -->|"sends state"| node_spi_master
node_spi_master -->|"formats state"| node_f710
node_spi_master -.->|"transfers data"| node_spi_link
node_spi_link -.->|"transfers data"| node_spi_slave
node_spi_slave -.->|"delivers decoded packet"| node_esp_controls
node_espnow -->|"unpacks received state"| node_esp_controls
node_controller -.->|"coordinates wirelessly"| node_esp_tx
node_wind_storage -->|"initializes link"| node_espnow
node_wind_storage -->|"reads control state"| node_esp_controls
node_wind_storage -->|"commands drive"| node_mecanum
node_wind_storage -->|"processes servo commands"| node_servos

click node_controller "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/controller.c"
click node_f710 "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/f710/f710.c"
click node_spi_master "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/spi_comm/spi_rpi.c"
click node_spi_slave "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/spi_comm/spi_esp.cpp"
click node_esp_controls "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/esp-controls/esp-controls.cpp"
click node_espnow "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/wireless-com/wireless-com.cpp"
click node_esp_tx "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_tx.cpp"
click node_dam_elevator "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_dam_elevator.cpp"
click node_dam_gripper "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_dam_gripper.cpp"
click node_nuclear "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_nuclear.cpp"
click node_solar "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_solar.cpp"
click node_wind_elevator "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_windmill_elevator.cpp"
click node_wind_gripper "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_windmill_gripper.cpp"
click node_wind_storage "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_windmill_storage.cpp"
click node_calibration "https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_calibration.cpp"
click node_motors "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/motor/motor.cpp"
click node_mecanum "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/motor/mecanum.cpp"
click node_servos "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/servo/servo180.cpp"
click node_leds "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/led/ws2811.cpp"
click node_nfc "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/nfc/nfc.cpp"
click node_remotexy "https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/remotexy/esp_xy.cpp"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_controller,node_f710 toneBlue
class node_spi_master,node_spi_link,node_spi_slave,node_esp_controls,node_espnow,node_esp_tx toneAmber
class node_dam_elevator,node_dam_gripper,node_nuclear,node_solar,node_wind_elevator,node_wind_gripper,node_wind_storage,node_calibration toneMint
class node_motors,node_mecanum,node_servos,node_leds,node_nfc,node_remotexy toneRose
class node_operator toneIndigo
```

## Components

### Operator Control

- [Pi Controller](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/controller.c): `src/controller.c`
- [F710 Driver](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/f710/f710.c): `lib/f710/f710.c`

### Control Transport

- [SPI Master](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/spi_comm/spi_rpi.c): `lib/spi_comm/spi_rpi.c`
- **SPI Bus**
- [SPI Slave](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/spi_comm/spi_esp.cpp): `lib/spi_comm/spi_esp.cpp`
- [ESP Control State](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/esp-controls/esp-controls.cpp): `lib/esp-controls/esp-controls.cpp`
- [ESP-NOW Communication](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/wireless-com/wireless-com.cpp): `lib/wireless-com/wireless-com.cpp`
- [ESP Transmitter](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_tx.cpp): `src/esp_tx.cpp`

### Robot Programs

- [Dam Elevator](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_dam_elevator.cpp): `src/esp_dam_elevator.cpp`
- [Dam Gripper](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_dam_gripper.cpp): `src/esp_dam_gripper.cpp`
- [Nuclear Robot](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_nuclear.cpp): `src/esp_nuclear.cpp`
- [Solar Robot](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_solar.cpp): `src/esp_solar.cpp`
- [Windmill Elevator](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_windmill_elevator.cpp): `src/esp_windmill_elevator.cpp`
- [Windmill Gripper](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_windmill_gripper.cpp): `src/esp_windmill_gripper.cpp`
- [Windmill Storage](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_windmill_storage.cpp): `src/esp_windmill_storage.cpp`
- [ESP Calibration](https://github.com/cabs72030202/jdg2026_machine/blob/main/src/esp_calibration.cpp): `src/esp_calibration.cpp`

### Robot Hardware

- [Motor Control](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/motor/motor.cpp): `lib/motor/motor.cpp`
- [Mecanum Drive](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/motor/mecanum.cpp): `lib/motor/mecanum.cpp`
- [Servo Control](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/servo/servo180.cpp): `lib/servo/servo180.cpp`
- [LED Control](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/led/ws2811.cpp): `lib/led/ws2811.cpp`
- [NFC](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/nfc/nfc.cpp): `lib/nfc/nfc.cpp`
- [RemoteXY Interface](https://github.com/cabs72030202/jdg2026_machine/blob/main/lib/remotexy/esp_xy.cpp): `lib/remotexy/esp_xy.cpp`

### Other components

- **Gamepad Operator**

## Connections

- Gamepad Operator → Pi Controller: provides input (evidence: `README.md`)
- Pi Controller → F710 Driver: reads events (evidence: `src/controller.c`)
- Pi Controller → SPI Master: sends state (evidence: `src/controller.c`)
- SPI Master → F710 Driver: formats state (evidence: `lib/spi_comm/spi_rpi.c`)
- SPI Master → SPI Bus: transfers data
- SPI Bus → SPI Slave: transfers data
- SPI Slave → ESP Control State: delivers decoded packet
- ESP-NOW Communication → ESP Control State: unpacks received state (evidence: `lib/wireless-com/wireless-com.cpp`)
- Pi Controller → ESP Transmitter: coordinates wirelessly (evidence: `README.md`)
- Windmill Storage → ESP-NOW Communication: initializes link (evidence: `src/esp_windmill_storage.cpp`)
- Windmill Storage → ESP Control State: reads control state (evidence: `src/esp_windmill_storage.cpp`)
- Windmill Storage → Mecanum Drive: commands drive (evidence: `src/esp_windmill_storage.cpp`)
- Windmill Storage → Servo Control: processes servo commands (evidence: `src/esp_windmill_storage.cpp`)
