#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);
}
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:GND.2
uno:RESET.2
uno:0
uno:1
uno:13
uno:3.3V
uno:AREF
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
uno:A6
uno:A7
uno:5V
uno:RESET
uno:GND.1
uno:VIN
uno:12.2
uno:5V.2
uno:13.2
uno:11.2
uno:RESET.3
uno:GND.3
ssd1306:GND
ssd1306:VCC
ssd1306:SCL
ssd1306:SDA
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
btn4:1.l
btn4:2.l
btn4:1.r
btn4:2.r
relay1:VCC
relay1:GND
relay1:IN
relay1:NC
relay1:COM
relay1:NO