#include "DHTesp.h" // Library untuk sensor DHT
#include <LiquidCrystal_I2C.h>
#include <WiFi.h> // Library untuk koneksi WiFi
#include "ThingSpeak.h" // Library untuk ThingSpeak
#include <Keypad.h> // Library untuk keypad
// Definisikan pin dan variabel WiFi
const int DHT_PIN = 15;
const int RedLED = 5;
const int GreenLED = 18;
const int Buzzer = 2;
const char* WIFI_NAME = "Wokwi-GUEST";
const char* WIFI_PASSWORD = "";
const int myChannelNumber = 2724876;
const char* myWriteApiKey = "PVCT1KLKYKTJITT0";
const char* server = "api.thingspeak.com";
// Konfigurasi keypad 4x4
const byte ROWS = 4;
const byte COLS = 4;
char keys[ROWS][COLS] = {
{'1', '2', '3', 'A'},
{'4', '5', '6', 'B'},
{'7', '8', '9', 'C'},
{'*', '0', '#', 'D'}
};
// Pin baru untuk keypad agar tidak bentrok dengan LCD
byte rowPins[ROWS] = {33, 32, 13, 12}; // Pin baris pada keypad
byte colPins[COLS] = {25, 26, 27, 14}; // Pin kolom pada keypad
Keypad keypad = Keypad(makeKeymap(keys), rowPins, colPins, ROWS, COLS);
// Inisialisasi LCD, sensor, dan WiFi
DHTesp dhtSensor;
LiquidCrystal_I2C lcd(0x27, 20, 4);
WiFiClient client;
int count = 0, nomer_pasien = 0;
String id = "";
String nama_pasien;
String ruangan;
float temp, hum;
void setup() {
Serial.begin(115200);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
pinMode(RedLED, OUTPUT);
pinMode(GreenLED, OUTPUT);
pinMode(Buzzer, OUTPUT);
lcd.init();
lcd.backlight();
// Koneksi ke WiFi
WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nConnected to WiFi!");
Serial.println("Local IP: " + String(WiFi.localIP()));
ThingSpeak.begin(client);
lcd.setCursor(0, 1);
lcd.print("PENDATAAN SUHU RFID");
delay(2000);
lcd.clear();
}
void loop() {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
temp = data.temperature;
hum = data.humidity;
// Tampilkan suhu dan kelembapan tanpa angka di belakang koma
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print((int)temp); // Menampilkan suhu sebagai integer
lcd.print(" C ");
lcd.print("Hum: ");
lcd.print((int)hum); // Menampilkan kelembapan sebagai integer
lcd.print(" %");
lcd.setCursor(0, 1);
lcd.print("ID: ");
lcd.setCursor(4, 1);
lcd.print(id);
// Baca input dari keypad
char key = keypad.getKey();
if (key) {
if (key == '#') { // Tombol '#' sebagai Enter
data_pasien(); // Cek ID setelah selesai input
id = ""; // Reset ID setelah pengecekan
} else if (key == '*') {
id = ""; // Tombol '*' untuk clear/reset ID
lcd.setCursor(4, 1);
lcd.print(" "); // Hapus ID yang ditampilkan di LCD
} else {
id += key; // Tambahkan karakter ke ID
lcd.setCursor(4, 1);
lcd.print(id); // Tampilkan ID pada LCD
}
}
// Baca input dari Serial Monitor
if (Serial.available() > 0) {
char serialInput = Serial.read();
if (serialInput == '\n') { // Saat Enter ditekan
data_pasien(); // Cek ID setelah selesai input
id = ""; // Reset ID setelah pengecekan
} else {
id += serialInput; // Tambahkan karakter ke ID dari Serial
lcd.setCursor(4, 1);
lcd.print(id); // Tampilkan ID pada LCD
}
}
delay(500);
}
void kirimdata() {
delay(100);
ThingSpeak.setField(nomer_pasien, temp);
ThingSpeak.writeFields(myChannelNumber, myWriteApiKey);
lcd.setCursor(0, 2);
lcd.print("Name: ");
lcd.print(nama_pasien);
lcd.setCursor(0, 3);
lcd.print("Room: ");
lcd.print(ruangan);
digitalWrite(GreenLED, HIGH);
delay(5000);
digitalWrite(GreenLED, LOW);
lcd.clear();
}
void data_pasien() {
if (id == "D28069401A9") {
nomer_pasien = 1;
nama_pasien = "Kipli";
ruangan = "Room A";
kirimdata();
} else if (id == "B200019060C") {
nomer_pasien = 2;
nama_pasien = "Dewi";
ruangan = "Room A";
kirimdata();
} else if (id == "D46C8B40F3A") {
nomer_pasien = 3;
nama_pasien = "Bisma";
ruangan = "Room B";
kirimdata();
} else if (id == "B7101B76894") {
nomer_pasien = 4;
nama_pasien = "Dimas";
ruangan = "Room B";
kirimdata();
} else if (id == "1C8159073AD") {
nomer_pasien = 5;
nama_pasien = "Rahma";
ruangan = "Room C";
kirimdata();
} else if (id == "B710D018602") {
nomer_pasien = 6;
nama_pasien = "Rahli";
ruangan = "Room C";
kirimdata();
} else {
Serial.println("Invalid Card");
lcd.setCursor(0, 2);
lcd.print("CARD: INVALID");
lcd.setCursor(0, 3);
lcd.print("NAME: UNKNOWN ");
digitalWrite(RedLED, HIGH);
digitalWrite(Buzzer, HIGH);
tone(Buzzer, 262, 1500); // Tambahkan nada
delay(1500);
digitalWrite(Buzzer, LOW);
digitalWrite(RedLED, LOW);
lcd.clear();
}
}