AcquaPortal Forum Acquario Dolce e Acquario Marino

AcquaPortal Forum Acquario Dolce e Acquario Marino (http://www.acquariofilia.biz/forum.php)
-   Tecnica e allestimento Nanoreef (http://www.acquariofilia.biz/forumdisplay.php?f=67)
-   -   Alternativa alle dosomotriche (http://www.acquariofilia.biz/showthread.php?t=468321)

SirNino 18-10-2014 20:41

Quote:

Originariamente inviata da dr.jekyll (Messaggio 1062508897)
Per ora sono a arrivato a questo:

Ho qualche problemino di rimbalzo con i tasti, qualcuno mi può aiutare?



Clicca per vedere il video su YouTube Video

Fin dove riesco ad arrivare posso provare io.
cosa ti succede? Hai inserito un tempo di rimbalzo?

dr.jekyll 18-10-2014 20:51

Ho risolto il problema scrivendo questa funzione

Quote:

void bounc(){
for (int bounc=0; bounc==0; bounc++){ delay(300);};

che parte ogni qual volta si preme un tasto. Solo vorrei risolvere il problema elettronicamente, senza dover ricorrere a codice. In giro ho letto che si può utilizzare un condensatore messo in parallelo sul pulsante. Tu ne sai qualcosa?


Seconda cosa, posso usare un qualsiasi transistor per misurare la temperatura?


Grazie, alla fine il tuo consiglio di basare il programma su millis() e non su delay si è rilevato fondamentale ;-)

SirNino 18-10-2014 23:41

Il problema del pulsante è che ti da un delay all'inizio da quanto ricordo (tu schiacci e quando il condensatore è carico il segnale di arduino va su).(comunque domani controllo meglio).

Ma alla fine la funzione che t'ha risolto il problema si basa sul delay!!
ahahah!!

dr.jekyll 19-10-2014 03:46

Quote:

Originariamente inviata da SirNino (Messaggio 1062509142)
Il problema del pulsante è che ti da un delay all'inizio da quanto ricordo (tu schiacci e quando il condensatore è carico il segnale di arduino va su).(comunque domani controllo meglio).

Ma alla fine la funzione che t'ha risolto il problema si basa sul delay!!
ahahah!!

ok grazie


ahahah si però credimi in tutto il programma il delay compare solo in quella funzione.....solo che mi sembrava veramente esagerato usare la millis() [emoji23] [emoji23] [emoji23]

Inviato dal mio GT-I9505 utilizzando Tapatalk

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

Clicca per vedere il video su YouTube Video

Quote:

// 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);}
}


}
}
}















fito_89 21-10-2014 09:23

Quote:

Originariamente inviata da Ste80 (Messaggio 1062507738)
Scusate se m'intrometto, ma ho visto che da un paio d'anni sono in commercio le pompe dosatrici "aqua1 PD-2 0 0 1 e PD-2 0 0 2" che costano davvero poco e da quel che ho letto, sono molto valide... perché dannarsi a costruirne una da zero?
Un conto ci fossero in commercio solo pompe da 200 - 300 o 1000 €, ma le Aqua costano sui 40€ l'una ... :)

soddisfazione personale, e poi gia che sto gestendo tutto con arduino tanto vale gestire anche quelle no?

dr.jekyll 21-10-2014 19:18

Quote:

Originariamente inviata da fito_89 (Messaggio 1062510706)
Quote:

Originariamente inviata da Ste80 (Messaggio 1062507738)
Scusate se m'intrometto, ma ho visto che da un paio d'anni sono in commercio le pompe dosatrici "aqua1 PD-2 0 0 1 e PD-2 0 0 2" che costano davvero poco e da quel che ho letto, sono molto valide... perché dannarsi a costruirne una da zero?
Un conto ci fossero in commercio solo pompe da 200 - 300 o 1000 €, ma le Aqua costano sui 40€ l'una ... :)

soddisfazione personale, e poi gia che sto gestendo tutto con arduino tanto vale gestire anche quelle no?

riesci a passarmi le dimensioni della pompa? Ho quasi finito il codice e vorrei iniziare a pensare al modi di sistemare il tutto

SirNino 21-10-2014 21:24

Quote:

Originariamente inviata da dr.jekyll (Messaggio 1062511265)
Quote:

Originariamente inviata da fito_89 (Messaggio 1062510706)
Quote:

Originariamente inviata da Ste80 (Messaggio 1062507738)
Scusate se m'intrometto, ma ho visto che da un paio d'anni sono in commercio le pompe dosatrici "aqua1 PD-2 0 0 1 e PD-2 0 0 2" che costano davvero poco e da quel che ho letto, sono molto valide... perché dannarsi a costruirne una da zero?
Un conto ci fossero in commercio solo pompe da 200 - 300 o 1000 €, ma le Aqua costano sui 40€ l'una ... :)

soddisfazione personale, e poi gia che sto gestendo tutto con arduino tanto vale gestire anche quelle no?

riesci a passarmi le dimensioni della pompa? Ho quasi finito il codice e vorrei iniziare a pensare al modi di sistemare il tutto

Se intende quelle che vanno installate in batterie da 4 io le ho, sono cm 11x7x6h.
Non sono pompe normali peró, sono pompe "autogestione"; hanno la gestione della frequenza e degli ml più la taratura.
Per utilizzarle (io c'ho pensato per le mie) devi smontarle e modificarle.

dr.jekyll 22-10-2014 00:49

No, io dico le cinesi che si trovano a sui 10 euro online

Inviato dal mio GT-I9505 utilizzando Tapatalk


Tutti gli orari sono GMT +2. Attualmente sono le 01:50.

Powered by vBulletin versione 3.8.9
Copyright ©: 2000 - 2025, Jelsoft Enterprises Ltd.
Traduzione italiana Team: AcquaPortal
User Alert System provided by Advanced User Tagging v3.2.5 Patch Level 2 (Lite) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Copyright Zero Pixel Srl

Page generated in 0,08629 seconds with 13 queries