#include <LiquidCrystal.h>
LiquidCrystal lcd(12,11,5,4,3,2);
// IV DRIP
int dripButton = 7;
int dripCount = 0;
// HEART
int heartButton = 6;
int beatCount = 0;
int bpm = 0;
// BUZZER
int buzzer = 8;
// STATES
int lastDripState = HIGH;
int lastHeartState = HIGH;
unsigned long lastTime = 0;
void setup() {
pinMode(dripButton, INPUT_PULLUP);
pinMode(heartButton, INPUT_PULLUP);
pinMode(buzzer, OUTPUT);
Serial.begin(9600);
lcd.begin(16,2);
lcd.setCursor(0,0);
lcd.print("ICU Monitor");
delay(2000);
lcd.clear();
lcd.setCursor(0,0);
lcd.print("D:0");
lcd.setCursor(0,1);
lcd.print("HR:0");
lastTime = millis();
}
void loop() {
int dripState = digitalRead(dripButton);
int heartState = digitalRead(heartButton);
// ===== IV DRIP =====
if(dripState == LOW && lastDripState == HIGH){
dripCount++;
// تحديث فوري للشاشة
lcd.setCursor(2,0);
lcd.print(" ");
lcd.setCursor(2,0);
lcd.print(dripCount);
delay(200);
}
lastDripState = dripState;
// ===== HEART =====
if(heartState == LOW && lastHeartState == HIGH){
beatCount++;
// ECG simulation لـ Serial Plotter
Serial.println(700);
delay(50);
Serial.println(300);
delay(200);
}
lastHeartState = heartState;
// ===== تحديث كل دقيقة =====
if(millis()-lastTime >= 60000){
bpm = beatCount;
// تحديث HR
lcd.setCursor(3,1);
lcd.print(" ");
lcd.setCursor(3,1);
lcd.print(bpm);
// تشخيص القلب
lcd.setCursor(8,1);
if(bpm < 60){
lcd.print("LOW ");
}
else if(bpm > 100){
lcd.print("HIGH");
}
else{
lcd.print("NORM");
}
// إنذار المحلول فقط
if(dripCount < 20 || dripCount > 60){
tone(buzzer,1000,300);
lcd.setCursor(10,0);
lcd.print("ALRT");
}
else{
lcd.setCursor(10,0);
lcd.print(" OK ");
}
// إعادة للدورة الجديدة
dripCount = 0;
beatCount = 0;
lastTime = millis();
}
}