Offline
Newbie
Karma: 0
Posts: 14
|
 |
« on: January 22, 2013, 03:10:02 pm » |
Salve a tutti, avrei la necessità di far eseguire ad arduino dei comandi ad un determinato orario, per questo l'ho dotato di RTC. Il mio intento sarebbe quello di far comportare arduino come un timer impostando degli intervalli di tempo o delle ore specifiche. Es. -ogni 15min pin 10 HIGH per 5min -alle ore 20:35 pin 10 HIGH fino alle 22:35 -...... non riesco a farmi uno scenario,mentalmente, di come poter gestire queste informazioni per arrivare allo scopo....avevo pensato ad un if per l'esempio delle 20:35, ma non posso applicarlo anche per il primo esempio. La funzione millis() non la posso usare perche volevo evitare che un reset del dispositivo facesse ripartire da capo il contatore. .....mi date una mano.....la soluzione credo si semplicissima, ma giuro al momento non riesco a farmi venire in mente niente  GRAZIE
|
|
|
|
|
Logged
|
|
|
|
|
Genova
Offline
Edison Member
Karma: 14
Posts: 2451
|
 |
« Reply #1 on: January 22, 2013, 03:58:48 pm » |
Bhe intanto hai una eeprom se non vuoi impegnare troppo la ram, ti crei delle celle dove ci sono scritte le informazioni che ti servono, n° del pin, HH, MM, On,Off, ripetizione ogni x, Lu,Ma,Me,Gio,Ven... con un solo byte, ce ne stanno veramente tante, se poi applichi una logica al raccoglimento dei dati il programma è più semplice di quanto credi Cos'è un acquario anche il tuo?
|
|
|
|
« Last Edit: January 22, 2013, 04:01:19 pm by pablos »
|
Logged
|
Meglio imparare dalle cose inutili piuttosto che non imparare niente. [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]
|
|
|
|
Offline
Newbie
Karma: 0
Posts: 14
|
 |
« Reply #2 on: January 22, 2013, 04:58:04 pm » |
quindi mi sembra di capire che cmq devo fargli fare cicli di verifica dei dati della eeprom e se se si verifica eseguire..... ma al di là di occupare memoria è piu o meno uguale che controllare i dati provenienti dall RTC con rtc.getTimeStr()
o forse sto solo guardando nella direzione sbagliata......mi sembra un po macchinoso
ma non esiste niente tipo demone 'atd' di linux ??
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 2
Posts: 103
|
 |
« Reply #3 on: January 23, 2013, 06:27:19 pm » |
se usi il ds1307 come rtc esterno lui manda i daty in byte al micro. il secondo byte sono i minuti e se fai un confronto di quando il byte e' 0x0f ( 00001111 in binario ) significa che sono le ore x e 15 minuti e alzi il pin che vuoi. se vuoi che dopo 5 minuti il pin deve abbassarsi aggiungi un secondo controllo se il byte dei minuti nel frattempo e' diventato 00010100 ( 0x14 in esadecimale ). se poi vuoi che questo accade ogni 15 minuti fai il confronto anche per quando sono le ore x e 30/45 e 00 minuti. pero' a questo punto io ci vedo meglio un 555 in astabile che ti costa meno di un micro 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16500
Don't know what I do
|
 |
« Reply #4 on: January 24, 2013, 01:46:44 am » |
@andrea: scusa ma esistono librerie che trasformano i dati in qualcosa di "umano" come ad esempio ore e minuti  @tronicman: se vuoi schedulare piccoli lavori in background perché non dai un'occhiata alla mia libreria leOS/leOS2? Serve proprio a questo. Puoi mettere un task che, ogni tot esegua un compito in automatico.
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #5 on: January 24, 2013, 02:30:11 am » |
|
|
|
|
|
Logged
|
|
|
|
|
Torino
Offline
God Member
Karma: 2
Posts: 725
|
 |
« Reply #6 on: January 24, 2013, 02:40:12 am » |
se usi il ds1307 come rtc esterno lui manda i daty in byte al micro. il secondo byte sono i minuti e se fai un confronto di quando il byte e' 0x0f ( 00001111 in binario ) significa che sono le ore x e 15 minuti e alzi il pin che vuoi. se vuoi che dopo 5 minuti il pin deve abbassarsi aggiungi un secondo controllo se il byte dei minuti nel frattempo e' diventato 00010100 ( 0x14 in esadecimale ). Non è proprio così....il ds1307 usa un byte si ma diviso in due gruppi da 4 bit.....all'interno dei 4 bit meno significativi (bit 0->3)memorizza le unità e nei restanti 4 bit più significativi (bit 4->7) memorizza le decine,quindi nel caso dei 15 minuti il valore del byte in esadecimale sara di 0x15 che corrisponde in binario a b0001 0101.
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16500
Don't know what I do
|
 |
« Reply #7 on: January 24, 2013, 02:40:49 am » |
Tu quoque, BrainBooster, fili mi!  Anche tu, BrainBooster, figlio mio, mi tradisci suggerendo le lib degli angli? 
|
|
|
|
|
Logged
|
|
|
|
|
Deep south of Italy
Offline
Faraday Member
Karma: 6
Posts: 2954
The quieter you become, the more you can hear
|
 |
« Reply #8 on: January 24, 2013, 10:39:06 am » |
 sorry, mi è venuto automatico vedendo che usava un rtc HW 
|
|
|
|
|
Logged
|
|
|
|
|
Offline
Full Member
Karma: 2
Posts: 103
|
 |
« Reply #9 on: January 24, 2013, 06:09:56 pm » |
se usi il ds1307 come rtc esterno lui manda i daty in byte al micro. il secondo byte sono i minuti e se fai un confronto di quando il byte e' 0x0f ( 00001111 in binario ) significa che sono le ore x e 15 minuti e alzi il pin che vuoi. se vuoi che dopo 5 minuti il pin deve abbassarsi aggiungi un secondo controllo se il byte dei minuti nel frattempo e' diventato 00010100 ( 0x14 in esadecimale ). Non è proprio così....il ds1307 usa un byte si ma diviso in due gruppi da 4 bit.....all'interno dei 4 bit meno significativi (bit 0->3)memorizza le unità e nei restanti 4 bit più significativi (bit 4->7) memorizza le decine,quindi nel caso dei 15 minuti il valore del byte in esadecimale sara di 0x15 che corrisponde in binario a b0001 0101. e già, me ne sono dimenticato 
|
|
|
|
|
Logged
|
|
|
|
|
Forum Moderator
Italy
Offline
Brattain Member
Karma: 219
Posts: 16500
Don't know what I do
|
 |
« Reply #10 on: January 25, 2013, 03:17:46 am » |
Non è proprio così....il ds1307 usa un byte si ma diviso in due gruppi da 4 bit.....all'interno dei 4 bit meno significativi (bit 0->3)memorizza le unità e nei restanti 4 bit più significativi (bit 4->7) memorizza le decine,quindi nel caso dei 15 minuti il valore del byte in esadecimale sara di 0x15 che corrisponde in binario a b0001 0101.
Codifica BCD
|
|
|
|
|
Logged
|
|
|
|
|
|