void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
Serial.println("Hello, ESP32!");
}
void loop() {
// put your main code here, to run repeatedly:
delay(10); // this speeds up the simulation
}
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include "MAX30100_PulseOximeter.h"
#define PERIODO_REPORTE_MS 1000
// Definición de constantes
#define ANCHO_PANTALLA 128
#define ALTO_PANTALLA 64
#define RESET_OLED 4 // GPIO4 en el ESP32
// Creación del objeto para la pantalla OLED
Adafruit_SSD1306 pantalla(ANCHO_PANTALLA, ALTO_PANTALLA, &Wire, RESET_OLED);
// Creación del objeto PulseOximeter
PulseOximeter oximetro;
// Tiempo en el que ocurrió el último latido
uint32_t tiempoUltimoReporte = 0;
// Rutina de callback que se ejecuta cuando se detecta un latido
void onLatidoDetectado() {
Serial.println("♥️ Latido!");
}
void setup() {
Serial.begin(115200);
Serial.print("Inicializando oximetro...");
// Inicializar el sensor
if (!oximetro.begin()) {
Serial.println("FALLÓ");
for(;;); // Bucle infinito si falla la inicialización
} else {
Serial.println("ÉXITO");
}
// Inicialización de la pantalla
if (!pantalla.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("No se encuentra la pantalla"));
for (;;); // Detiene la ejecución del programa si no se encuentra la pantalla
}
// Configurar el sensor para usar 7.6mA para el LED
oximetro.setIRLedCurrent(MAX30100_LED_CURR_7_6MA);
// Registrar la rutina de callback
oximetro.setOnBeatDetectedCallback(onLatidoDetectado);
}
void loop() {
// Leer desde el sensor
oximetro.update();
// Obtener la frecuencia cardiaca y los niveles de SpO2 actualizados
if (millis() - tiempoUltimoReporte > PERIODO_REPORTE_MS) {
Serial.print("Frecuencia cardiaca: ");
Serial.print(oximetro.getHeartRate());
Serial.print(" bpm / SpO2: ");
Serial.print(oximetro.getSpO2());
Serial.println(" %");
tiempoUltimoReporte = millis();
}
actualizarOLED();
}
void actualizarOLED() {
pantalla.clearDisplay();
pantalla.setTextSize(1);
pantalla.setTextColor(SSD1306_WHITE);
pantalla.setCursor(0, 0);
pantalla.print("Frecuencia cardiaca: ");
pantalla.print(oximetro.getHeartRate());
pantalla.print(" bpm");
pantalla.setCursor(0, 20);
pantalla.print("SpO2: ");
pantalla.print(oximetro.getSpO2());
pantalla.print(" %");
pantalla.display();
}