#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#define DHTPIN 4 // Pin data sensor DHT22 terhubung ke pin 4
#define DHTTYPE DHT22 // Tipe sensor DHT (DHT22)
#define BUZZER_PIN 19 // Pin untuk Buzzer
#define GREEN_LED_PIN 18 // Pin untuk LED Hijau
#define RED_LED_PIN 17 // Pin untuk LED Merah
DHT dht(DHTPIN, DHTTYPE); // Inisialisasi sensor DHT22
LiquidCrystal_I2C lcd(0x27, 20, 4); // Alamat I2C LCD 20x4 (0x27)
const char *ssid = "Wokwi-GUEST"; // Ganti dengan SSID WiFi Anda
const char *password = ""; // Ganti dengan password WiFi Anda
const char *host = "api.thingspeak.com"; // Host Thingspeak
const char *apiKey = "GW22386EECHTI1S8"; // Ganti dengan API key Thingspeak Anda
const int MyChannelNumber = 2518105;
// Struktur untuk menyimpan ID kartu dan nama pasien
struct Patient {
String cardID;
String name;
};
// Daftar pasien
Patient patients[] = {
{"AB12CD", "John Doe"},
{"EF34GH", "Jane Smith"},
{"IJ56KL", "Michael Johnson"},
{"MN78OP", "Emily Brown"},
{"QR90ST", "David Wilson"},
{"UV12WX", "Sarah Taylor"}
};
int numPatients = 6;
void setup() {
Serial.begin(115200);
lcd.begin(20, 4); // Inisialisasi LCD 20x4
dht.begin(); // Inisialisasi sensor DHT22
pinMode(BUZZER_PIN, OUTPUT);
pinMode(GREEN_LED_PIN, OUTPUT);
pinMode(RED_LED_PIN, OUTPUT);
WiFi.begin(ssid, password); // Mulai koneksi WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi..");
}
Serial.println("Connected to WiFi");
lcd.print("WiFi Connected");
lcd.setCursor(0, 1);
lcd.print("IP Address:");
lcd.setCursor(0, 1);
lcd.print(WiFi.localIP());
delay(2000);
lcd.clear();
}
void loop() {
lcd.setCursor(0, 1);
lcd.print("Tap ID card");
Serial.println("Masukkan No ID:");
while (Serial.available() == 0) {
delay(100);
}
String input = Serial.readStringUntil('\n');
input.trim(); // Menghapus karakter spasi di awal dan akhir string
lcd.clear();
lcd.setCursor(6, 1);
lcd.print("ID Card: ");
lcd.print(input);
// Kirim data ke Thingspeak dan kontrol LED dan buzzer
if (sendToThingspeak(input)) {
digitalWrite(GREEN_LED_PIN, HIGH);
digitalWrite(RED_LED_PIN, LOW);
tone(BUZZER_PIN, 1000, 1000);
delay(2000);
noTone(BUZZER_PIN);
Serial.println("Valid");
lcd.setCursor(6, 1);
lcd.print("Status: Valid");
} else {
digitalWrite(RED_LED_PIN, HIGH);
digitalWrite(GREEN_LED_PIN, LOW);
noTone(BUZZER_PIN);
Serial.println("Invalid");
lcd.setCursor(6, 1);
lcd.print("Status: Invalid");
}
delay(2000);
lcd.clear();
}
bool sendToThingspeak(String data) {
for (int i = 0; i < numPatients; i++) {
if (data == patients[i].cardID) {
WiFiClient client;
if (client.connect(host, 80)) {
String url = "/update";
String postData = "api_key=" + String(apiKey) + "&field1=" + patients[i].name;
client.println("POST " + url + " HTTP/1.1");
client.println("Host: " + String(host));
client.println("Connection: close");
client.println("Content-Type: application/x-www-form-urlencoded");
client.print("Content-Length: ");
client.println(postData.length());
client.println();
client.print(postData);
Serial.println("Sending data to Thingspeak...");
while (client.connected()) {
if (client.available()) {
String line = client.readStringUntil('\r');
Serial.println(line);
}
}
client.stop();
Serial.println("Data sent successfully");
return true; // Mengembalikan true jika pengiriman berhasil
} else {
Serial.println("Failed to connect to Thingspeak");
return false; // Mengembalikan false jika pengiriman gagal
}
}
}
Serial.println("Invalid card ID");
return false; // Mengembalikan false jika ID kartu tidak valid
}