dr.jekyll
19-10-2014, 19:24
Aggiornamento
L'interfaccia utente è quasi completa, manca solo la parte di gestione della temperatura. La implementerò appena mi arriverà il sensore.
L'interfaccia è di facile programmazione e si gestisce con 4 pulsantini nel seguente modo
dalla home
[dx] sfogli set
[sx] torni home
[+] enti nel set
Una volta nel set:
[dx] selezione variabile da modificare
[sx] esci dal set
[+] incrementi variabile set
[-] diminuisci variabile set
m-gNjeDb6kQ
// DR.JEKYLL ENRICOVELA@GMAIL.COM
#include <LiquidCrystal.h>
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//VARIBILI tempo
int s=0;
int m=0;
int h=0;
int ktime=1;
//VARIABILI neon
int m_on=0;
int h_on=0;
int m_off=0;
int h_off=0;
//VARIABILI doso
int m_stop=0;
int h_stop=0;
int m_period=0;
int h_period=0;
float ml=0;
//VARIABILI controller
boolean pinsx;
boolean pindx;
boolean pinp;
boolean pinm;
int cas=0;
int cas1=0;
// STAMPA ORARIO variabili: ore, minuti, secondi
void printime(int, int, int){
lcd.setCursor(0, 0);lcd.print("Time ");
lcd.setCursor(5, 0); lcd.print(h);
lcd.setCursor(7, 0);lcd.print(":");
lcd.setCursor(8, 0);lcd.print(m);
lcd.setCursor(10, 0);lcd.print(":");
lcd.setCursor(11, 0);lcd.print(s);
}
// SET NEON h_on, s, m_on, h_off, m_off
void setneonprint_M_ON(int,int,int,int,int){
lcd.setCursor(0, 0);lcd.print("Inzio ") ;
lcd.setCursor(10, 0);lcd.print(h_on) ;
lcd.setCursor(12, 0); lcd.print(":");
if((s%2)==0){ lcd.setCursor(13, 0);lcd.print(m_on);}
if((s%2)!=0){ lcd.setCursor(13, 0);lcd.print(" ");}
lcd.setCursor(15, 0);lcd.print("<");
lcd.setCursor(0, 1);lcd.print("Fine ") ;
lcd.setCursor(10, 1);lcd.print(h_off) ;
lcd.setCursor(12, 1); lcd.print(":");
lcd.setCursor(13, 1);lcd.print(m_off);
}
void setneonprint_H_ON(int,int,int,int,int){
lcd.setCursor(0, 0);lcd.print("Inzio ") ;
if((s%2)==0){ lcd.setCursor(10, 0);lcd.print(h_on);}
if((s%2)!=0){ lcd.setCursor(10, 0);lcd.print(" ");}
lcd.setCursor(12, 0); lcd.print(":");
lcd.setCursor(13, 0);lcd.print(m_on);
lcd.setCursor(15, 0);lcd.print("<");
lcd.setCursor(0, 1);lcd.print("Fine ") ;
lcd.setCursor(10, 1);lcd.print(h_off) ;
lcd.setCursor(12, 1); lcd.print(":");
lcd.setCursor(13, 1);lcd.print(m_off);
}
void setneonprint_M_OFF(int,int,int,int,int){
lcd.setCursor(0, 0);lcd.print("Inzio ") ;
lcd.setCursor(10, 0);lcd.print(h_on) ;
lcd.setCursor(12, 0); lcd.print(":");
lcd.setCursor(13, 0);lcd.print(m_on);
lcd.setCursor(15, 1);lcd.print("<");
lcd.setCursor(0, 1);lcd.print("Fine ") ;
lcd.setCursor(10, 1);lcd.print(h_off) ;
lcd.setCursor(12, 1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(13, 1);lcd.print(m_off);}
if((s%2)!=0){ lcd.setCursor(13, 1);lcd.print(" ");}
}
void setneonprint_H_OFF(int,int,int,int,int){
lcd.setCursor(0, 0);lcd.print("Inzio ") ;
lcd.setCursor(10, 0);lcd.print(h_on) ;
lcd.setCursor(12, 0); lcd.print(":");
lcd.setCursor(13, 0);lcd.print(m_on);
lcd.setCursor(15, 1);lcd.print("<");
lcd.setCursor(0, 1);lcd.print("Fine ") ;
if((s%2)==0){ lcd.setCursor(10, 1);lcd.print(h_off);}
if((s%2)!=0){ lcd.setCursor(10, 1);lcd.print(" ");}
lcd.setCursor(12, 1); lcd.print(":");
lcd.setCursor(13, 1);lcd.print(m_off);
}
// STAMPA SET M ORARIO variabili: ore, minuti, secondi
void setprintime_M(int, int, int){
lcd.setCursor(0, 0);lcd.print("Set time ") ;
lcd.setCursor(11, 0);lcd.print("_") ;
lcd.setCursor(8, 1); lcd.print(h);
lcd.setCursor(10, 1);lcd.print(":");
lcd.setCursor(11, 1);lcd.print(m);
lcd.setCursor(13, 1);lcd.print(":");
lcd.setCursor(14, 1);lcd.print(s);
}
// STAMPA SET H ORARIO variabili: ore, minuti, secondi
void setprintime_H(int, int, int){
lcd.setCursor(0, 0);lcd.print("Set time ") ;
lcd.setCursor(8, 0);lcd.print("_") ;
lcd.setCursor(8, 1); lcd.print(h);
lcd.setCursor(10, 1);lcd.print(":");
lcd.setCursor(11, 1);lcd.print(m);
lcd.setCursor(13, 1);lcd.print(":");
lcd.setCursor(14, 1);lcd.print(s);
}
// STAMPA SET DOSO START STOP H s, h_start, m_start
void setprintdoso_stop_H(int, int, int){
lcd.setCursor(0, 0);lcd.print("Set time stop ");
if((s%2)==0){ lcd.setCursor(0, 1);lcd.print(h_stop);}
if((s%2)!=0){ lcd.setCursor(0, 1);lcd.print(" ");}
lcd.setCursor(2,1); lcd.print(":");
lcd.setCursor(3,1);lcd.print(m_stop);
}
// STAMPA SET DOSO START M h_start, s, m_start,
void setprintdoso_stop_M(int, int, int){
lcd.setCursor(0, 0);lcd.print("Set time stop ");
lcd.setCursor(0,1);lcd.print(h_stop);
lcd.setCursor(2,1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(3, 1);lcd.print(m_stop);}
if((s%2)!=0){ lcd.setCursor(3, 1);lcd.print(" ");}
}
// SET DOSO PERIODO H s, h_period, m_period
void setprintdoso_period_H(int, int, int){
lcd.setCursor(0, 0);lcd.print("Set period ");
if((s%2)==0){ lcd.setCursor(0, 1);lcd.print(h_period);}
if((s%2)!=0){ lcd.setCursor(0, 1);lcd.print(" ");}
lcd.setCursor(2,1); lcd.print(":");
lcd.setCursor(3,1);lcd.print(m_period);
}
// SET DOSO PERIODO M h_period, s, m_period
void setprintdoso_period_M(int, int, int){
lcd.setCursor(0, 0);lcd.print("Set period");
lcd.setCursor(0,1);lcd.print(h_period);
lcd.setCursor(2,1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(3, 1);lcd.print(m_period);}
if((s%2)!=0){ lcd.setCursor(3, 1);lcd.print(" ");}
}
// SET DOSO ML
void setprintdoso_ML(int, float){
lcd.setCursor(0, 0);lcd.print("Set ml per day ");
if((s%2)==0){ lcd.setCursor(0, 1);lcd.print(ml);}
if((s%2)!=0){ lcd.setCursor(0, 1);lcd.print(" ");}
}
// OROLOGIO vaiabili: millis, ktime, secondi, muniti, ore
void clock(int, int, int, int){
long ctime=millis()/1000;
if (ctime-(ktime*1)==0){ s++; ktime++;}
if(s==60){ lcd.begin(16, 2); m++; s=00;}
if(m==60){ lcd.begin(16, 2); h++; m=0;}
if(m==-1){ lcd.begin(16, 2); m=59;}
if(h==24){lcd.begin(16, 2); h=0;}
if(h==-1){lcd.begin(16, 2); h=23;}
}
//SET VARIABILI TEMPO
void h24(int, int){
if (m_on==-1)
{m_on=59;}
if (h_on==-1)
{h_on=23;}
}
//ELIMINA IN RIMBALZO DEI TASTI
void bounc(){
for (int bounc=0; bounc==0; bounc++){ delay(300);};
}
//LEGGE TUTTI GLI INGRESSI DEL CONTROLL tasti: +, -, sinistra, destra
void allread(boolean, boolean, boolean, boolean){
pinp=digitalRead(6);
pinm=digitalRead(7);
pindx=digitalRead(8);
pinsx=digitalRead(9);
}
void setup() {
// controller
pinMode(6, INPUT); // +
pinMode(7, INPUT); // -
pinMode(8, INPUT); // destra
pinMode(9, INPUT); // sinistra
lcd.begin(16,2);
}
void loop() {
lcd.setCursor(0, 0);
printime(h, m, s);
clock(ktime, s, m, h);
pindx=digitalRead(8);
if(pindx==HIGH){cas=1; lcd.begin(16,2);}
/*SET TIME*/ while (cas==1){
clock(ktime, s, m, h);
lcd.setCursor(2, 0);
lcd.print("Set time(1/4)");
lcd.setCursor(0, 1);
lcd.print("x");
lcd.setCursor(14, 1);
lcd.print("=>");
bounc();
pinp=digitalRead(6);
pindx=digitalRead(8);
pinsx=digitalRead(9);
if (pindx==HIGH){cas=cas+1;}
if (pinsx==HIGH){lcd.begin(16,2) ;cas=0;}
if (pinp==HIGH){lcd.begin(16,2); cas1=1; bounc();}
while(cas1==1){
clock(ktime, s, m, h);
setprintime_M(h, m, s);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){m=m+1;bounc();}
if(pinm==HIGH){m=m-1;bounc();}
if (pindx==HIGH){bounc();cas1=2; lcd.begin(16,2);}
while(cas1==2){
clock(ktime, s, m, h);
setprintime_H(h, m, s);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){h=h+1;bounc();}
if(pinm==HIGH){h=h-1;bounc();}
if (pindx==HIGH){bounc();cas1=1; lcd.begin(16,2);}
}
}
/*SET NEON*/ while (cas==2){
clock(ktime, s, m, h);
lcd.setCursor(2, 0);
lcd.print("Set neon(2/4)");
lcd.setCursor(0, 1);
lcd.print("x");
lcd.setCursor(14, 1);
lcd.print("=>");
bounc();
pinp=digitalRead(6);
pindx=digitalRead(8);
pinsx=digitalRead(9);
if (pindx==HIGH){cas=cas+1;}
if (pinsx==HIGH){lcd.begin(16,2); cas=0;}
if (pinp==HIGH){lcd.begin(16,2); cas1=1; bounc();}
/*m on */ while(cas1==1){
clock(ktime,s,m,h);
setneonprint_M_ON(h_on,s,m_on,h_off,m_off);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){m_on=m_on+1;bounc();}
if(pinm==HIGH){m_on=m_on-1;bounc();}
if (m_on==-1){m_on=59;}
if (pindx==HIGH){bounc();cas1=2; lcd.begin(16,2);}
/*h on*/ while(cas1==2){
clock(ktime, s, m, h);
setneonprint_H_ON(s,h_on,m_on,h_off,m_off);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){h_on=h_on+1;bounc();}
if(pinm==HIGH){h_on=h_on-1;bounc();}
if (h_on==-1){h_on=23;}
if (pindx==HIGH){bounc();cas1=3; lcd.begin(16,2);}
/*m off*/ while(cas1==3){
clock(ktime,s,m,h);
setneonprint_M_OFF(h_on,m_on,h_off,s,m_off);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){m_off=m_off+1;bounc();}
if(pinm==HIGH){m_off=m_off-1;bounc();}
if (m_off==-1){m_off=59;}
if (pindx==HIGH){bounc();cas1=4; lcd.begin(16,2);}
/*h off*/ while(cas1==4){
clock(ktime,s,m,h);
setneonprint_H_OFF(h_on,m_on,s,h_off,m_off);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){h_off=h_off+1;bounc();}
if(pinm==HIGH){h_off=h_off-1;bounc();}
if (h_off==-1){h_off=23;}
if (pindx==HIGH){bounc();cas1=1; lcd.begin(16,2);}
}
}
}
}
}
/*SET DOSO*/ while (cas==3){
clock(ktime, s, m, h);
lcd.setCursor(2, 0);
lcd.print("Set doso(3/4)");
lcd.setCursor(0, 1);
lcd.print("x");
lcd.setCursor(14, 1);
lcd.print("=>");
bounc();
pinp=digitalRead(6);
pindx=digitalRead(8);
pinsx=digitalRead(9);
if (pindx==HIGH){cas=cas+1;}
if (pinsx==HIGH){cas=0; lcd.begin(16,2);}
if (pinp==HIGH){lcd.begin(16,2); cas1=1; bounc();}
/*m stop */ while(cas1==1){
clock(ktime,s,m,h);
setprintdoso_stop_M(h_stop, s, m_stop);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){m_stop=m_stop+1;bounc();}
if(pinm==HIGH){m_stop=m_stop-1;bounc();}
if (m_on==-1){m_stop=59;}
if (pindx==HIGH){bounc();cas1=2; lcd.begin(16,2);}
/*h sto*/ while(cas1==2){
clock(ktime, s, m, h);
setprintdoso_stop_H(s,h_stop, m_stop);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){h_stop=h_stop+1;bounc();}
if(pinm==HIGH){h_stop=h_stop-1;bounc();}
if (h_stop==-1){h_stop=23;}
if (pindx==HIGH){bounc();cas1=3; lcd.begin(16,2);}
/*period m*/
while(cas1==3){
clock(ktime,s,m,h);
setprintdoso_period_M(h_period,s,m_period);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){m_period=m_period+1;bounc();}
if(pinm==HIGH){m_period=m_period-1;bounc();}
if (m_period==-1){m_period=59;}
if (pindx==HIGH){bounc();cas1=4; lcd.begin(16,2);}
/*period h*/
while(cas1==4){
clock(ktime,s,m,h);
setprintdoso_period_H(s, h_period, m_period);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){h_period=h_period+1;bounc();}
if(pinm==HIGH){h_period=h_period-1;bounc();}
if (h_period==-1){h_period=23;}
if (pindx==HIGH){bounc();cas1=5; lcd.begin(16,2);}
while(cas1==5){
clock(ktime,s,m,h);
setprintdoso_ML(s, ml);
allread(pinp,pinm, pinsx,pindx);
if (pinsx==HIGH){cas1=0; lcd.begin(16,2);}
if(pinp==HIGH){ml=ml+0.25;bounc();}
if(pinm==HIGH){ml=ml-0.25;bounc();}
/* REGOLA ML MAX */ if (ml==-2){ml=10;}
if (pindx==HIGH){bounc();cas1=1; lcd.begin(16,2);}
}
}
}
}
}
/*SET TEMPERATURA*/ while (cas==4){
clock(ktime, s, m, h);
lcd.setCursor(2, 0);
lcd.print("Set temp(4/4)");
lcd.setCursor(0, 1);
lcd.print("x");
lcd.setCursor(14, 1);
lcd.print("=>");
bounc();
pindx=digitalRead(8);
pinsx=digitalRead(9);
if (pindx==HIGH){cas=1;}
if (pinsx==HIGH){cas=0; lcd.begin(16,2);}
}
}
}
}