#include <Wire.h>
#include <DHT.h>
#include <PubSubClient.h>
#include <Arduino.h>
#include <LiquidCrystal_I2C.h>
#define lcd_ADDR 0x27
#define lcd_COLUMNS 16
#define lcd_ROWS 2
LiquidCrystal_I2C lcd(lcd_ADDR, lcd_COLUMNS, lcd_ROWS);
#define PULSE_PIN 35
#define redLEDPin 12
#define greenLEDPin 14
int minHeartRate = 60;
int maxHeartRate = 100;
void setup() {
lcd.init();
lcd.backlight();
Wire.begin(23, 22);
Serial.begin(115200);
lcd.print("Heart Monitor");
pinMode(redLEDPin, OUTPUT);
pinMode(greenLEDPin, OUTPUT);
}
void loop() {
// Read pulseValue from PULSE_PIN
int16_t pulseValue = analogRead(PULSE_PIN);
// Convert pulseValue to voltage
float voltage = pulseValue * (5 / 4095.0);
// calculate heartRate from voltage
int heartRate = (voltage / 3.3) * 675;
if (heartRate < minHeartRate){
lcd.clear();
lcd.print("Heart rate below ");
lcd.setCursor(0, 1);
lcd.print("minimum: ");
lcd.println(heartRate);
lcd.setCursor(13,1);
lcd.print("b/m");
digitalWrite(redLEDPin, HIGH); // Turn on LED
delay(20); // Wait for half of the blink interval
digitalWrite(redLEDPin, LOW); // Turn off LED
delay(20); // Wait for the other half of the blink interval
}
else if (heartRate > maxHeartRate){
lcd.clear();
lcd.print("Heart rate above ");
lcd.setCursor(0, 1);
lcd.print("maximum: ");
lcd.println(heartRate);
lcd.setCursor(13,1);
lcd.print("b/m");
digitalWrite(redLEDPin, HIGH); // Turn on LED
delay(20); // Wait for half of the blink interval
digitalWrite(redLEDPin, LOW); // Turn off LED
delay(20); // Wait for the other half of the blink interval
}else{
lcd.clear();
lcd.println("Heart Monitor");
lcd.setCursor(0, 1);
lcd.print("Heart rate:");
lcd.println(heartRate);
lcd.setCursor(13,1);
lcd.println("b/m");
digitalWrite(greenLEDPin, HIGH); // Turn on LED
delay(100); // Wait for half of the blink interval
digitalWrite(greenLEDPin, LOW); // Turn off LED
delay(100); // Wait for the other half of the blink interval
}
delay(1000);
}