salve a tutti,
vorrei sapere se con Arduino esiste la possibilità, ad esempio, di continuare a far lampeggiare un led piuttosto che il backcolor di un display metre si esegue dell'altro codice.
grazie
salve a tutti,
vorrei sapere se con Arduino esiste la possibilità, ad esempio, di continuare a far lampeggiare un led piuttosto che il backcolor di un display metre si esegue dell'altro codice.
grazie
Certo, a tal proposito questo link potrebbe esserti illuminante:
Ci sono 2 metodi.
Il primo è quello più semplice e prevede l'uso di schedulare delle azioni a determinati intervalli semplicemente usando la funzione millis(). Per comprendere meglio il concetto, esamina l'esempio BlinkWithoutDelay: lì trovi 1 azione schedulata ogni 1000 ms, il lampeggio di un led, ma il concetto si può estendere ed applicare ad altri dispositivi.
L'altro metodo, più complesso e che prevede una conoscenza maggiore del microcontrollore, prevede di creare o riusare un simil sistema operativo real timer (RTOS) a cui affidare dei compiti da eseguire ad intervalli programmati.
Un'altro metodo, meno complesso rispetto al RTOS, è quello di sfruttare gli interrupt di un timer interno per eseguire codice a intervalli regolari. Ad esempio potresti mettere la logica del programma dentro il loop() e inserire il lampeggio del led dentro una chiamata interrupt.
(Hey Leo...vedo che ci siamo quasi ;))
leo72:
Ci sono 2 metodi.
Il primo è quello più semplice e prevede l'uso di schedulare delle azioni a determinati intervalli semplicemente usando la funzione millis(). Per comprendere meglio il concetto, esamina l'esempio BlinkWithoutDelay: lì trovi 1 azione schedulata ogni 1000 ms, il lampeggio di un led, ma il concetto si può estendere ed applicare ad altri dispositivi.L'altro metodo, più complesso e che prevede una conoscenza maggiore del microcontrollore, prevede di creare o riusare un simil sistema operativo real timer (RTOS) a cui affidare dei compiti da eseguire ad intervalli programmati.
oooh LLeo, stasera ti si tiene a parlare, così si festeggia, maremma diecimila!
dalubar:
Un'altro metodo, meno complesso rispetto al RTOS, è quello di sfruttare gli interrupt di un timer interno per eseguire codice a intervalli regolari. Ad esempio potresti mettere la logica del programma dentro il loop() e inserire il lampeggio del led dentro una chiamata interrupt.
Volevo inserirlo anche io. Però è bene sempre specificare che le operazioni da inserire negli interrupt devono essere poco impegnative in termini di risorse altrimenti si rischia di bloccare eccessivamente l'esecuzione del programma principale, e che non richiedano l'intervento di funzioni esterne pilotate da altri interrupt: il caso più semplice è l'impossibilità all'interno di un interrupt di usare la millis, ad esempio, per via del fatto che tale funzione è agganciata ad un altro interrupt. E la chiamata ad un interrupt disattiva gli altri interrupt.
(Hey Leo...vedo che ci siamo quasi ;))
Uh oh....
oooh LLeo, stasera ti si tiene a parlare, così si festeggia, maremma diecimila! smiley-grin
Mike, ci penso io XD
Però è bene sempre specificare che le operazioni da inserire negli interrupt devono essere poco impegnative in termini di risorse altrimenti si rischia di bloccare eccessivamente l'esecuzione del programma principale, e che non richiedano l'intervento di funzioni esterne pilotate da altri interrupt: il caso più semplice è l'impossibilità all'interno di un interrupt di usare la millis, ad esempio, per via del fatto che tale funzione è agganciata ad un altro interrupt. E la chiamata ad un interrupt disattiva gli altri interrupt.
Infatti ho specificato che poteva usare una funzione molto semplice come il lampeggio che non è impegnativa in termini di risorse.
E' vero che non si può usare la millis() ma come abbiamo visto ormai la delayMicroseconds() è stata ampiamente "sdoganata" e ho notato che viene usata anche da sviluppatori "seri" dentro le interrupt services XD
Se mi chiamano in causa, come posso non rispondere?
dalubar:
oooh LLeo, stasera ti si tiene a parlare, così si festeggia, maremma diecimila! smiley-grin
Mike, ci penso io XD
Bravo bravo
Però è bene sempre specificare che le operazioni da inserire negli interrupt devono essere poco impegnative in termini di risorse altrimenti si rischia di bloccare eccessivamente l'esecuzione del programma principale, e che non richiedano l'intervento di funzioni esterne pilotate da altri interrupt: il caso più semplice è l'impossibilità all'interno di un interrupt di usare la millis, ad esempio, per via del fatto che tale funzione è agganciata ad un altro interrupt. E la chiamata ad un interrupt disattiva gli altri interrupt.
Infatti ho specificato che poteva usare una funzione molto semplice come il lampeggio che non è impegnativa in termini di risorse.
E' vero che non si può usare la millis() ma come abbiamo visto ormai la delayMicroseconds() è stata ampiamente "sdoganata" e ho notato che viene usata anche da sviluppatori "seri" dentro le interrupt services XD
[/quote]
Vero, però se uno non sa dei problemi di millis all'interno di interrupt immagino che non abbia le conoscenze per sapere che delayMicroseconds non è invece affetta da questo problema.
Bene, detto questo...Mike stai pronto con la bottiglia
Già 10K!???
Beh, congratulazioni "Shannon member"
Mike stai pronto con la bottiglia
Detto...fatto!
dalubar:
Mike stai pronto con la bottiglia
Detto...fatto!
ti sembro il tipo che si tira indietro per una bottiglia di champagne?
Me ne guarderei bene dal pensarlo.
Leo, nel frattempo sarà andato a festeggiare con gli amici XD
dalubar:
[quote author=Michele Menniti link=topic=110081.msg826618#msg826618 date=1339706279]
ti sembro il tipo che si tira indietro per una bottiglia di champagne?
Me ne guarderei bene dal pensarlo.
Leo, nel frattempo sarà andato a festeggiare con gli amici XD
[/quote]
sarà crollato per lo stress
ehi, io ho passato quota 6000, si festeggia tutti stasera
Non me ne ero neanche accorto perché i 10K li ho passati rispondendo in un altro thread XD XD XD
ehi, io ho passato quota 6000, si festeggia tutti stasera
Auguri anche a te, Mike... 6000 post sono anch'essi un traguardo di tutto rispetto.
dalubar:
ehi, io ho passato quota 6000, si festeggia tutti stasera
Auguri anche a te, Mike... 6000 post sono anch'essi un traguardo di tutto rispetto.
già 16000 minchiate in due sembrano un clock espresso in KHz
SUPER ROTFL