#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
const int pulsePin = A0;
int sensorValue = 0;
int bpm = 0;
unsigned long lastBeatTime = 0;
int threshold = 500;
void setup() {
// Initialize Serial Monitor
Serial.begin(9600);
// Initialize OLED display
if (!display.begin(SSD1306_I2C_ADDRESS, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for (;;);
}
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println(F("Heartbeat Monitor"));
display.display();
delay(2000);
}
void loop() {
sensorValue = analogRead(pulsePin);
if (sensorValue > threshold) {
unsigned long currentTime = millis();
bpm = 60000 / (currentTime - lastBeatTime);
lastBeatTime = currentTime;
display.clearDisplay();
display.setCursor(0, 0);
display.println(F("Heartbeat Monitor"));
display.setCursor(0, 20);
display.print(F("BPM: "));
display.print(bpm);
display.display();
Serial.print("BPM: ");
Serial.println(bpm);
}
delay(100); // Sampling delay
}