#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include<EEPROM.h>

#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels

// Declaration for SSD1306 display connected using I2C
#define OLED_RESET     -1 // Reset pin # (or -1 if sharing Arduino reset pin)
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);


int hrs = 0;
int Min = 0;
int sec = 0;
unsigned int check_val = 50;
int add_chk = 0;
int add_hrs = 1;
int add_min = 2;

int tab,start,stop,spc;
int locktab=0,lockstart=0,lockstop=0,lockspc=0;
int dis=1,sub=0,mode=0,tabmode=0;

const unsigned char epd_bitmap_icons8_recharge_battery_15 [] PROGMEM = {
	0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0xf8, 0x40, 0x08, 0x43, 0x8c, 0x4f, 0x0c, 
	0x43, 0x8c, 0x40, 0x08, 0x7f, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};

void INIT()
{
  hrs = EEPROM.read(add_hrs);
  Min = EEPROM.read(add_min);
  sec = 0;
  display.clearDisplay();
  // Display Text
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(5,10);
  display.print("Start / Set Time");
  display.setTextSize(1);
  display.setCursor(20,42);
  if (hrs <= 9)
  {
    display.print('0');
  }
  display.print(hrs);
  display.print(':');
  if (Min <= 9)
  {
    display.print('0');
  }
  display.print(Min);
  display.print(':');
  if (sec <= 9)
  {
    display.print('0');
  }
  display.print(sec);
  // min_flag = true;
  // hrs_flag = true;
  //delay(500);
  display.display();
  //delay(2000);
  display.clearDisplay();
}

void menu()
{
  hrs = EEPROM.read(add_hrs);
  Min = EEPROM.read(add_min);
  sec = 0;
  display.clearDisplay();
  display.setTextSize(1);
  display.setTextColor(WHITE);
  display.setCursor(5,5);
  display.print("  30.0 Menit");
  display.setTextSize(1.5);
  display.setCursor(5,17);
  display.print("   1.0 Jam");
  display.setTextSize(1.5);
  display.setCursor(5,28);
  display.print("   1.5 Jam");
  display.setTextSize(1.5);
  display.setCursor(5,40);
  display.print("   2.0 Jam");
  display.setTextSize(1.5);
  display.setCursor(5,52);
  display.print("   2.5 Jam");
  // display.display();
  // display.clearDisplay();

}

void setup() {
  // put your setup code here, to run once:
  Serial.begin(9600);
  display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS);
  pinMode(A0, INPUT_PULLUP); //Select Menu
  pinMode(A1, INPUT_PULLUP); //Start
  pinMode(A2, INPUT_PULLUP); //Stop
  pinMode(A3, INPUT_PULLUP); //Spc

  pinMode(4,OUTPUT); //SSR CH1 Sprayer Charger
  pinMode(5,OUTPUT); // SSR Ch2 Dryer Element
  pinMode(6,OUTPUT); // Relay On-Off Sprayer
  // // Clear the buffer.
  display.clearDisplay();

  // Display Text
  display.setTextSize(2.5);
  display.setTextColor(WHITE);
  display.setCursor(5,10);
  display.print(" STEMAYER");
  display.setTextSize(1);
  display.setCursor(20,30);
  display.print("     by");
  // display.setTextSize(1);
  // display.setCursor(20,30);
  // display.print("    image1");
  // display.setTextSize(1);
  // display.setCursor(20,35);
  // display.print("    image2");
  // display.setTextSize(1);
  // display.setCursor(20,40);
  // display.print("    image3");
  display.setTextSize(1);
  display.setCursor(20,45);
  display.print(" STEMATYC SC");
  display.display();
  //delay(2000);
  display.clearDisplay();
  if (EEPROM.read(add_chk) != check_val)
  {
    EEPROM.write(add_chk, check_val);
    EEPROM.write(add_hrs, 0);
    EEPROM.write(add_min, 1);
  }
  else
  {
    hrs = EEPROM.read(add_hrs);
    Min = EEPROM.read(add_min);
  }
  delay(1500);

}

void loop() {
  // put your main code here, to run repeatedly:
  tab= digitalRead(A0); //Selelct Menu
  start= digitalRead(A1); //Start Timer
  stop= digitalRead(A2); //Stop Timer
  spc= digitalRead(A3); //Sprayer Charging On-off
 
  if(dis==1)
  {
    menu();
    digitalWrite(5, LOW);
    if (spc==0 && lockspc==0){lockspc=1;}  //On-off Charging sprayer
    if (spc!=0 && lockspc==1){lockspc=0; mode++;}

    switch(mode)
    {
      case 0: display.drawBitmap(115, 0, epd_bitmap_icons8_recharge_battery_15, 0, 0, WHITE);digitalWrite(4, LOW);break;
      case 1: display.drawBitmap(115, 0, epd_bitmap_icons8_recharge_battery_15, 15, 15, WHITE);digitalWrite(4, HIGH);break;
    }
    if(mode > 1)
    {
      mode=0;
    }
  }
  if (stop==0 && lockstop==0){lockstop=1;}  //Stop
  if (stop!=0 && lockstop==1){lockstop=0; dis=1;}
  

  if (tab==0 && locktab==0){locktab=1;}  //Memilih Menu
  if (tab!=0 && locktab==1){locktab=0; tabmode++;}
   
  switch (tabmode)
  {
    case 0 : display.setTextSize(1);display.setCursor(5,5);display.print(">");break;
    case 1 : display.setTextSize(1);display.setCursor(5,17);display.print(">");break;
    case 2 : display.setTextSize(1);display.setCursor(5,28);display.print(">");break;
    case 3 : display.setTextSize(1);display.setCursor(5,40);display.print(">");break;
    case 4 : display.setTextSize(1);display.setCursor(5,52);display.print(">");break;
  } 
  if (tabmode > 4)
  {
    tabmode = 0;
  }
  else if(tabmode < 0)
  {
    mode = 4;
  }
  
  if (start==0 && lockstart==0)
  {
    lockstart=1;
  } 
  if (start!=0 && lockstart==1 && tabmode==0)
  {
    lockstart=0;dis=2;hrs=0;Min=30;
    EEPROM.write(add_hrs, hrs);
    EEPROM.write(add_min, Min);
  }
  if (start==0 && lockstart==0)
  {
    lockstart=1;
  } 
  if (start!=0 && lockstart==1 && tabmode==1)
  {
    lockstart=0;dis=2;hrs=1;Min=0;
    EEPROM.write(add_hrs, hrs);
    EEPROM.write(add_min, Min);
  }
  if (start==0 && lockstart==0)
  {
    lockstart=1;
  } 
  if (start!=0 && lockstart==1 && tabmode==2)
  {
    lockstart=0;dis=2;hrs=1;Min=30;
    EEPROM.write(add_hrs, hrs);
    EEPROM.write(add_min, Min);
  }
  if (start==0 && lockstart==0)
  {
    lockstart=1;
  } 
  if (start!=0 && lockstart==1 && tabmode==3)
  {
    lockstart=0;dis=2;hrs=2;Min=0;
    EEPROM.write(add_hrs, hrs);
    EEPROM.write(add_min, Min);
  }
  if (start==0 && lockstart==0)
  {
    lockstart=1;
  } 
  if (start!=0 && lockstart==1 && tabmode==4)
  {
    lockstart=0;dis=2;hrs=2;Min=30;
    EEPROM.write(add_hrs, hrs);
    EEPROM.write(add_min, Min);
  }
 
  if(dis==2)
  {
    if (spc==0 && lockspc==0){lockspc=1;}  //On-off Charging sprayer
    if (spc!=0 && lockspc==1){lockspc=0; mode++;}

    switch(mode)
    {
      case 0: display.drawBitmap(115, 0, epd_bitmap_icons8_recharge_battery_15, 0, 0, WHITE);break;
      case 1: display.drawBitmap(115, 0, epd_bitmap_icons8_recharge_battery_15, 15, 15, WHITE);break;
    }
    if(mode > 1)
    {
      mode=0;
    }
    display.clearDisplay();
    digitalWrite(5, HIGH);
    sec = sec - 1;
    delay(1000);
    if (sec == -1)
    {
      sec = 59;
      Min = Min - 1;
    }
    if (Min == -1)
    {
      Min = 59;
      hrs = hrs - 1;
    }
    if (hrs == -1) hrs = 0;
    display.setTextSize(1);
    display.setTextColor(WHITE);
    display.setCursor(5,11);
    display.print("****************");
    display.setTextSize(1);
    display.setCursor(20,42);
    if (hrs <= 9)
    {
      display.print('0');
    }
    display.print(hrs);
    display.print(':');
    if (Min <= 9)
    {
      display.print('0');
    }
    display.print(Min);
    display.print(':');
    if (sec <= 9)
    {
      display.print('0');
    }
    display.print(sec);
    if (hrs == 0 && Min == 0 && sec == 0)
    {
      dis=1;digitalWrite(5, LOW);
    }
  }

  display.display();
  display.clearDisplay();

  

  
  

}


NOCOMNCVCCGNDINLED1PWRRelay Module
NOCOMNCVCCGNDINLED1PWRRelay Module