salve a tutti ragazzi
allora vorrei controllare delle pompe dosometriche per somministrare dei fertilizzanti in acquario
vorrei evitare il delay per ovvi motivi e quindi usare il millis
ho scritto un programmino però non funziona bene e vorrei un vostro suggerimento
if(dayOfWeek==myNO3[0] || dayOfWeek==myNO3[1] || dayOfWeek==myNO3[2] || dayOfWeek==myNO3[3] || dayOfWeek==myNO3[4] || dayOfWeek==myNO3[5] || dayOfWeek==myNO3[6])//CONTROLLA IL GIORNO PER SOMMINISTRARE
{
if(hour==oreNitrati && minute==minutiNitrati && second==0)
{
digitalWrite(NITRATI,HIGH);//ATTIVA LA SOMMINISTRAZIONE DI NITRATI
Nitrati=true;
}
}
if(Nitrati==true)
{
currentMillis_nitrati=millis();
if(currentMillis_nitrati-previousMillis_nitrati>delayNITRATI)//ATTENDE IL TEMPO DI SOMMINISTRAZIONE E POI SPEGNE LA POMPA
{
previousMillis_nitrati=currentMillis_nitrati;
digitalWrite(NITRATI,LOW);
mlFlaconeNo3somministrato=mlFlaconeNo3somministrato+(mlNo3/2);//DECREMENTE LA QUANTITà SOMMINISTRATA DAL FLACONE...QUESTO NON VA BENE
//Serial.print("mlFlaconeNo3: ");
//Serial.print(mlFlaconeNo3);
Nitrati=false;
}
}
dayOfWeek,hour,minute,second sono del real time
oreNitrati,minutiNitrati li imposto io
myNO3[] possono avere il valore o di 0 o del giorno corrispondente della settimana da 1 a 7
delayNITRATI ovviamente è il tempo che la pompa deve rimanere accesa
ringrazio tutti in anticipo 
Ciao, cosa non funziona? La variabile previousMillis_nitrati come la inizializzi?
ipotizzo che non ti scatta la somministrazione, forse il problema è nel second==0?
Provare a postare lo sketch completo?
fabpolli:
Ciao, cosa non funziona? La variabile previousMillis_nitrati come la inizializzi?
ipotizzo che non ti scatta la somministrazione, forse il problema è nel second==0?
ciao
allora inizializzo così
float mlNo3 = 0;
long MilliNitrati = 5800;
unsigned long delayNITRATI = (mlNo3 * MilliNitrati);
unsigned long currentMillis_nitrati;
unsigned long previousMillis_nitrati = 0;
a partire parte senza problemi
il problema è quando va nel ciclo if (nitrati==true)
perchè appena Nitrati diventa true va in quell'altro ciclo e mi spegne subito la pompa perchè
si verifica questo
if(currentMillis_nitrati-previousMillis_nitrati>delayNITRATI)
e quindi non mi rimane accesa la pompa il tempo prestabilito
ma in un secondo ovvero tra second=0 e secondo=1 mi accende la pompa poi mi verifica la condizione sopra e quindi mi spegna la pompa, visto che in un secondo rifà il ciclo di tutto il void loop mi riaccende la pompa e mi tiene accesa la pompa fin quando non si riverifica la condizione sopra
spero di essermi spiegato al meglio 
speedyant:
Provare a postare lo sketch completo?
postare l'intero sketch vuol dire postare almeno 15/20k righe di codice
perchè è un programmino che mi gestisce l'intero acquario con un touchscreen
e per quanto riguarda le dosometriche la parte del void loop e quella postata sopra
all'inizio ci sono le inizializzazioni come ho scritto
e nel void setup solo la parte riguardante i pinmode e la parte dell'orologio 
Ciao, se il problema è solo quello credo che se inizializzi previousMillis_nitrati subito dopo al Nitrati=true ti dovrebbe risolvere il problema
Ciao,
come suggerito da fabpolli anche io eliminerei la
previousMillis_nitrati=currentMillis_nitrati;
ed aggiungerei invece una
previousMillis_nitrati=millis();
subito dopo la
Nitrati=true;
Inoltre mi pare che nella inizializzazione ci sia un problema
float mlNo3 = 0;
long MilliNitrati = 5800;
unsigned long delayNITRATI = (mlNo3 * MilliNitrati);
la variabile delayNITRATI vale sempre 0 infatti moltiplichi mlNo3 (=0) per MilliNitrati (=5800)
Questo fa si che
if(currentMillis_nitrati-previousMillis_nitrati>delayNITRATI)
sia sempre vero la prima volta che lo esegui perché previousMillis_nitrati = 0, delayNITRATI = 0 e currentMillis_nitrati sarà certamente > 0
Ciao.
Vittorio.
ok proverò come dite voi e vi farò sapere
nono mlNO3 ho scritto io qui =0 ma non è uguale a 0 è un valore impostabile da touch
però quello che mi chiedo è perchè con le altre pompe non me lo fa ?
il codice è identico anche per le altre pompe ma solo questo mi da problemi...boo