#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include "DHTesp.h"
// Inisialisasi LCD I2C (alamat 0x27, ukuran 20x4)
LiquidCrystal_I2C lcd(0x27, 20, 4);
// Inisialisasi DHT22
#define DHTPIN 15 // Pin untuk DHT22
DHTesp dht; // Gunakan DHTesp untuk DHT22
// Daftar ID pasien yang valid
const String validIDs[] = {
"P001", "P002", "P003", "P004", "P005"
};
const int numValidIDs = sizeof(validIDs) / sizeof(validIDs[0]);
// Pin untuk LED dan buzzer
const int LED_HIJAU = 17;
const int LED_MERAH = 16;
const int BUZZER = 5;
void setup() {
// Inisialisasi LCD, Serial, DHT, dan pin
lcd.begin(20, 4);
lcd.backlight(); // Menyalakan backlight
Serial.begin(9600);
dht.setup(DHTPIN, DHTesp::DHT22); // Setup DHT dengan jenis DHT22
pinMode(LED_HIJAU, OUTPUT);
pinMode(LED_MERAH, OUTPUT);
pinMode(BUZZER, OUTPUT);
lcd.clear();
lcd.print("Masukkan ID:");
}
void loop() {
if (Serial.available() > 0) {
String inputID = Serial.readStringUntil('\n'); // Membaca input hingga newline
inputID.trim(); // Menghapus spasi di awal dan akhir
lcd.clear(); // Membersihkan LCD
delay(100); // Tambahkan sedikit delay setelah clear
bool idValid = isValidID(inputID);
if (idValid) {
lcd.print("ID Valid: ");
lcd.print(inputID);
digitalWrite(LED_HIJAU, HIGH); // Nyalakan LED hijau
digitalWrite(LED_MERAH, LOW); // Matikan LED merah
tone(BUZZER, 1000, 500); // Bunyi buzzer selama 500ms
Serial.print("ID pasien ");
Serial.print(inputID);
Serial.println(" adalah valid.");
} else {
lcd.print("ID Tidak Valid");
lcd.setCursor(0, 1);
lcd.print(inputID);
digitalWrite(LED_HIJAU, LOW); // Matikan LED hijau
digitalWrite(LED_MERAH, HIGH); // Nyalakan LED merah
Serial.print("ID pasien ");
Serial.print(inputID);
Serial.println(" adalah tidak valid.");
}
// Membaca suhu dan kelembapan dari DHT22
float suhu = dht.getTemperature(); // Ambil suhu
float kelembapan = dht.getHumidity(); // Ambil kelembapan
// Cek jika pembacaan berhasil
if (isnan(suhu) || isnan(kelembapan)) {
Serial.println("Gagal membaca dari DHT sensor!");
lcd.setCursor(0, 2);
lcd.print("Gagal baca sensor");
} else {
// Menampilkan suhu dan kelembapan pada baris ketiga dan keempat LCD
lcd.setCursor(0, 2);
lcd.print("Suhu: ");
lcd.print(suhu);
lcd.print(" C");
lcd.setCursor(0, 3);
lcd.print("Kelembapan: ");
lcd.print(kelembapan);
lcd.print(" %");
// Menampilkan data suhu dan kelembapan di serial monitor
Serial.print("Suhu: ");
Serial.print(suhu);
Serial.print(" °C, Kelembapan: ");
Serial.print(kelembapan);
Serial.println(" %");
}
delay(2000); // Delay sebelum loop berikutnya
}
}
bool isValidID(String id) {
for (int i = 0; i < numValidIDs; i++) {
if (validIDs[i] == id) {
return true; // ID ditemukan
}
}
return false; // ID tidak ditemukan
}