PaoloP:
E se fai:
abs(Millis - tempo_precedente) > Intervallo
non è meglio?
Non serve, usando dati di tipo unsigned long si parla sempre di numeri positivi.
PaoloP:
E se fai:
abs(Millis - tempo_precedente) > Intervallo
non è meglio?
Non serve, usando dati di tipo unsigned long si parla sempre di numeri positivi.
astrobeed:
BaBBuino:
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()?
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
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.
E con questo allarme sempre collegato alla rete non ho i problemi dei 47 giorni?
BaBBuino:
Ma si può resettare via software il millis()?
Forse te la sei persa:
astrobeed:
/* Millis reset
*/
extern unsigned long timer0_millis; // dichiarazione per accedere al contatore di millis
timer0_millis = 0; // per resettare millis()
leo72:
BaBBuino:
Ma si può resettare via software il millis()?Forse te la sei persa:
astrobeed:
/* 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!
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?
nid69ita:
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 ![]()
@nid69 e Babbuino:
il metodo l'ha postato astrobeed, avete perso il post ![]()
nid69ita:
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).
Grazie Leo. E grazie ad Astro.
Ma avete solo imparato da codice di altri (molto utile questo forum) o avete fatto letture specifiche sugli amtel. Del datasheet non penso si possano imparare cose sulla programmazione a basso livello sugli Amtel. Non avete letture da consigliare (magari anche su siti internet) ?
P.S. scusate anche per l'aver portato il thread in OT
Ti parlo a livello personale. I miei studi sono di tipo amatoriale, ho solo una grande passione che mi spinge ad approfondire queste cose.
Ho imparato a programmare tanti anni fa ma penso di esserci portato, come tutte le cose, perché riesco mentalmente a configurarmi un programma senza schemi su carta od altro. Mi viene naturale, così come a tanti di voi più "elettronici" viene naturale configurare mentalmente un circuito. Nello specifico dei microcontrollori, ho iniziato 2 anni e mezzo fa, quando ho comprato l'Arduino. Mi sono messo di "buzzo buono" ed ho pian piano imparato il C. Poi la curiosità mi ha portato a leggere il codice altrui per capire come fare certe cose che a me non riuscivano. Le funzioni dell'Arduino mi parevano limitate e per tante cose dovevi muoverti con il datasheet. Capito che dovevo lavorare con quello ed i registri per fare ciò che mi serviva, ho iniziato a sperimentare. Alla fine, poi ho imparato a sfruttare il micro in maniera diretta. Certo, qualche cosa è meglio farla con le funzioni di Arduino per non reinventare la ruota (vedi la seriale o una semplice lettura ADC) ma per compiti più complessi devi poi un po' barcamenarti perché altrimenti non puoi arrivarci solo con l'Arduino.
leo72:
Ti parlo a livello personale. I miei studi sono di tipo amatoriale, ho solo una grande passione che mi spinge ad approfondire queste cose.
Ho imparato a programmare tanti anni fa ma penso di esserci portato, come tutte le cose, perché riesco mentalmente a configurarmi un programma senza schemi su carta od altro. Mi viene naturale, così come a tanti di voi più "elettronici" viene naturale configurare mentalmente un circuito. Nello specifico dei microcontrollori, ho iniziato 2 anni e mezzo fa, quando ho comprato l'Arduino. Mi sono messo di "buzzo buono" ed ho pian piano imparato il C. Poi la curiosità mi ha portato a leggere il codice altrui per capire come fare certe cose che a me non riuscivano. Le funzioni dell'Arduino mi parevano limitate e per tante cose dovevi muoverti con il datasheet. Capito che dovevo lavorare con quello ed i registri per fare ciò che mi serviva, ho iniziato a sperimentare. Alla fine, poi ho imparato a sfruttare il micro in maniera diretta. Certo, qualche cosa è meglio farla con le funzioni di Arduino per non reinventare la ruota (vedi la seriale o una semplice lettura ADC) ma per compiti più complessi devi poi un po' barcamenarti perché altrimenti non puoi arrivarci solo con l'Arduino.
Allungo l'OT. Sono un programmatore professionista, ma di gestionali. Qualche volta fatto programmi per acquisizione dati da seriale per leggere dati da strumenti ma nulla di più. Sò poco di elettronica. Non ho problemi a leggermi manuali di programmazione. Non capisco quali info cercare per approfondire la conoscenza di Arduino dal punto di vista software.
1.Penso allora che sia necessario leggersi dal sito Amtel più info sul processore stesso.
2.Magari iniziare a provare anche ad utilizzare il loro programma IDE per lo sviluppo ?
ciao e grazie per le info.
nid69ita:
Allungo l'OT. Sono un programmatore professionista, ma di gestionali.
Qua dove lavoro usiamo su Linux un gestionale scritto da me stesso in Gambas ![]()
Non capisco quali info cercare per approfondire la conoscenza di Arduino dal punto di vista software.
1.Penso allora che sia necessario leggersi dal sito Amtel più info sul processore stesso.
Il primo passo è leggersi il datasheet del microcontrollore e sapere quindi cosa offre quella MCU.
Una volta fatto questo, uno si arma di pazienza ed inizia a buttare giù dei codici per usare quella risorsa. Alla fine, sono tutte periferiche i cui registri sono mappati in memoria e che sono accessibili mediante l'uso di particolari costanti predefinite dal compilatore.
Esempio, quando si parla di spengere l'ADC, si consiglia di fare così:
ADCSRA &= ~(1<<ADEN);
In questo modo metti a 0 il bit ADEN del registro ADCSRA che controlla appunto la linea di alimentazione del convertitore A/D
2.Magari iniziare a provare anche ad utilizzare il loro programma IDE per lo sviluppo ?
AvrStudio è disponibile solo per Windows (grossa pecca, secondo me) e compila codice C/C++. Non so se può essere impostato per compilare codice scritto per Arduino