# ufabcrocketdesign/embedded_system architecture

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

- Interactive diagram: https://gitdiagram.com/ufabcrocketdesign/embedded_system
- Repository: https://github.com/ufabcrocketdesign/embedded_system

## Overview

This tree appears to be the runtime library for an Arduino/ESP32 rocket flight and recovery system. Its central domain workflow is sensing flight conditions, determining apogee, then commanding deployment hardware; supporting branches provide positioning, communications, logging, and platform-specific pin configuration. The empty README and limited source excerpts leave the wiring among most subsystems unverified, so those relationships are omitted rather than inferred from names.

Main entry points: [`src/lib/Baro/Baro.cpp`](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Baro/Baro.cpp) (Barometers), [`src/lib/BMP085/BMP085.cpp`](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP085/BMP085.cpp) (BMP085 driver), [`src/lib/BMP280/BMP280.cpp`](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP280/BMP280.cpp) (BMP280 driver), [`src/lib/BMP388/BMP388.cpp`](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP388/BMP388.cpp) (BMP388 driver)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_sensing["Sensing"]
  node_pressure["Barometers<br/>[Baro.cpp]"]
  node_bmp085["BMP085 driver<br/>[BMP085.cpp]"]
  node_bmp280["BMP280 driver<br/>[BMP280.cpp]"]
  node_bmp388["BMP388 driver<br/>[BMP388.cpp]"]
  node_accel["Accelerometers<br/>[Accel.cpp]"]
  node_gyro["Gyroscopes<br/>[Gyro.cpp]"]
  node_magn["Magnetometers<br/>[Magn.cpp]"]
  node_gps["GPS receiver<br/>[GyGPS.cpp]"]
  node_sensors["Sensor aggregation<br/>[Sens.cpp]"]
end

subgraph group_flight["Flight logic"]
  node_apogee["Apogee detection<br/>[Apogeu.cpp]"]
end

subgraph group_recovery["Recovery"]
  node_deploy1["Single deployment<br/>[MonoDeploy.cpp]"]
  node_deploy2["Dual deployment<br/>[DuDeploy.cpp]"]
end

subgraph group_telemetry["Telemetry and logging"]
  node_protocol["Serial protocol<br/>[ComProtocol.cpp]"]
  node_sd["SD logging<br/>[SDCH.cpp]"]
  node_morse["Morse signaling<br/>[Morse.cpp]"]
end

subgraph group_platform["Platform utilities"]
  node_eeprom[("EEPROM records<br/>[EEDataRegister.h]")]
  node_movingavg["Moving average<br/>[MovingAverage.cpp]"]
  node_board["Board pin maps<br/>[pinos.h]"]
end

node_sensorhw(("Sensor hardware"))
node_recoveryhw(("Recovery hardware"))
node_serial(("Serial endpoint"))
node_sdcard[("SD card")]

node_bmp085 -->|"inherits"| node_pressure
node_bmp280 -->|"inherits"| node_pressure
node_bmp388 -->|"inherits"| node_pressure
node_bmp085 -->|"reads via Wire"| node_sensorhw
node_bmp280 -->|"reads via Wire"| node_sensorhw
node_bmp388 -->|"reads via Wire"| node_sensorhw
node_apogee -->|"loads and saves"| node_eeprom
node_deploy1 -->|"drives pins"| node_recoveryhw
node_deploy2 -->|"drives pins"| node_recoveryhw
node_protocol -->|"reads and writes"| node_serial
node_sd -->|"logs data"| node_sdcard
node_movingavg -.-> node_sensorhw

click node_pressure "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Baro/Baro.cpp"
click node_bmp085 "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP085/BMP085.cpp"
click node_bmp280 "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP280/BMP280.cpp"
click node_bmp388 "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP388/BMP388.cpp"
click node_accel "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Accel/Accel.cpp"
click node_gyro "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Gyro/Gyro.cpp"
click node_magn "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Magn/Magn.cpp"
click node_gps "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/GyGPS/GyGPS.cpp"
click node_apogee "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Apogeu/Apogeu.cpp"
click node_deploy1 "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/MonoDeploy/MonoDeploy.cpp"
click node_deploy2 "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/DuDeploy/DuDeploy.cpp"
click node_protocol "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/ComProtocol/ComProtocol.cpp"
click node_sd "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/SDCH/SDCH.cpp"
click node_eeprom "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/EEDataRegister/EEDataRegister.h"
click node_sensors "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Sens/Sens.cpp"
click node_movingavg "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/MovingAverage/MovingAverage.cpp"
click node_morse "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Morse/Morse.cpp"
click node_board "https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/pinos.h"

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_pressure,node_bmp085,node_bmp280,node_bmp388,node_accel,node_gyro,node_magn,node_gps,node_sensors toneBlue
class node_apogee,node_sdcard toneAmber
class node_deploy1,node_deploy2 toneMint
class node_protocol,node_sd,node_morse toneRose
class node_eeprom,node_movingavg,node_board,node_sensorhw,node_recoveryhw,node_serial toneIndigo
```

## Components

### Sensing

- [Barometers](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Baro/Baro.cpp): `src/lib/Baro/Baro.cpp`
- [BMP085 driver](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP085/BMP085.cpp): `src/lib/BMP085/BMP085.cpp`
- [BMP280 driver](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP280/BMP280.cpp): `src/lib/BMP280/BMP280.cpp`
- [BMP388 driver](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/BMP388/BMP388.cpp): `src/lib/BMP388/BMP388.cpp`
- [Accelerometers](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Accel/Accel.cpp): `src/lib/Accel/Accel.cpp`
- [Gyroscopes](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Gyro/Gyro.cpp): `src/lib/Gyro/Gyro.cpp`
- [Magnetometers](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Magn/Magn.cpp): `src/lib/Magn/Magn.cpp`
- [GPS receiver](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/GyGPS/GyGPS.cpp): `src/lib/GyGPS/GyGPS.cpp`
- [Sensor aggregation](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Sens/Sens.cpp): `src/lib/Sens/Sens.cpp`

### Flight logic

- [Apogee detection](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Apogeu/Apogeu.cpp): `src/lib/Apogeu/Apogeu.cpp`

### Recovery

- [Single deployment](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/MonoDeploy/MonoDeploy.cpp): `src/lib/MonoDeploy/MonoDeploy.cpp`
- [Dual deployment](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/DuDeploy/DuDeploy.cpp): `src/lib/DuDeploy/DuDeploy.cpp`

### Telemetry and logging

- [Serial protocol](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/ComProtocol/ComProtocol.cpp): `src/lib/ComProtocol/ComProtocol.cpp`
- [SD logging](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/SDCH/SDCH.cpp): `src/lib/SDCH/SDCH.cpp`
- [Morse signaling](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/Morse/Morse.cpp): `src/lib/Morse/Morse.cpp`

### Platform utilities

- [EEPROM records](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/EEDataRegister/EEDataRegister.h): `src/lib/EEDataRegister/EEDataRegister.h`
- [Moving average](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/MovingAverage/MovingAverage.cpp): `src/lib/MovingAverage/MovingAverage.cpp`
- [Board pin maps](https://github.com/ufabcrocketdesign/embedded_system/blob/master/src/lib/pinos.h): `src/lib/pinos.h`

### Other components

- **Sensor hardware**
- **Recovery hardware**
- **Serial endpoint**
- **SD card**

## Connections

- BMP085 driver → Barometers: inherits
- BMP280 driver → Barometers: inherits
- BMP388 driver → Barometers: inherits
- BMP085 driver → Sensor hardware: reads via Wire
- BMP280 driver → Sensor hardware: reads via Wire
- BMP388 driver → Sensor hardware: reads via Wire
- Apogee detection → EEPROM records: loads and saves
- Single deployment → Recovery hardware: drives pins
- Dual deployment → Recovery hardware: drives pins
- Serial protocol → Serial endpoint: reads and writes
- SD logging → SD card: logs data
- Moving average → Sensor hardware
