# salsabila221/geosense-node architecture

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

- Interactive diagram: https://gitdiagram.com/salsabila221/geosense-node
- Repository: https://github.com/salsabila221/geosense-node

## Overview

GeoSense_Node is embedded geophone-monitoring firmware. Its main loop samples an ADS1220, updates STA/LTA event state, analyzes completed waveform windows, then conditionally logs and schedules radio telemetry while refreshing an OLED status display. Configuration and timing utilities support this workflow. The README is empty; edges are grounded in the shown main-loop calls and OLED implementation. Driver internals and several hardware connections are not shown, so those relationships are omitted rather than inferred.

Main entry points: [`GeoSense_Node/src/main.cpp`](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/main.cpp) (Firmware loop), [`GeoSense_Node/src/OLED_UI.cpp`](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/OLED_UI.cpp) (OLED interface), [`GeoSense_Node/src/ADS1220_Driver.cpp`](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/ADS1220_Driver.cpp) (ADS1220 driver), [`GeoSense_Node/src/StaLta_Trigger.cpp`](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/StaLta_Trigger.cpp) (STA/LTA trigger)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_acquisition["Signal acquisition"]
  node_adc["ADS1220 driver<br/>[ADS1220_Driver.cpp]"]
end

subgraph group_processing["Signal processing"]
  node_trigger["STA/LTA trigger<br/>[StaLta_Trigger.cpp]"]
  node_fft["Feature analysis<br/>[FFT_Process.cpp]"]
end

subgraph group_outputs["Telemetry and display"]
  node_packet["JSON packet encoder<br/>[JSON_Packet.cpp]"]
  node_logger["SD logger<br/>[SD_Logger.cpp]"]
  node_radio["LoRa node<br/>[LoRa_Node.cpp]"]
  node_oled["OLED interface<br/>[OLED_UI.cpp]"]
end

subgraph group_firmware["Firmware support"]
  node_loop["Firmware loop<br/>[main.cpp]"]
  node_configuration["Device configuration<br/>[config.h]"]
  node_timers["Periodic timers<br/>[Utility.cpp]"]
  node_timestamp["Timestamp service<br/>[TimeStamp.cpp]"]
end

node_converter["ADS1220 converter"]
node_sdcard[("SD card")]
node_receiver(("LoRa receiver"))
node_panel["OLED panel"]
node_serial(("Serial console"))

node_loop -->|"reads samples"| node_adc
node_loop -->|"updates trigger"| node_trigger
node_loop -->|"analyzes windows"| node_fft
node_loop -->|"builds packets"| node_packet
node_loop -->|"logs features"| node_logger
node_loop -->|"transmits payload"| node_radio
node_loop -->|"updates display"| node_oled
node_loop -->|"checks timers"| node_timers
node_loop -->|"starts clock"| node_timestamp
node_loop -->|"uses settings"| node_configuration
node_loop -->|"prints status"| node_serial
node_oled -->|"draws status"| node_panel

click node_loop "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/main.cpp"
click node_adc "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/ADS1220_Driver.cpp"
click node_trigger "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/StaLta_Trigger.cpp"
click node_fft "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/FFT_Process.cpp"
click node_packet "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/JSON_Packet.cpp"
click node_logger "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/SD_Logger.cpp"
click node_radio "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/LoRa_Node.cpp"
click node_oled "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/OLED_UI.cpp"
click node_configuration "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/include/config.h"
click node_timers "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/Utility.cpp"
click node_timestamp "https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/TimeStamp.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_adc toneBlue
class node_trigger,node_fft,node_sdcard toneAmber
class node_packet,node_logger,node_radio,node_oled toneMint
class node_loop,node_configuration,node_timers,node_timestamp toneRose
class node_converter,node_receiver,node_panel,node_serial toneIndigo
```

## Components

### Signal acquisition

- [ADS1220 driver](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/ADS1220_Driver.cpp): `GeoSense_Node/src/ADS1220_Driver.cpp`

### Signal processing

- [STA/LTA trigger](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/StaLta_Trigger.cpp): `GeoSense_Node/src/StaLta_Trigger.cpp`
- [Feature analysis](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/FFT_Process.cpp): `GeoSense_Node/src/FFT_Process.cpp`

### Telemetry and display

- [JSON packet encoder](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/JSON_Packet.cpp): `GeoSense_Node/src/JSON_Packet.cpp`
- [SD logger](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/SD_Logger.cpp): `GeoSense_Node/src/SD_Logger.cpp`
- [LoRa node](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/LoRa_Node.cpp): `GeoSense_Node/src/LoRa_Node.cpp`
- [OLED interface](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/OLED_UI.cpp): `GeoSense_Node/src/OLED_UI.cpp`

### Firmware support

- [Firmware loop](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/main.cpp): `GeoSense_Node/src/main.cpp`
- [Device configuration](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/include/config.h): `GeoSense_Node/include/config.h`
- [Periodic timers](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/Utility.cpp): `GeoSense_Node/src/Utility.cpp`
- [Timestamp service](https://github.com/salsabila221/geosense-node/blob/main/GeoSense_Node/src/TimeStamp.cpp): `GeoSense_Node/src/TimeStamp.cpp`

### Other components

- **ADS1220 converter**
- **SD card**
- **LoRa receiver**
- **OLED panel**
- **Serial console**

## Connections

- Firmware loop → ADS1220 driver: reads samples (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → STA/LTA trigger: updates trigger (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → Feature analysis: analyzes windows (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → JSON packet encoder: builds packets (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → SD logger: logs features (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → LoRa node: transmits payload (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → OLED interface: updates display (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → Periodic timers: checks timers (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → Timestamp service: starts clock (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → Device configuration: uses settings (evidence: `GeoSense_Node/src/main.cpp`)
- Firmware loop → Serial console: prints status (evidence: `GeoSense_Node/src/main.cpp`)
- OLED interface → OLED panel: draws status (evidence: `GeoSense_Node/src/OLED_UI.cpp`)
