Arduino, di default, non supporta il vero multi-threading come fanno i sistemi operativi come Linux o Windows. Questo perché la maggior parte delle schede Arduino utilizza microcontrollori con processori single-core, privi di un sistema operativo per la gestione dei thread.
Tuttavia, è possibile simulare il multi-threading in diversi modi:
1. Utilizzo di millis() per il multitasking
Invece di usare delay(), è possibile utilizzare la funzione millis() per tenere traccia del tempo ed eseguire più attività in modo apparentemente parallelo. Questo approccio non blocca l'esecuzione del programma e consente di gestire più operazioni basate su intervalli di tempo.
Esempio: https://pastebin.com/SA0uScc6
2. Uso di librerie per la gestione dei task
Alcune librerie permettono di simulare il multi-threading attraverso la pianificazione delle attività. Queste librerie suddividono i compiti in piccoli frammenti ed eseguono ogni attività in sequenza.
-
- Scheduler (disponibile per alcune schede Arduino come l’Arduino Due)
- TaskScheduler, una libreria di terze parti molto diffusa per gestire attività pianificate.
Esempio con TaskScheduler: https://pastebin.com/5t78h234
3. Supporto al multi-threading su ESP32
Se stai utilizzando un ESP32, che ha due core, puoi sfruttare FreeRTOS (incluso nel framework Arduino per ESP32) per implementare un vero multi-threading. FreeRTOS permette di eseguire più task in parallelo su core separati.
Esempio con FreeRTOS su ESP32: https://pastebin.com/h6DbQF5z
Sulle piattaforme come ESP32, FreeRTOS rende possibile il vero multi-threading, migliorando significativamente la gestione delle operazioni in parallelo.
Quale soluzione fa al caso tuo? Proviamole insieme su pleasedontcode.com!
21 Febbraio 2025 di Alessandro Colucci