#include "DHTesp.h"
const int DHT_PIN = 15;
DHTesp dhtSensor;
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);
//eeprom
#include <EEPROM.h>
#define EEPROM_SIZE 64
int address_1 = 0;
int address_2 = 1;
#define upButton 27 // Pin untuk tombol up
#define downButton 14 // Pin untuk tombol down
#define modeButton 12 // Pin untuk tombol mode
#define relayPin 5
const int buttonPin = 2;
int batas_suhu = 20;
int buttonState = 0;
int counter = 0;
unsigned long startMillis;
unsigned long currentMillis;
const unsigned long periodMillis = 1000;
void setup() {
Serial.begin(115200);
pinMode(upButton, INPUT_PULLUP);
pinMode(downButton, INPUT_PULLUP);
pinMode(modeButton, INPUT_PULLUP);
pinMode(relayPin, OUTPUT);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//menginisiasi membaca nilai flag dari eeprom
EEPROM.begin(EEPROM_SIZE);
//Hanya Untuk Simulasi,Comment Jika dialat langsung
EEPROM.write(address_1, counter);
EEPROM.write(address_2, batas_suhu);
EEPROM.commit();
counter = EEPROM.read(address_1);
batas_suhu = EEPROM.read(address_2);
digitalWrite(relayPin, LOW);
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println(F("SSD1306 allocation failed"));
for(;;);
}
delay(500);
display.clearDisplay();
display.setTextColor(WHITE);
}
void loop() {
if (digitalRead(upButton) == LOW) {
batas_suhu++; // Menambah nilai suhu
EEPROM.write(address_2, batas_suhu);
EEPROM.commit();
}
if (digitalRead(downButton) == LOW) {
batas_suhu--; // Mengurangi nilai suhu
EEPROM.write(address_2, batas_suhu);
EEPROM.commit();
}
if (digitalRead(modeButton) == LOW) {
counter++;
EEPROM.write(address_1, counter);
EEPROM.commit();
if (counter > 1) {
counter = 0;
EEPROM.write(address_1, counter);
EEPROM.commit();
}
delay(200);
}
delay(50); // delay untuk debouncing
TempAndHumidity data = dhtSensor.getTempAndHumidity();
if (data.temperature >= batas_suhu && counter == 1) {
digitalWrite(relayPin, HIGH);
}
else if (data.temperature <= batas_suhu && counter == 0) {
digitalWrite(relayPin, HIGH);
}
else {
digitalWrite(relayPin, LOW);
}
// clear display
display.clearDisplay();
// display temperature
display.setTextSize(1);
display.setCursor(0,0);
display.print("Suhu ");
display.setTextSize(1.8);
display.setCursor(0,10);
display.print(data.temperature);
display.print(" ");
display.setTextSize(1);
display.cp437(true);
display.write(167);
display.setTextSize(1);
display.print("C");
// display humidity
display.setTextSize(1);
display.setCursor(0, 30);
display.print("Kelembaban ");
display.setTextSize(1.8);
display.setCursor(0, 40);
display.print(data.humidity);
display.print(" %");
display.setTextSize(1);
display.setCursor(60,0);
display.print("|");
display.setCursor(60,10);
display.print("|");
display.setCursor(60,20);
display.print("|");
display.setCursor(60,30);
display.print("|");
display.setCursor(60,40);
display.print("|");
display.setTextSize(1);
display.setCursor(0,48);
display.print("---------------------");
// display
display.setTextSize(1);
display.setCursor(66,30);
display.print("Batas Suhu :");
display.setCursor(84,40);
display.print(batas_suhu);
display.cp437(true);
display.write(167);
display.setTextSize(1);
display.print("C");
if (counter == 1) {
display.setTextSize(1);
display.setCursor(66,0);
display.print("Mode Batas");
display.setCursor(84,10);
display.print("Atas");
}
else {
display.setTextSize(1);
display.setCursor(66,0);
display.print("Mode Batas");
display.setCursor(84,10);
display.print("Bawah");
}
if (digitalRead(relayPin) == HIGH) {
Serial.println("Kondisi Relay ON");
display.setTextSize(1);
display.setCursor(15,55);
display.print("Kondisi Relay ON");
}
else {
Serial.println("Kondisi Relay OFF");
display.setTextSize(1);
display.setCursor(15,55);
display.print("Kondisi Relay OFF");
}
display.display();
if (counter == 1) {
Serial.println("Mode Atas");
}
else {
Serial.println("Mode Bawah");
}
Serial.println("Temp: " + String(data.temperature, 2) + "°C");
Serial.println("Humidity: " + String(data.humidity, 1) + "%");
Serial.println("Counter : " + String(counter));
Serial.println("Batas : " + String(batas_suhu));
Serial.println("---");
delay(1000);
}