Skip to content
logo9minuti120x48
Menu
  • Home
  • Tutorial
    • Zaini
    • Stampa 3d
    • ebook
    • Informatica
  • Scritti
    • Racconti
    • Articoli
    • Temi
    • Storia
  • Video
  • Progetti
    • Progetto Carcere
    • Progetto Istruzione
    • Progetto Acque pulite
    • Progetto Tecnologia
    • Progetto Casa
    • Progetto Democrazia
    • Progetto Immigrazione
    • Storia
    • Progetto Storia
  • Chi siamo
    • LinkTree
  • Privacy Policy
    • Cookie Policy (EU)
  • Blog
  • Donazioni
Menu
multithread con Arduino e la libreria TimedAction

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

Posted on 24 Settembre 201815 Settembre 2019 by Alessandro Oppo

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.

Indice

  • Ma cos’è il multithread e perché ci serve?
  • Ma se invece volessimo leggerle in contemporanea, possiamo farlo?
  • Dalla teoria alla pratica
  • Lo sketch

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.

Si sta come
d’autunno
sugli alberi
le foglie.


Nel mezzo del cammin di nostra vita
mi ritrovai per una selva oscura,
ché la diritta via era smarrita.

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.

Primo Thread                               Secondo Thread 

Si sta come                                Nel mezzo del cammin di nostra vita
d’autunno                                  mi ritrovai per una selva oscura,
sugli alberi                               ché la diritta via era smarrita.
le foglie.

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.

Si sta come
Nel mezzo del cammin di nostra vita 
d’autunno
mi ritrovai per una selva oscura, 
sugli alberi
ché la diritta via era smarrita.
le foglie.

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.

#include <TimedAction.h>

#define button 8
#define led 13
int minutes = 0;

void checkButton(){
  if (ditalRead(button) == TRUE){
    digitalWrite(led, HIGH);
  }
  else{
    digitalWrite(led, LOW);
  }
}

void minutesCounter(){
  minutes++;
  Serial.print("Minuti trascorsi: " + minutes );
}

TimedAction TimedAction_checkButton = TimedAction(100, checkButton);
TimedAction TimedAction_minutesCounter = TimedAction(60000, minutesCounter);

void setup() {
  pinMode(led, OUTPUT);
  pinMode(button, INPUT);
  Serial.begin(9600);
}

void loop() {
  TimedAction_checkButton.check();
  TimedAction_minutesCounter.check();
}

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

Dammi un 5 virtuale, clicca like e condividi.

  • Fai clic qui per condividere su LinkedIn (Si apre in una nuova finestra) LinkedIn
  • Fai clic per condividere su Facebook (Si apre in una nuova finestra) Facebook
  • Fai clic per condividere su X (Si apre in una nuova finestra) X
  • Fai clic qui per condividere su Reddit (Si apre in una nuova finestra) Reddit
  • Fai clic per condividere su WhatsApp (Si apre in una nuova finestra) WhatsApp
  • Fai clic per condividere su Telegram (Si apre in una nuova finestra) Telegram
  • Fai clic per inviare un link a un amico via e-mail (Si apre in una nuova finestra) E-mail

Related

1 thought on “Multithread con Arduino e la libreria TimedAction ( come simularlo con il protothreading)”

  1. giaaìnni giaaìnni ha detto:
    3 Maggio 2024 alle 9:40 am

    metti la lettera maiuscola sul tuo nome alla fine, mi urta

    Rispondi

Cosa ne pensi? Fammelo sapere con un messaggioAnnulla risposta

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

Scoprici sui social

  • YouTube
  • Telegram
  • Facebook
  • RSS Feed

    Ultimi post

    • Dave dei Vallanzaska: AI, Milano e venti di guerra – Riflessioni su 30 anni di cambiamenti
    • Libri e Social: Intervista a Sam di Rivista Matrioska | Come Creare un Progetto Culturale Online
    • Solo l’occidente conosce la Storia? Dialogo col Professor Adolfo Scotto Di Luzio
    • Ponti sospesi: cosa abbiamo sbagliato? cosa si potrebbe fare?
    • Siamo quel che facciamo? – racconto breve
    • Il limite è sempre la mente – Racconto breve
    • L’ultimo giorno del carcere – Racconto breve

    Newsletter

    • YouTube
    • Facebook
    • Telegram
    • Dave dei Vallanzaska: AI, Milano e venti di guerra – Riflessioni su 30 anni di cambiamenti
      di Alessandro Oppo
    • Libri e Social: Intervista a Sam di Rivista Matrioska | Come Creare un Progetto Culturale Online
      di Alessandro Oppo
    • Solo l’occidente conosce la Storia? Dialogo col Professor Adolfo Scotto Di Luzio
      di Alessandro Oppo
    • Ponti sospesi: cosa abbiamo sbagliato? cosa si potrebbe fare?
      di Alessandro Oppo
    • Siamo quel che facciamo? – racconto breve
      di Alessandro Oppo

    ©2025 9minuti | Design: Newspaperly WordPress Theme
    Manage Cookie Consent
    Usiamo cookie per ottimizzare il nostro sito web ed i nostri servizi.
    Cookie funzionali Sempre attivo
    The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
    Preferences
    The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
    Statistics
    The technical storage or access that is used exclusively for statistical purposes. The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
    Marketing
    The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
    Gestisci opzioni Gestisci servizi Gestisci {vendor_count} fornitori Per saperne di più su questi scopi
    Visualizza preference
    {title} {title} {title}
     

    Caricamento commenti...