# emilianohatim/analizador_tensiometros_aneroides architecture

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

- Interactive diagram: https://gitdiagram.com/emilianohatim/analizador_tensiometros_aneroides
- Repository: https://github.com/emilianohatim/analizador_tensiometros_aneroides

## Overview

This is an ESP-IDF embedded non-invasive blood-pressure analyzer (PNI), with a button-driven display and pressure-measurement modes. The main application initializes inputs and display, handles screen state, samples and calibrates pressure readings, and renders results. The HAL separates ADC, GPIO, battery estimation, OLED rendering, and I2C transport. Sampled excerpts confirm measurement, deflation, leak-test, and release screens; hysteresis is also referenced in navigation. Other mode details and wiring are limited by partial excerpts, so uncertain links are omitted.

Main entry points: [`main/main.c`](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c) (Screen controller), [`HAL_PROPIA/src/hal_adc.c`](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_adc.c) (ADC interface), [`HAL_PROPIA/src/hal_ssd1306.c`](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_ssd1306.c) (OLED renderer), [`HAL_PROPIA/src/hal_i2c.c`](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_i2c.c) (I2C transport)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_app["Analyzer application"]
  node_application["Screen controller<br/>[main.c]"]
  node_measure["Pressure measurement<br/>[main.c]"]
  node_deflation["Deflation analysis<br/>[main.c]"]
  node_leak_test["Leak testing<br/>[main.c]"]
  node_release["Pressure release<br/>[main.c]"]
  node_hysteresis["Hysteresis mode<br/>[main.c]"]
end

subgraph group_io["Hardware interfaces"]
  node_adc["ADC interface<br/>[hal_adc.c]"]
  node_gpio["GPIO interface<br/>[hal_gpio.c]"]
  node_battery["Battery estimator<br/>[hal_bateria.c]"]
end

subgraph group_display["Display transport"]
  node_ssd1306["OLED renderer<br/>[hal_ssd1306.c]"]
  node_i2c["I2C transport<br/>[hal_i2c.c]"]
end

node_operator(("Operator"))
node_buttons(("Control buttons"))
node_pressure_sensor(("Pressure sensor"))
node_oled_device(("OLED display"))

node_operator -->|"operates"| node_buttons
node_application -->|"reads buttons"| node_gpio
node_buttons -->|"button signals"| node_gpio
node_application -->|"samples pressure"| node_adc
node_pressure_sensor -->|"analog signal"| node_adc
node_application -->|"dispatches"| node_measure
node_application -->|"dispatches"| node_deflation
node_application -->|"dispatches"| node_leak_test
node_application -->|"dispatches"| node_release
node_application -->|"dispatches"| node_hysteresis
node_application -->|"draws screens"| node_ssd1306
node_ssd1306 -->|"writes display data"| node_i2c
node_i2c -->|"transmits"| node_oled_device
node_battery -->|"reads voltage"| node_adc

click node_application "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c"
click node_measure "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c"
click node_deflation "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c"
click node_leak_test "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c"
click node_release "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c"
click node_hysteresis "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c"
click node_adc "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_adc.c"
click node_gpio "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_gpio.c"
click node_battery "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_bateria.c"
click node_ssd1306 "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_ssd1306.c"
click node_i2c "https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_i2c.c"

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_application,node_measure,node_deflation,node_leak_test,node_release,node_hysteresis toneBlue
class node_adc,node_gpio,node_battery toneAmber
class node_ssd1306,node_i2c toneMint
class node_operator,node_buttons,node_pressure_sensor,node_oled_device toneIndigo
```

## Components

### Analyzer application

- [Screen controller](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c): `main/main.c`
- [Pressure measurement](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c): `main/main.c`
- [Deflation analysis](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c): `main/main.c`
- [Leak testing](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c): `main/main.c`
- [Pressure release](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c): `main/main.c`
- [Hysteresis mode](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/main/main.c): `main/main.c`

### Hardware interfaces

- [ADC interface](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_adc.c): `HAL_PROPIA/src/hal_adc.c`
- [GPIO interface](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_gpio.c): `HAL_PROPIA/src/hal_gpio.c`
- [Battery estimator](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_bateria.c): `HAL_PROPIA/src/hal_bateria.c`

### Display transport

- [OLED renderer](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_ssd1306.c): `HAL_PROPIA/src/hal_ssd1306.c`
- [I2C transport](https://github.com/emilianohatim/analizador_tensiometros_aneroides/blob/master/HAL_PROPIA/src/hal_i2c.c): `HAL_PROPIA/src/hal_i2c.c`

### Other components

- **Operator**
- **Control buttons**
- **Pressure sensor**
- **OLED display**

## Connections

- Operator → Control buttons: operates
- Screen controller → GPIO interface: reads buttons
- Control buttons → GPIO interface: button signals
- Screen controller → ADC interface: samples pressure
- Pressure sensor → ADC interface: analog signal
- Screen controller → Pressure measurement: dispatches
- Screen controller → Deflation analysis: dispatches
- Screen controller → Leak testing: dispatches
- Screen controller → Pressure release: dispatches
- Screen controller → Hysteresis mode: dispatches
- Screen controller → OLED renderer: draws screens
- OLED renderer → I2C transport: writes display data
- I2C transport → OLED display: transmits
- Battery estimator → ADC interface: reads voltage
