#include "U8glib.h"
U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_DEV_0 | U8G_I2C_OPT_NO_ACK | U8G_I2C_OPT_FAST); // Fast I2C / TWI
float Ontime=1.0;
int Offtime=2,cycle=20,cycletag;
boolean state=false,RelayState=true;
int progress = 0,option=0;
const int BTN01 = 2;
const int BTN02 = 3;
const int BTN03 = 4;
const int BTN04 = 5;
const int Relay01 = 13;
unsigned long Time,Time1;
void setup() {
for(int x=2;x<6;x++)pinMode(x, INPUT_PULLUP);
pinMode(6,OUTPUT);
digitalWrite(6, HIGH);
u8g.setFont(u8g_font_tpssb);
u8g.setColorIndex(1);
for(int x=0;x<110;x+=10){
u8g.firstPage();
do {
u8g.drawStr(10, 10, "VLab2");
u8g.drawStr(25, 60, "Loading......");
u8g.drawFrame(0, 20, 128, 30);
u8g.drawBox(10, 25, x, 20);
} while ( u8g.nextPage() );
}
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(10, 10, "VLab2");
u8g.setFont(u8g_font_profont10);
u8g.drawStr(20, 22, "ON : Sec");
u8g.drawStr(20, 34, "OFF: Sec");
u8g.drawStr(20, 46, "Cycle:");
u8g.setPrintPos(55, 22);
u8g.print(Ontime,1);
u8g.setPrintPos(55, 34);
u8g.print(Offtime);
u8g.setPrintPos(55, 46);
u8g.print(cycle);
} while ( u8g.nextPage() );
}
void loop() {
if(!digitalRead(BTN01)){
delay(500);
if(!digitalRead(BTN01)){
setting();
}
}
if(!digitalRead(BTN02)){
delay(50);
if(!digitalRead(BTN02)){
state=true;
Time=millis();
cycletag=cycle;
//int cycletag1;
digitalWrite(Relay01, LOW);
while(cycletag){
SetDisplay();
if((millis()-Time)>(Ontime*1000)&&RelayState==true){
digitalWrite(Relay01, HIGH);
RelayState=false;
Time=millis();
}
if((millis()-Time)>(Offtime*1000)&&RelayState==false){
digitalWrite(Relay01, LOW);
RelayState=true;
Time=millis();
cycletag--;
}
if(!digitalRead(BTN02)){
delay(100);
if(!digitalRead(BTN02)){
state=false;
digitalWrite(Relay01, HIGH);
RelayState=true;
cycletag=0;
SetDisplay();
}}
}
state=false;
digitalWrite(Relay01, HIGH);
RelayState=true;
SetDisplay();
}
}
}
void SetDisplay()
{
u8g.firstPage();
do {
u8g.setFont(u8g_font_tpssb);
u8g.drawStr(10, 10, "VLab2");
u8g.setFont(u8g_font_profont10);
u8g.drawStr(20, 22, "ON : Sec");
u8g.drawStr(20, 34, "OFF: Sec");
u8g.drawStr(20, 46, "Cycle:");
if(state){
u8g.drawStr(0, 60, "In-progress: cycles done");
u8g.setPrintPos(60, 60);
{u8g.setFont(u8g_font_profont10);
u8g.print(cycle-cycletag);}
}
Menuitem();
if(option==1)u8g.setColorIndex(false);
u8g.setPrintPos(55, 22);
{
u8g.setFont(u8g_font_profont10);
u8g.print(Ontime,1);
}
u8g.setColorIndex(true);
if(option==2)u8g.setColorIndex(false);
u8g.setPrintPos(55, 34);
{
u8g.setFont(u8g_font_profont10);
u8g.print(Offtime);
}
u8g.setColorIndex(true);
if(option==3)u8g.setColorIndex(false);
u8g.setPrintPos(55, 46);
{
u8g.setFont(u8g_font_profont10);
u8g.print(cycle);
}
u8g.setColorIndex(true);
} while ( u8g.nextPage() );
}
int key()
{
int Kval=0;
if(!digitalRead(BTN03)){
delay(30);
if(!digitalRead(BTN03)){
Kval=1;
}
}
else if(!digitalRead(BTN04)){
delay(30);
if(!digitalRead(BTN04)){
Kval=2;
}
}
else if(!digitalRead(BTN02)){
delay(30);
if(!digitalRead(BTN02)){
option=0;
Kval=3;
}
}
return Kval;
}
void Menuitem()
{
switch(option){
case 1:{
u8g.drawBox(53,14,32,10);
break;
}
case 2:{
u8g.drawBox(53,26,32,10);
break;
}
case 3:{
u8g.drawBox(53,38,32,10);
break;
}
}
}
void setting()
{
while(key()!=3)
{
switch(option){
case 1 :{
if(key()==1){
Ontime+=0.5;
if(Ontime>60.5)Ontime=60.5;
}
if(key()==2){
Ontime-=0.5;
if(Ontime<0.5)Ontime=0.5;
}
break;
}
case 2 :{
if(key()==1){
Offtime+=1;
if(Offtime>3600)Offtime=3600;
}
if(key()==2){
Offtime-=1;
if(Offtime<1)Offtime=1;
}
break;
}
case 3 :{
if(key()==1){
cycle+=1;
if(cycle>100)cycle=100;
}
if(key()==2){
cycle-=1;
if(cycle<1)cycle=1;
}
break;
}
}
SetDisplay();
if(!digitalRead(BTN01)){
delay(500);
if(!digitalRead(BTN01)){
option++;
if(option>3)option=1;
} }
}
SetDisplay();
delay(500);
}