#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
#include "DHTesp.h"
const int DHT_PIN = 33;
DHTesp dhtSensor;
int suhu;
int kelembaban;
//==============dht=======================
#define LDR_PIN 13
int cahaya; //0=gelap 1=terang
//==============ldr=======================
#define DIR_PIN 19
#define STEP_PIN 18
int gerakmundur=0;
int gerakmaju=0;
int stop=0;
//==============motor=====================
const int limitsw_maju=26;
const int limitsw_mundur=27;
const int sensorhujan=14;
//==============limitswitch===============
#define BLYNK_TEMPLATE_ID "TMPL64NWURhPl"
#define BLYNK_TEMPLATE_NAME "Jemuran Otomatis"
#define BLYNK_AUTH_TOKEN "pqAhTmrPNNsjoA8XNGUFhQq6IheeWfUt"
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
char auth[] = BLYNK_AUTH_TOKEN;
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
BlynkTimer timer;
void myTimerEvent()
{
Blynk.virtualWrite(V0, suhu);{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
suhu=data.temperature;
}
Blynk.virtualWrite(V1, kelembaban);{
TempAndHumidity data = dhtSensor.getTempAndHumidity();
kelembaban=data.humidity;
}
//================suhu=================================
if (digitalRead(LDR_PIN) == LOW) {
Blynk.virtualWrite(V3,"Terang");
cahaya=1;
} else {
Blynk.virtualWrite(V3,"Gelap");
cahaya=0;
delay(500);
}
//================ldr===================================
if (digitalRead(sensorhujan) == LOW) {
Blynk.virtualWrite(V2,"Hujan");
} else {
Blynk.virtualWrite(V2,"Tidak Hujan");
delay(500);
}
//================sensor air=============================
}
void setup(){
lcd.init();
lcd.backlight();
lcd.setCursor(0, 0);
lcd.print("JEMURAN OTOMATIS");
delay(1000);
lcd.clear();
//===========lcd======================
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//===========dht22====================
pinMode(LDR_PIN, INPUT);
//===========ldr======================
pinMode(DIR_PIN, OUTPUT);
pinMode(STEP_PIN, OUTPUT);
//==========motor===============
pinMode(limitsw_maju,INPUT_PULLUP);
pinMode(limitsw_mundur,INPUT_PULLUP);
pinMode(sensorhujan, INPUT_PULLUP);
//==========limitswitch=====================
Blynk.begin(auth, ssid, pass);
timer.setInterval(1000L, myTimerEvent);
//==========blynk=====================
}
void maju(){
digitalWrite(DIR_PIN, HIGH);
for (int i = 0; i < 200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2000);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(2000);
}
}
void mundur(){
digitalWrite(DIR_PIN, LOW);
for (int i = 0; i < 200; i++) {
digitalWrite(STEP_PIN, HIGH);
delayMicroseconds(2000);
digitalWrite(STEP_PIN, LOW);
delayMicroseconds(2000);
}
}
void loop(){
lcd.setCursor(0,0);
lcd.print(suhu);
lcd.setCursor(0,1);
lcd.print(kelembaban);
if (digitalRead(LDR_PIN) == LOW) {
lcd.setCursor(5,0);
lcd.print("Terang");
cahaya=1;
} else {
lcd.setCursor(5,0);
lcd.print("Gelap ");
cahaya=0;
delay(500);
}
if (digitalRead(sensorhujan) == LOW) {
lcd.setCursor(5,1);
lcd.print("Hujan ");
} else {
lcd.setCursor(5,1);
lcd.print("Tidak Hujan ");
delay(500);
}
if (cahaya==0 || digitalRead(sensorhujan)==LOW){
gerakmundur=1;
}
if (digitalRead(limitsw_mundur)==LOW){
gerakmundur=0;
}
if (gerakmundur==1){
mundur();
}
if (cahaya==1 && digitalRead(sensorhujan)==HIGH){
gerakmaju=1;
}
if (digitalRead(limitsw_maju)==LOW){
gerakmaju=0;
}
if (gerakmaju==1){
maju();
}
Blynk.run();
timer.run();
}