Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #15 on: March 18, 2013, 04:23:58 am » |
non hai problemi di overflow.
La sua è solo una scusa per spronarti a realizzare il LeOS II 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #16 on: March 18, 2013, 04:25:39 am » |
Il leOS2 esiste già  Ho già iniziato a lavorare al leOS3 ma non ho molto tempo per starci dietro
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #17 on: March 18, 2013, 04:27:51 am » |
Il leOS2 esiste già  Allora vuole almeno il Service Pack 1 
|
|
|
|
|
Logged
|
|
|
|
|
Cagliari
Offline
Faraday Member
Karma: 49
Posts: 3011
|
 |
« Reply #18 on: March 18, 2013, 05:48:32 am » |
Se il controllo su millis() lo fai nella forma esposta nel mio articolo, ossia MILLIS - TEMPO_PRECEDENTE > INTERVALLO
non hai problemi di overflow.
E se fai: abs(Millis - tempo_precedente) > Intervallo non è meglio?
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #19 on: March 18, 2013, 05:52:11 am » |
E se fai: abs(Millis - tempo_precedente) > Intervallo non è meglio?
Ancora più semplice, e nel caso non ti servono ritardi maggiori di 6.5 secondi basta utilizzare valori interi invece di long int. /* Millis reset */ extern unsigned long timer0_millis; // dichiarazione per accedere al contatore di millis
timer0_millis = 0; // per resettare millis()
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #20 on: March 18, 2013, 06:25:41 am » |
E se fai: abs(Millis - tempo_precedente) > Intervallo non è meglio?
Non serve, usando dati di tipo unsigned long si parla sempre di numeri positivi.
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 574
|
 |
« Reply #21 on: March 19, 2013, 02:11:09 pm » |
No, millis mi è antipatica perchè va in overflow.
Il fatto che va in overflow dopo 47 e rotti giorni non significa che il tuo programma smette di funzionare, in tutti i casi puoi resettare a tuo piacere la millis(), evitando di fatto che vada in overflow, non appena hai terminato i vari cicli di delay che ti servono. Ma si può resettare via software il millis()?
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 574
|
 |
« Reply #22 on: March 19, 2013, 02:15:22 pm » |
Nello specifico devo far partire una sirena solo dopo 2 minuti che è avvenuto un evento, un HIGH, un CHANGE, quello che volete. Come fareste?
E la sirena suona per un minuto, poi si silienzia.
Evento(); //PIR che lancia un allarme . . . (2 min di ritardo) . . SirenaON(); //sirena che suona . . (1 min di ritardo) . SirenaOFF(); //sirena che si spegne
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 3
Posts: 589
"La teoria è quando si sa tutto ma non funziona niente. La pratica è quando funziona tutto ma non si sa il perché. In ogni caso si finisce sempre con il coniugare la teoria con la pratica: non funziona niente e non si sa il perché." Albert Einstein
|
 |
« Reply #23 on: March 19, 2013, 03:14:56 pm » |
unsigned long int tempoEvento; bool eventoAvvenuto; if (evento()) { tempoEvento = millis(); eventoAvvenuto = true; } if (eventoAvvenuto) { if (millis() - tempoEvento >= 2000) { digitalWrite(sirena,HIGH); } if (millis - tempoEvento >= 3000) { digitalWrite(sirena,LOW); eventoAvvenuto = false; } } Questo non tiene di conto della condizione che avvemga un secondo evento mentre stai gestendo il primo. P.S. tempoEvento e eventoAvvenuto devono essere variabili globali o quantomeno (non sono sicuro che funzioni, prova) le devi definire static, altrimenti al ciclo successivo le perdi.
|
|
|
|
« Last Edit: March 19, 2013, 03:17:13 pm by Janos »
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 574
|
 |
« Reply #24 on: March 19, 2013, 04:36:20 pm » |
E con questo allarme sempre collegato alla rete non ho i problemi dei 47 giorni?
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #25 on: March 19, 2013, 05:25:07 pm » |
Ma si può resettare via software il millis()?
Forse te la sei persa: /* Millis reset */ extern unsigned long timer0_millis; // dichiarazione per accedere al contatore di millis
timer0_millis = 0; // per resettare millis()
|
|
|
|
|
Logged
|
|
|
|
|
Offline
God Member
Karma: 4
Posts: 574
|
 |
« Reply #26 on: March 19, 2013, 05:47:08 pm » |
Ma si può resettare via software il millis()?
Forse te la sei persa: /* Millis reset */ extern unsigned long timer0_millis; // dichiarazione per accedere al contatore di millis
timer0_millis = 0; // per resettare millis()
Grazie Leo, prendo e segno sul quadernetto del codice utile!
|
|
|
|
|
Logged
|
|
|
|
|
ivrea (to)
Offline
God Member
Karma: 10
Posts: 624
|
 |
« Reply #27 on: March 19, 2013, 05:56:09 pm » |
Grazie Leo, prendo e segno sul quadernetto del codice utile!
E come non ri-quotare? Ma Leo, ma ma ma quante ne sai?!!! Che cosa hai letto oltre ai manuali di Arduino? Manuali degli Amtel? Li ci sono molte delle info che hai su Arduino e la sua programmazione avanzata, come gl interrupt?
|
|
|
|
|
Logged
|
|
|
|
|
Rome (Italy)
Offline
Tesla Member
Karma: 74
Posts: 7348
"Il Vero Programmatore ha imparato il C sul K&R, qualunque altro testo è inutile e deviante."
|
 |
« Reply #28 on: March 20, 2013, 01:18:55 am » |
E come non ri-quotare? Ma Leo, ma ma ma quante ne sai?!!!
Senza voler togliere nulla a Leo, però il metodo per resettare la millis() è opera mia, la prima volta l'ho postato un paio di anni fa qui 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16460
Don't know what I do
|
 |
« Reply #29 on: March 20, 2013, 01:41:40 am » |
@nid69 e Babbuino: il metodo l'ha postato astrobeed, avete perso il post  Che cosa hai letto oltre ai manuali di Arduino? Manuali degli Amtel? Li ci sono molte delle info che hai su Arduino e la sua programmazione avanzata, come gl interrupt?
Tutte le info che so le ho imparate leggendo il datasheet, sperimentando, e studiando il codice degli altri (ecco perché ringrazio l'opensource).
|
|
|
|
|
Logged
|
|
|
|
|
|