Multithread con Arduino e la libreria TimedAction ( come simularlo con il protothreading)

Multithread con Arduino e la libreria TimedAction: come simularlo?

Benvenuti su 9minuti.it, oggi vedremo una libreria molto utile e che può semplificarci la vita in tanti casi.

Sto parlando di simulare il multithread con Arduino e la libreria TimedAction.

Arduino, di suo, non ha il supporto per il multithread e quindi va simulato.

Ma cos’è il multithread e perché ci serve?

Abbiamo visto come nella programmazione si parta dall’alto e si vada verso il basso, a volte però è necessario eseguire più programmi in maniera simultanea e in questo caso parliamo di programmazione concorrente.

Vorrei ora fare un esempio che ha a che fare poco con l’informatica ma che credo possa spiegare bene il concetto.

Prendiamo due testi, il primo è la poesia Soldati di Giuseppe Ungaretti e il secondo sono le prime tre strofe della Divina Commedia di Dante Alighieri.
Se fossero righe di un programma (o di un testo in generale) partiremmo dalla prima e finiremmo con l’ultima.

Ma se invece volessimo leggerle in contemporanea, possiamo farlo?

Il processori degli attuali computer sono multi core, multithread e addirittura a volte multi processore.

Essi non avrebbero alcun problema ad eseguire i due testi in maniera simultanea.

Qui sotto un esempio dei due testi visti come due thread differenti eseguiti nello stesso esatto momento.

Arduino purtroppo però non supporta il multithreading. 🙁

Ed è qui che vediamo come simulare il multithread con Arduino e la libreria TimedAction, per far questo dobbiamo però introdurre una nuova parola: protothreading.

Nell’esempio sottostante vediamo un esempio di come agisce il protothreading, ovvero legge una riga di un testo e subito dopo quella dell’altro, in maniera alternata.

Ecco perché, quando si parla di protothreading, non possiamo parlare esattamente di contemporaneità.

Il microcontrollore di Arduino è però così veloce che nella grandissima maggioranza dei casi non noteremo alcun ritardo.

Dalla teoria alla pratica

Necessario:

  • Arduino Uno
  • Pulsante
  • Resistenza da 10k ohm

Collegamento del pulsante

Collegamento del pulsante

Lo sketch

Scarichiamo la libreria TimedAction se non sapete come farlo vi mando a questa guida.

Nell’esempio seguente vedremo come eseguire due funzioni quasi contemporaneamente in maniera da simulare il multithread con Arduino e la libreria TimedAction.

La prima funzione controllerà se un pulsante viene premuto e accenderà il led integrato collegato al pin 13. La seconda invece stamperà a schermo una stringa ogni minuto.

1 – Includiamo la libreria TimedAction

3, 4 – Usiamo le define per i pin del led e del bottone

5 – Dichiariamo la variabile di tipo intero minutes che verrà incrementata ad ogni minuto

7 – Iniziamo a scrivere la nostra funzione checkButton() di tipo void

8 – Se lo stato del pin 8 è attivo

9 – Allora accendiamo il pin 13

11 – Altrimenti

12 – Spegnamo il pin 13

16 – Iniziamo a scrivere la nostra funzione minutesCounter() di tipo void

17 – Incrementiamo di 1 la nostra variabile minutes

18 – Scriviamo a schermo “Minuti trascorsi: ” e il numero contenuto all’interno della variabile minutes

21 – Creiamo un oggetto di tipo TimedAction chiamato TimedAction_checkButton e lo inzializziamo con la funzione TimedAction().

Questa funzione riceve due parametri, uno è ogni quanto tempo vogliamo che la nostra funzione venga eseguita, in questo caso ogni 100 millisecondi. Il secondo invece è il nome della nostra funzione senza le parentesi tonde.

22 – Facciamo la medesima cosa per la seconda funzione. Come avrete visto la eseguiamo una volta ogni 60 secondi, in maniera da avere un minuto preciso.

25, 26 – Dichiariamo i pin che andremo ad utilizzare. In output per il led ed in input per il bottone.

27 – Attraverso il metodo begin() dell’oggetto Serial possiamo stampare a schermo la nostra stringa

31, 32 – Usiamo il metodo check() dei nostri oggetti di tipo TimedAction precedentemente creati

Se tutto è andato bene dovreste vedere… Anzi no, non ve lo dico, tanto ormai dovreste aver capito.

Come al solito rimango disponibile per qualsivoglia chiarimento!

Grazie,
alessandro

Alessandro

Alessandro è un milanese che vorrebbe scappare da Milano, è appassionato di informatica ma vorrebbe vivere senza telefono, è un artigiano eppure vorrebbe robotizzare tutto, impara una cosa e già vorrebbe studiare dell’altro. Autodidatta da sempre, gli piace sbattere la testa finché tutto non funziona come vuole lui, spesso ci riesce anche! Il motto che si ripete dentro la testa è: “Se ci sono riusciti gli altri ci posso riuscire anche io”.

You may also like...

Cosa ne pensi? Fammelo sapere con un messaggio

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

%d blogger hanno fatto clic su Mi Piace per questo: