Benvenuti sul Forum di AcquaPortal, la più grande community italiana di acquariofilia!
Sul Forum di AcquaPortal puoi discutere con altri appassionati di acquariofilia, tenere un tuo Blog personale, inserire foto e video, chattare, ed aiutarci a creare un grande database con schede di pesci, invertebrati e prodotti di acquariofilia.
Per entrar a far parte della comunità occorre registrarsi.
Per farlo premi su
Al momento della registrazione ti verrà richiesto di accettare il Regolamento che ti consigliamo di leggere attentamente.
Ti consigliamo inoltre di leggere le FAQ per apprendere le funzionalità principali del forum.
Se invece sei un utente registrato e hai dimenticato i tuoi dati di accesso devi effettuare il Recupero dati.
Tecnica marinoPer parlare della vasca, del mobile, della sump, dell'impianto idraulico, delle attrezzature e degli accessori (pompe, filtri, schiumatoi, reattori, ecc).
E' una domanda un po' difficilotta per un forum di acquari.
Magari prova a scrivere il titolo un po' meglio, specificando a che linguaggio/controller ti riferisci.
Vedi un po' se riesci a copiarti il menu che viene gestito con dei while
la funzione doso l'avevo scritta per far partire una dosometrica e fermare la pompa di mandata sump per un tempo variabile. Dovrebbe essere adatta al tuo scopo. Anche se nel video che ho caricato viene usato un lcd più piccolo il programma è stato scritto per un 20x4
codice:
// DR.JEKYLL ENRICOVELA@GMAIL.COM
#include <LiquidCrystal.h>
int meno=53;
int piu=52;
int dx=51;
int enter=50;
int sx=49;
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//VARIAIBLI bool
//VARIBILI tempo
short int s=35;
short int m=03;
short int h=23;
short int ktime=1;
short int day=3;
//VARIABILI neon
short int neon_cond=0; //!!!!!!!!!!!!!!!!!! NON MODIFICARE!!!!!!!!!!!!!!!!!
short int m_on=0;
short int h_on=0;
short int m_off=0;
short int h_off=0;
//VARIABILI doso
short int doso_cond=0; //!!!!!!!!!!!!!!!!!! NON MODIFICARE!!!!!!!!!!!!!!!!!
short int tempo_doso=0;
short int m_stop=0;
short int h_stop=0;
short int m_period=0;
short int h_period=0;
float ml=0;
//VARIABILI controller
boolean pinsx;
boolean pindx;
boolean pinp;
boolean pinm;
boolean pinenter;
short int cas=0;
short int cas1=0;
short int cas2=0;
void menucontroll(boolean,boolean,boolean,boolean,boolean,int,int){
pinp=digitalRead(piu);
pinm=digitalRead(meno);
pindx=digitalRead(dx);
pinenter=digitalRead(enter);
pinsx=digitalRead(sx);
if (pindx==HIGH){cas1=cas1+1;bounc(); lcd.begin(20,4); if (cas1==5){cas1=1;}}
if (pinsx==HIGH){cas1=cas1-1; lcd.begin(20,4); if (cas1==0){cas1=4;}bounc();}
if (pinenter==HIGH){cas2=1; bounc(); lcd.begin(20,4);}
if(pinp==HIGH){bounc();cas1=0; lcd.begin(20,4);}
if (pinm==HIGH){bounc();cas1=0; lcd.begin(20,4);}
}
void allread(boolean,boolean,boolean,boolean,boolean){
pinp=digitalRead(piu);
pinm=digitalRead(meno);
pindx=digitalRead(dx);
pinenter=digitalRead(enter);
pinsx=digitalRead(sx);
}
// STAMPA ORARIO variabili: ore, minuti, secondi
void printime(int,int,int){
if(day==0){lcd.setCursor(0, 0);lcd.print("Lun");}
if(day==1){lcd.setCursor(0, 0);lcd.print("Mar");}
if(day==2){lcd.setCursor(0, 0);lcd.print("Mer");}
if(day==3){lcd.setCursor(0, 0);lcd.print("Gio");}
if(day==4){lcd.setCursor(0, 0);lcd.print("Ven");}
if(day==5){lcd.setCursor(0, 0);lcd.print("Sab");}
if(day==6){lcd.setCursor(0, 0);lcd.print("Dom");}
lcd.setCursor(4, 0); lcd.print(h);
lcd.setCursor(6, 0);lcd.print(":");
lcd.setCursor(7, 0);lcd.print(m);
lcd.setCursor(9, 0);lcd.print(":");
lcd.setCursor(10, 0);lcd.print(s);
lcd.setCursor(14, 0);lcd.print("T:");
lcd.setCursor(16, 0);lcd.print(temperatura);
lcd.setCursor(0, 4);
lcd.print("mod");
lcd.setCursor(4, 4);
lcd.print("mod");
lcd.setCursor(8, 4);
lcd.print("set");
}
// 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 Fotoperio ") ;
lcd.setCursor(1, 1);lcd.print(h_on) ;
lcd.setCursor(2, 1); lcd.print(":");
if((s%2)==0){ lcd.setCursor(4, 1);lcd.print(m_on);}
if((s%2)!=0){ lcd.setCursor(4, 1);lcd.print(" ");}
lcd.setCursor(0, 2);lcd.print("Fine Fotoperiodo ") ;
lcd.setCursor(0, 3);lcd.print(h_off) ;
lcd.setCursor(2, 3); lcd.print(":");
lcd.setCursor(3, 3);lcd.print(m_off);
}
void setneonprint_H_ON(int,int,int,int,int){
lcd.setCursor(0, 0);lcd.print("Inzio Fotoperiodo ") ;
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 Fotoperido ") ;
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 Fotoperio ") ;
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(13, 0);lcd.print("SetTime") ;
if(day==0){lcd.setCursor(0, 1);lcd.print("Lun");}
if(day==1){lcd.setCursor(0, 1);lcd.print("Mar");}
if(day==2){lcd.setCursor(0, 1);lcd.print("Mer");}
if(day==3){lcd.setCursor(0, 1);lcd.print("Gio");}
if(day==4){lcd.setCursor(0, 1);lcd.print("Ven");}
if(day==5){lcd.setCursor(0, 1);lcd.print("Sab");}
if(day==6){lcd.setCursor(0, 1);lcd.print("Dom");}
lcd.setCursor(4, 1); lcd.print(h);
lcd.setCursor(6, 1);lcd.print(":");
if((s%2)==0){ lcd.setCursor(7, 1);lcd.print(m);}
if((s%2)!=0){ lcd.setCursor(7, 1);lcd.print(" ");}
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("OK");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("- +");
}
// STAMPA SET H ORARIO variabili: ore, minuti, secondi
void setprintime_H(int, int, int){
lcd.setCursor(13, 0);lcd.print("SetTime") ;
if(day==0){lcd.setCursor(0, 1);lcd.print("Lun");}
if(day==1){lcd.setCursor(0, 1);lcd.print("Mar");}
if(day==2){lcd.setCursor(0, 1);lcd.print("Mer");}
if(day==3){lcd.setCursor(0, 1);lcd.print("Gio");}
if(day==4){lcd.setCursor(0, 1);lcd.print("Ven");}
if(day==5){lcd.setCursor(0, 1);lcd.print("Sab");}
if(day==6){lcd.setCursor(0, 1);lcd.print("Dom");}
lcd.setCursor(7, 1); lcd.print(m);
lcd.setCursor(6, 1);lcd.print(":");
if((s%2)==0){ lcd.setCursor(4, 1);lcd.print(h);}
if((s%2)!=0){ lcd.setCursor(4, 1);lcd.print(" ");}
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("OK");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("- +");
}
// 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(20, 4); m++; s=00;}
if(m==60){ lcd.begin(20, 4); h++; m=0;}
if(m==-1){ lcd.begin(20, 4); m=59;}
if(h==24){lcd.begin(20, 4); day=day+1; h=0;}
if(day==7){day=0; }
if(h==-1){lcd.begin(20, 4); 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(150);};
}
//NEON
void neon(){
if(h_on==h && m_on==m ){analogWrite(A5, 128);}
if(h_off==h && m_off==m ){analogWrite(A5, 0);}
}
//DOSO
void doso(){
if(m==m_stop && h==h_stop){
analogWrite(A4, 0);}
if(h==h_stop && m==(m_stop+1)){
if(s==0){
analogWrite(A3,128);
if (s==tempo_doso){
analogWrite(A3,0);
}
}
}
if(m==(m_stop+m_period) && h==(h_stop+h_period)){
analogWrite(A4,128);
}
}
void setup() {
// controller
pinMode(52, INPUT); // +
pinMode(53, INPUT); // -
pinMode(51, INPUT); // destra
pinMode(50, INPUT); // sinistra
lcd.begin(20,4);
//relè
}
void loop() {
lcd.setCursor(0, 0);
printime(h, m, s);
clock(ktime, s, m, h);
pindx=digitalRead(enter);
if(pindx==HIGH){cas1=1; bounc(); lcd.begin(20,4);}
neon();
doso();
/*SET TIME*/ while (cas1==1){
lcd.setCursor(4, 0);
lcd.print("Set time(1/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
clock(ktime, s, m, h);
neon();
menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,cas2);
while(cas2==1){
clock(ktime, s, m, h);
neon();
setprintime_M(h, m, s);
allread(pinp,pinm,pindx,pinenter,pinsx);
if(pinsx==HIGH){bounc();cas2=cas2-1; lcd.begin(20,4);}
if(pinenter==HIGH){bounc();cas2=0; lcd.begin(20,4);}
if (pindx==HIGH){bounc();cas2=cas2+1; lcd.begin(20,4);}
if(pinp==HIGH){bounc();m=m+1; lcd.begin(20,4);}
if (pinm==HIGH){bounc();m=m-1; lcd.begin(20,4);}
while(cas2==2){
clock(ktime, s, m, h);
neon();
setprintime_H(h, m, s);
allread(pinp,pinm,pindx,pinenter,pinsx);
if(pinsx==HIGH){bounc();cas2=cas2-1; lcd.begin(20,4);}
if (pindx==HIGH){bounc();cas2=cas2+1; lcd.begin(20,4);}
if (pinsx==HIGH){cas2=cas2-1; lcd.begin(20,4);}
if(pinp==HIGH){h=h+1;bounc();}
if(pinm==HIGH){h=h-1;bounc();}
if (pindx==HIGH){bounc();cas2=cas2+1; lcd.begin(20,4);}
if(h-h_on>=0 && h-h_off<=0){
neon_cond++;
}
}
}
}
/*SET NEON*/ while (cas1==2){
clock(ktime, s, m, h);
neon();
lcd.setCursor(4, 0);
lcd.print("Set neon(2/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,cas2);
/*m on */ while(cas2==1){
clock(ktime,s,m,h);
neon();
setneonprint_M_ON(h_on,s,m_on,h_off,m_off);
if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
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 (m_on==60){m_on=0;}
if (pindx==HIGH){bounc();cas2=2; lcd.begin(20,4);}
/*h on*/ while(cas2==2){
clock(ktime, s, m, h);
neon();
setneonprint_H_ON(s,h_on,m_on,h_off,m_off);
if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
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 (h_on==24){h_on=00;}
if (pindx==HIGH){bounc();cas1=3; lcd.begin(20,4);}
/*m off*/ while(cas2==3){
clock(ktime,s,m,h);
neon();
setneonprint_M_OFF(h_on,m_on,h_off,s,m_off);
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 (m_off==60){m_off=0;}
if (pindx==HIGH){bounc();cas2=4; lcd.begin(20,4);}
/*h off*/ while(cas2==4){
clock(ktime,s,m,h);
neon();
setneonprint_H_OFF(h_on,m_on,s,h_off,m_off);
if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
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 (h_off==24){h_off=00;}
if (pindx==HIGH){bounc();cas2=1; lcd.begin(16,2);}
}
}
}
}
}
/*SET DOSO*/ while (cas1==3){
clock(ktime, s, m, h);
neon();
lcd.setCursor(4, 0);
lcd.print("Set doso(3/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,cas2);
/*m stop */ while(cas1==1){
clock(ktime,s,m,h);
neon();
setprintdoso_stop_M(h_stop, s, m_stop);
if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
if(pinp==HIGH){m_stop=m_stop+1;bounc();}
if(pinm==HIGH){m_stop=m_stop-1;bounc();}
if (m_on==-2){m_stop=59;}
if (pindx==HIGH){bounc();cas1=2; lcd.begin(20,4);}
/*h sto*/ while(cas2==2){
clock(ktime, s, m, h);
neon();
setprintdoso_stop_H(s,h_stop, m_stop);
if (pinsx==HIGH){cas1=0; lcd.begin(20,4);}
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();cas2=3; lcd.begin(20,4);}
/*period m*/
while(cas2==3){
clock(ktime,s,m,h);
neon();
setprintdoso_period_M(h_period,s,m_period);
if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
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();cas2=4; lcd.begin(20,4);}
/*period h*/
while(cas2==4){
clock(ktime,s,m,h);
neon();
setprintdoso_period_H(s, h_period, m_period);
if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
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(20,4);}
while(cas2==5){
clock(ktime,s,m,h);
neon();
setprintdoso_ML(s, ml);
if (pinsx==HIGH){cas2=0; lcd.begin(20,4);}
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();cas2=1; lcd.begin(20,4);
tempo_doso=(ml*10); //calcolare tempi dosometrica
}
}
}
}
}
}
/*SET TEMPERATURA*/ while (cas1==4){
clock(ktime, s, m, h);
neon();
lcd.setCursor(4, 0);
lcd.print("Set temp(4/4)");
lcd.setCursor(0, 4);
lcd.print("<=");
lcd.setCursor(4, 4);
lcd.print("En");
lcd.setCursor(8, 4);
lcd.print("=>");
lcd.setCursor(15, 4);
lcd.print("exit");
menucontroll(pinp,pinm,pindx,pinenter,pinsx,cas1,cas2);
}
}
}