d0b
April 8, 2015, 6:17pm
1
salve
ho scritto questo piccolo codice per gestire cio' che la gente definisce "grow"... una serretta in casa... un piccolo favore per un caro amico...
lo sketch è troppo lungo per essere inserito quindi se avete voglia di aiutarmi potete vederlo qui.
ora vorrei inserire questa parte di codice:
//***** ciclo aspiratore ventilatore
if (now.hour() >= 15){
digitalWrite(relay3, HIGH);
delay(300000);
digitalWrite(relay3, LOW);
delay(120000);
digitalWrite(relay4, HIGH);
delay(1320000);
digitalWrite(relay4, LOW);
delay(60000);
}
if (now.hour() <= 9){
digitalWrite(relay3, HIGH);
delay(300000);
digitalWrite(relay3, LOW);
delay(120000);
digitalWrite(relay4, HIGH);
delay(1320000);
digitalWrite(relay4, LOW);
delay(60000);
}
ma i delay presenti influenzano il comportamento dello sketch e la lettura dei sensori ritarda di troppo, interferendo sul clima della grow.... ad esempio si accende la serpentina e per 30 min non si spegne piu, rischiando di ammazzare tutte le piantine carnivore di bepi.... sai che guaio!
Qualcuno mi puo suggerire una valida soluzione. Grazie
gpb01
April 8, 2015, 6:24pm
2
Non so più quante volte l'avremo detto e ripetuto su questo forum ...
... invece della delay(), IMPARATE A SCHEDULARE LE COSE CON LA millis() !!!
Quindi ... devi studiarti come si usa la millis() prima QUI , poi QUI ed infine leggi anche QUI ... vedrai che, alla fine, ti sarà tutto più chiaro.
Guglielmo
d0b
April 8, 2015, 8:08pm
3
speravo in un consiglio con sketch annesso... va bè mi metto a studiare... grazie lo stesso
Scherzi a parte, non sarebbe meglio utilizzare la libreria SecTimer? sto chiedendo un consiglio, tanto vale poi riscrivere tutto il codice perché si scopre che è meglio....
gpb01
April 9, 2015, 2:28am
4
-d0b-:
Scherzi a parte, non sarebbe meglio utilizzare la libreria SecTimer?
Non la conosco e non la uso ...
... preferisco avere il controllo diretto (... e ottimizzato ) della situazione usando direttamente la millis().
Guglielmo
P.S.: Ho letto quello che fa e, per lo scopo per cui tu devi usare la millis(), mi sembra inutile usare la la SecTimer
-d0b-:
speravo in un consiglio con sketch annesso...
In quei link ci sono anche gli esempi
d0b
April 9, 2015, 3:49pm
6
paulus scherzavo... un po' di humor ci stà...
comunque di sti mills non ciò capito una mazza, quindi ho pensato di impostare l'accensione dei dispositivi con l'rtc:
// dalle 00:00 alle 9:00 => 9 ore
if (now.hour() <= 9){
if (((t1+t2+t3)/3) >= tMAX) {
digitalWrite(relay3, HIGH);} // accensione aspiratore
if (((t1+t2+t3)/3) <= (tMIN+1)) {
digitalWrite(relay3, LOW);} // spegnimento aspiratore
if (((t1+t2+t3)/3) <= tMIN) {
digitalWrite(relay2, HIGH);} // accensione stufa
if (((t1+t2+t3)/3) >= (tMAX-1)) {
digitalWrite(relay2, LOW);} // spegnimento stufa
if (now.minute() == 0){
digitalWrite(relay4, HIGH);} // accensione ventilatore
if (now.minute() == 5){
digitalWrite(relay4, LOW);}
if (now.minute() == 15){
digitalWrite(relay4, HIGH);} // accensione ventilatore
if (now.minute() == 20){
digitalWrite(relay4, LOW);}
if (now.minute() == 30){
digitalWrite(relay3, HIGH);} // accensione aspiratore
if (now.minute() == 35){
digitalWrite(relay3, LOW);}
if (now.minute() == 45){
digitalWrite(relay4, HIGH);} // accensione ventilatore
if (now.minute() == 50){
digitalWrite(relay4, LOW);}
}
purtroppo non funziona in quanto il comando
if (now.hour() <= 9){
if (((t1+t2+t3)/3) >= tMAX) {
digitalWrite(relay3, HIGH);} // accensione aspiratore
if (((t1+t2+t3)/3) <= (tMIN+1)) {
digitalWrite(relay3, LOW);} // spegnimento aspiratore
impedisce l'accensione del rele ai 30 minuti di ogni ora, a causa della temperatura che non eccede quella massima
if (now.minute() == 30){
digitalWrite(relay3, HIGH);} // accensione aspiratore
if (now.minute() == 35){
digitalWrite(relay3, LOW);}
secondo voi si puo forzare quell'accensione?
non ho letto tutto lo sketch, ma con tutti questi IF io proverei ad usare lo SWITCH