Go Down

Topic: TimeAlarms cosa scegliere? (Read 1 time) previous topic - next topic

llluca

Jul 29, 2013, 01:08 pm Last Edit: Jul 29, 2013, 01:14 pm by llluca Reason: 1
Ciao,
Volevo gestire degli eventi in base tempo trascorso  preso da RTC.
Ho due possibilità:

il primo includendo due librereie:
Code: [Select]
#include <Time.h>
#include <TimeAlarms.h>
//setup()  =>
Alarm.alarmRepeat(7,35,0, PrimoAllarme);


il secondo usando un semplice confronto:

Code: [Select]
if( (now.hour() == 7) && (now.minute()== 35)){
   PrimoAllarme();
     }

l' azione è la medesima:
Code: [Select]
void PrimoAllarme(){
 Serial.println("Alarme: - Accendere Luci");    
   analogWrite(AaaPin,254);
}


Rispetto ai due sistemi quale è la migliore soluzione, e per quale motivo sarebbe meglio importare due lbrerie?

testato

puoi considerare varie cose,
quanto ti occupa in ram ed in flash l'una e l'altra alternativa ?
Quanto ritieni utile nascondere dietro una libreria il codice ?

spesso le librerie si usano anche solo per rendere piu' leggibile e manutenibile il codice, ma nel tuo caso sembra che cambi ben poco, a queso punto io farei senza.
- [Guida] IDE - http://goo.gl/ln6glr
- [Lib] ST7032i LCD I2C - http://goo.gl/GNojT6
- [Lib] PCF8574+HD44780 LCD I2C - http://goo.gl/r7CstH

llluca

Ti ringrazio,
se non sbaglio si dichiarano nel setup() magari questi non sono
influenzati  da cosa si fa nel  loop()  ?
o devo pensare anche ad un sistema alternativo?

leo72

"Giocando" con gli allarmi devi solo stare attento all'accavallamento su più giorni, se cioè l'attivazione del dispositivo inizia prima di mezzanotte e termina dopo.
Esempio: accendere le luci serali dalle 21:00 alle 06:00.

Sembra una cavolata ma con un semplice controllo come hai fatto tu su ore e minuti poi non funziona nulla  ;)
Questo è un caso in cui magari una libreria ti semplifica la vita perché fa il "lavoro sporco" al posto tuo. Per "lavoro sporco" intendo il controllo dell'accavallamento dell'evento su 2 giorni o più.

m_ri

inoltre occio a usare
Code: [Select]
if( (now.hour() == 7) && (now.minute()== 35)){
    PrimoAllarme();
      }
..se magari usi anche i secondi,oppure hai sottoprogrammi particolarmente lenti(x es. interazione con l'uomo,lcd con sottomenu),ti potrebbe capitare di saltare alcuni allarmi,magari perchè in quel minuto c'è il tizio che va nei sottomenu..
per esempio io uso anche una variabile booleana allarmeScatenato1 che metto a true quando lanco l'allarme..se è a false,allora controllo  if((now.hour() == 7) && (now.minute()>= 35)  (e ho 25 minuti di margine)

poi ognuno ha il suo stile..

llluca


(x es. interazione con l'uomo,lcd con sottomenu),ti potrebbe capitare di saltare alcuni allarmi,magari perchè in quel minuto c'è il tizio che va nei sottomenu..
per esempio io uso anche una variabile booleana allarmeScatenato1 che metto a true quando lanco l'allarme..se è a false,allora controllo  if((now.hour() == 7) && (now.minute()>= 35)  (e ho 25 minuti di margine)

Pensavo che 59 secondi fossero un tempo sufficiente, ma evidentemente grazie alla tua esperienza questo non basta.
Grazie per il suggerimento
Luca

m_ri

mah dipende tanto da cosa e come implementi..in moltissimi casi 59 secondi son più che sufficienti..ma se hai un menu interattivo(x esempio),e sai che l'arduino esegue solamente il codice del menù quando sei dentro,allora occio..buona giornata :)

Go Up