#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// LCD setup (assuming 16x2 display on I2C address 0x27)
LiquidCrystal_I2C lcd(0x27, 16, 2);
const int buttonP1 = 2; // Patient 1 Button
const int buttonP2 = 3; // Patient 2 Button
const int nurseLED = 4; // Nurse LED
const int nurseBuzzer = 5; // Nurse Buzzer
const int nurseResponse = 6; // Nurse Response Button
int requestCountP1 = 0; // Request counter for Patient 1
int requestCountP2 = 0; // Request counter for Patient 2
bool alertActive = false; // Check if alert is active
void setup() {
// Initialize LCD
lcd.begin(16, 2);
lcd.backlight();
// Pin setup
pinMode(buttonP1, INPUT_PULLUP);
pinMode(buttonP2, INPUT_PULLUP);
pinMode(nurseLED, OUTPUT);
pinMode(nurseBuzzer, OUTPUT);
pinMode(nurseResponse, INPUT_PULLUP);
// Initialize outputs
digitalWrite(nurseLED, LOW);
digitalWrite(nurseBuzzer, LOW);
// Welcome message
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Sistem Darurat");
delay(1000);
lcd.clear();
}
void loop() {
// Check if Patient 1 pressed the button
if (digitalRead(buttonP1) == LOW) {
tone(nurseBuzzer, 1000);
requestCountP1++;
triggerAlert("Patient 01", requestCountP1);
}
// Check if Patient 2 pressed the button
if (digitalRead(buttonP2) == LOW) {
tone(nurseBuzzer, 1000);
requestCountP2++;
triggerAlert("Patient 02", requestCountP2);
}
// Nurse response button to stop the alert
if (alertActive && digitalRead(nurseResponse) == LOW) {
noTone(nurseBuzzer);
stopAlert();
}
delay(200); // Debounce delay
}
// Function to activate alert
void triggerAlert(const char* patient, int count) {
alertActive = true;
// Display patient request on LCD
lcd.clear();
lcd.setCursor(0, 0);
lcd.print(patient);
lcd.setCursor(0, 1);
lcd.print("Requests: ");
lcd.print(count);
// Activate LED and buzzer
digitalWrite(nurseLED, HIGH);
digitalWrite(nurseBuzzer, LOW);
}
// Function to deactivate alert
void stopAlert() {
alertActive = false;
requestCountP1 = 0;
requestCountP2 = 0;
// Turn off LED and buzzer
digitalWrite(nurseLED, LOW);
digitalWrite(nurseBuzzer, HIGH);
// Clear LCD after nurse responds
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Assistance Given");
delay(2000);
lcd.clear();
}