Interrompere TONE durante il suo svolgimento

Ciao a tutti!

Avrei una domanda e sarei grato a chi mi aiutasse a risolverla:

Avrei la necessita di interrompere una qualsiasi azione (non posto il codice perché è proprio generica come domanda e vorrei applicarla in più situazioni, non solo in questo codice) che sta compiendo Arduino nel LOOP che magari ha al suo interno dei delay e una svariata lista di istruzioni da eseguire: come è possibile, premendo un tasto di un telecomando o un pulsante (o altro), passare immediatamente all'azione collegata a quel tasto/telecomando interrompendo "brutalmente" ciò che Arduino stava facendo?

Spero di essere stato il più chiaro possibile e mi scuso già da subito se risulterà essere una domanda piuttosto banale, ma per me non lo è affatto.

Grazie a tutti.

Davide

Con un interrupt

noTone()

In generale, non è il metodo giusto: il loop deve scorrere continuamente, verificando anche lo stato dei pulsanti. Ciò implica che non puoi usare con disinvoltura i delay.

davideerio97:
Avrei la necessita di interrompere una qualsiasi azione (non posto il codice perché è proprio generica come domanda e vorrei applicarla in più situazioni, non solo in questo codice) che sta compiendo Arduino nel LOOP che magari ha al suo interno dei delay e una svariata lista di istruzioni da eseguire:

Devi scrivere il programma come una macchina a stati finiti, naturalmente i delay sono da evitare.
Sinteticamente, il loop scorre senza intoppi e senza blocchi verificando se ci sono cambi di stato (pulsante premuto, etc), se non ci sono, esegue lo stato corrente, altrimenti esegue il nuovo stato (interruzione, etc).

Ti consiglio la lettura di questo articolo Nota 1 e di questo post, inoltre se cerchi "programmazione a stati" o "stati finiti" in questo forum, troverai molto materiale.

Federico

PS
Non mi è chiaro cosa c'entra il Tone(), visto che il tuo è un discorso generale, comunque se scrivi il programma a stati, premi un pulsante, quindi effettui un cambio stato che esegue un noTone().

Nota 1
Attenzione, nell'articolo si parla di multitasking, ebbene:

Maurotec:
...impiegare uno o più macchine a stati non equivale a realizzare un sistema multitasking, questo perché il concetto di task applicato ad una MCU priva si supporto al multitask è una forzatura.

vedi questo post per chiarimenti a tal proposito.