#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
#include <WiFi.h>
#include <ThingSpeak.h>
#define DHTPIN 15
#define DHTTYPE DHT22
#define LED_RED 19
#define LED_GREEN 18
#define LDR_PIN 26 // Pin sensor LDR terhubung ke D16
#define BUZZER_PIN 27 // Pin buzzer terhubung ke D17
const char *ssid = "Wokwi-GUEST";
const char *password = "";
const char *thingSpeakApiKey = "3N5PPCPVZO7THQEF";
const char *thingSpeakChannel = "2296328";
WiFiClient client;
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 16, 2);
float previousTemperature = 0.0;
bool showTemperature = false;
bool lightDetected = false;
void setup() {
pinMode(LED_RED, OUTPUT);
pinMode(LED_GREEN, OUTPUT);
pinMode(LDR_PIN, INPUT);
pinMode(BUZZER_PIN, OUTPUT);
dht.begin();
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("Selamat datang");
lcd.setCursor(3, 1);
lcd.print("---------");
delay(5000);
lcd.clear();
lcd.print("Suhu: ");
Serial.begin(115200);
delay(1000);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
ThingSpeak.begin(client);
}
void loop() {
delay(5000);
int ldrValue = analogRead(LDR_PIN);
// Tambahkan logika berdasarkan nilai LDR
if (ldrValue < 500) {
// Jika nilai LDR rendah (cahaya kuat), aktifkan buzzer
digitalWrite(BUZZER_PIN, HIGH);
tone(27, 100, 250); // Plays 262Hz tone for 0.250 seconds
delay(500);
tone(27, 2000, 500); // Plays 262Hz tone for 0.250 seconds
delay(500);
Serial.println("Cahaya terdeteksi!");
lcd.setCursor(15,0);
lcd.print("O");
} else {
// Jika nilai LDR tinggi (cahaya rendah), matikan buzzer
digitalWrite(BUZZER_PIN, LOW);
Serial.println("Cahaya tidak terdeteksi.");
lcd.setCursor(15,0);
lcd.print("X");
}
// Menampilkan animasi loading dengan titik-titik jika tidak ada cahaya terdeteksi
if (!lightDetected) {
lcd.setCursor(0, 1);
for (int i = 0; i < 10; i++) {
lcd.print(".");
delay(100);
}
lcd.setCursor(0, 1);
lcd.print(" ");
}
float temperature = dht.readTemperature();
if (isnan(temperature)) {
Serial.println("Gagal membaca data suhu dari sensor DHT!");
return;
}
Serial.print("Suhu saat ini: ");
Serial.print(temperature);
Serial.println(" °C");
if (temperature != previousTemperature) {
previousTemperature = temperature;
showTemperature = true;
if (temperature > 30.0) {
digitalWrite(LED_RED, HIGH);
digitalWrite(LED_GREEN, LOW);
} else {
digitalWrite(LED_RED, LOW);
digitalWrite(LED_GREEN, HIGH);
}
}
// Menampilkan suhu pada layar LCD
if (showTemperature) {
lcd.setCursor(6, 0);
lcd.print(temperature);
lcd.print(" C");
showTemperature = false;
}
unsigned long channelNumber = atol(thingSpeakChannel);
ThingSpeak.writeField(channelNumber, 1, temperature, thingSpeakApiKey);
ThingSpeak.writeField(channelNumber, 3, ldrValue, thingSpeakApiKey);
delay(5000);
}