Salve a tutti!
Volevo chiedervi se sapete un modo (e se esiste) per generare un ciclo infinito dentro al loop di default di arduino.. in pratica una specie di concorrenza.. ovvero mentre un sensore mi legge continuamente dei valori altre parti (dei motori) si muovono contemporaneamente...
Mi sareste di grande aiuto!
Graziee
Basta usare un qualsiasi statement di controllo per cicli (while, for, do ... while) creando una condizione dalla quale non si esce mai. Esempio ...
while (true) { ....... }
una volta entrato, NON esci più se non con l'uso dell'istruzione "break". Idem con :
for ( ; ; ) { ....... }
Guglielmo
Ok grazie mille!
PS: le farò sapere per l'HC-05 quando arriva ![]()
Secondo me fai un errore concettuale pensando che Ti serve un ciclo all interno dell loop()
Arduino non ha un multitasking. Arduino fa una cosa dopo l' altra.
Puoi controllare un sensore e quando si verifica una certa condizione pilotare diversamente il motore.
Ciao Uwe
Volevo chiedervi se sapete un modo (e se esiste) per generare un ciclo infinito dentro al loop di default di arduino.. in pratica una specie di concorrenza..
Secondo me fai un errore concettuale pensando che Ti serve un ciclo all interno dell loop()
Infatti, la "concorrenza" in arduino non si può realizzare nel modo simile a come viene fatta sul PC, dove c'è un sistema operativo e dove l'hardware è pensato per favorire certi servizi offerti dal sistema operativo.
Con arduino si può provare ad usare un RTOS (Real Time Operative System), ma questo si mangia un poco di risorse, normalmente si riesce a fare a meno di un RTOS impiegando una FSM(Finite State Machine), cioè una macchina a stati finiti.
Grazie al controllo diretto dell'hardware possiamo usare gli interrupt che concettualmente servono al seguente scopo:
Mettere in pausa il flusso di esecuzione per saltare ad una subroutine di gestione dell'interrupt, salto che avviene a seguito di un evento sollevato via hardware, ad esempio il "core" arduino usa gli interrupt nella gestione della porta UART TTL.
Ciao.
Ok! Grazie mille a tutti! Io chiedevo perchè era una faccenda che non mi aveva mai interessato e sinceramente non sapevo se poteva avere un multitasking... mi immaginavo che comunque poteva svolgere solo un'operazione dietro all'altra...Grazie!
>LucaAlba98: Ti consiglio la lettura di QUESTO articolo ed eventualmente l'annessa libreria ![]()
Guglielmo
MauroTec:
Grazie al controllo diretto dell'hardware possiamo usare gli interrupt che concettualmente servono al seguente scopo:
In ambito mcu è da diversi anni che si usa la tecnica di programmazione interrupt driven dove tutto, o quasi tutto, è gestito tramite interrupt, in pratica il main loop può essere totalmente vuoto perché non fa altro che attendere un interrupt.
Su Arduino lavorare interrupt driver è possibile a patto di lasciar perdere wiring e lavorare in C puro datasheet alla mano. ![]()