#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();
}