#include <EEPROM.h>//https://github.com/espressif/arduino-esp32/tree/master/libraries/EEPROM
#include <DHT.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <SPI.h>
#include <Wire.h>
#define DHTPIN A0
#define DHTTYPE DHT22
#define RESET 8
DHT dht(DHTPIN, DHTTYPE);
Adafruit_SSD1306 display = Adafruit_SSD1306(128, 64, &Wire, RESET);
const int lamp = 10;
const int mist = 11;
const int motor = 12;
const int mainBtn = 2;
const int upBtn = 3;
const int downBtn = 4;
int menuChoice;
int setPointSuhu = 30;
int setPointHumid = 30;
int setModePutar = 1;
int motorTimer = 100000;
int suhu;
int humid;
bool state = false;
void setup()
{
Serial.begin(96000);
// put your setup code here, to run once:
pinMode(mist, OUTPUT);
pinMode(lamp, OUTPUT);
pinMode(motor, OUTPUT);
pinMode(mainBtn, INPUT_PULLUP);
pinMode(upBtn, INPUT_PULLUP);
pinMode(downBtn, INPUT_PULLUP);
//setup button
digitalWrite(mainBtn, HIGH);
digitalWrite(upBtn, HIGH);
digitalWrite(downBtn, HIGH);
dht.begin();
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.display();
delay(10);
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
menuChoice = 2;
EEPROM.write(0, setPointSuhu);
EEPROM.write(1, setPointHumid);
EEPROM.write(2, setModePutar);
}
void loop()
{
digitalWrite(motor, LOW);
setModePutar = EEPROM.read(2);
unsigned long presentMillis = millis();
//millis motor
while (millis() - presentMillis <= motorTimer)
{
delay(200);
// read DHT11
suhu = dht.readTemperature();
humid = dht.readHumidity();
// Serial.println(suhu);
//Serial.println(humid);
//
if (digitalRead(mainBtn) == LOW)
{
state = true;
if (menuChoice < 5)
{
menuChoice++;
}
else
{
menuChoice = 1;
}
}
switch (menuChoice)
{
case 1:
setPointSuhu = EEPROM.read(0);
setPointHumid = EEPROM.read(1);
setModePutar = EEPROM.read(2);
if ((state == true) || (suhu == 9))
{
state = false;
display.clearDisplay();
display.display();
}
display.clearDisplay();
display.setTextSize(1.5);
display.setTextColor(WHITE);
display.setCursor(15, 0);
display.print("Temp");
display.setCursor(80, 0);
display.print("Humid");
display.setTextSize(3);
display.setCursor(11, 20);
display.print(suhu);
display.setCursor(76, 20);
display.print(humid);
display.display();
break;
case 2:
if (state == true)
{
state = false;
display.clearDisplay();
display.display();
}
display.clearDisplay();
display.setTextSize(1.5);
display.setTextColor(WHITE);
display.setCursor(40, 0);
display.print("Set Suhu");
display.setTextSize(3);
display.setCursor(48, 20);
display.print(setPointSuhu);
display.display();
break;
case 3:
if (state == true)
{
state = false;
display.clearDisplay();
display.display();
}
display.clearDisplay();
display.setTextSize(1.5);
display.setTextColor(WHITE);
display.setCursor(40, 0);
display.print("Set Humid");
display.setTextSize(3);
display.setCursor(48, 20);
display.print(setPointHumid);
display.display();
break;
case 4:
if (state == true)
{
state = false;
display.clearDisplay();
display.display();
}
display.clearDisplay();
display.setTextSize(1.5);
display.setTextColor(WHITE);
display.setCursor(40, 0);
display.print("Set Motor");
display.setTextSize(3);
display.setCursor(60, 20);
display.print(setModePutar);
display.display();
break;
case 5:
if (state == true)
{
state = false;
display.clearDisplay();
display.display();
}
if((setPointSuhu != EEPROM.read(0)) || (setPointHumid != EEPROM.read(1)) || (setModePutar != EEPROM.read(2))){
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(WHITE);
display.setCursor(10, 20);
display.print("Simpan Perubahan ?");
display.setTextSize(3);
display.display();
if(digitalRead(upBtn) == LOW){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 20);
display.print("Tersimpan");
display.display();
delay(1000);
if(setPointSuhu != EEPROM.read(0)){
EEPROM.write(0, setPointSuhu);
}
if(setPointHumid != EEPROM.read(1)){
EEPROM.write(1, setPointHumid);
}
if(setModePutar != EEPROM.read(2)){
EEPROM.write(2, setModePutar);
}
state = true;
menuChoice = 1;
}
if(digitalRead(downBtn) == LOW){
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 20);
display.print("Dibatalkan");
display.display();
delay(1000);
state = true;
menuChoice = 1;
}
}else{
menuChoice = 1;
}
break;
}
// button set point suhu
if (menuChoice == 2 && digitalRead(upBtn) == LOW)
{
setPointSuhu++;
}
if (menuChoice == 2 && digitalRead(downBtn) == LOW && setPointSuhu > 0)
{
setPointSuhu--;
}
// button set point humidity
if (menuChoice == 3 && digitalRead(upBtn) == LOW)
{
setPointHumid++;
}
if (menuChoice == 3 && digitalRead(downBtn) == LOW && setPointHumid > 0)
{
setPointHumid--;
}
// button set motor mode
if (menuChoice == 4 && digitalRead(upBtn) == LOW)
{
if (setModePutar < 3)
{
setModePutar++;
}
else
{
setModePutar = 1;
}
}
if (menuChoice == 4 && digitalRead(downBtn) == LOW && setModePutar > 0)
{
setModePutar--;
}
// motor mode conditioning
if (setModePutar == 1)
{
motorTimer = 3600000;
}
else if (setModePutar == 2)
{
motorTimer = 3600000*2;
}
else if (setModePutar == 3)
{
motorTimer = 3600000*3;
}
//Pengkondisian Relay
if (suhu > setPointSuhu)
{
digitalWrite(lamp, LOW);
}
else
{
digitalWrite(lamp, HIGH);
}
if (humid > setPointHumid)
{
digitalWrite(mist, LOW);
}
else
{
digitalWrite(mist, HIGH);
}
}
state = true;
display.clearDisplay();
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(5, 20);
display.print("Berputar");
display.display();
digitalWrite(motor, HIGH);
delay(1000);
}