all'interno della ISR scrivi il codice per gestire cosa sta succendendo, e se necessario ci sono 2 vie:
- setti un flag, che poi verrà usata nel loop. Ottima opzione per evitare che l'interrupt duri troppo e incasini timer e PWM etc..
- fai la gestione del caso sempre all'interno dell'interrupt, ma devi giostare il fatto che i timer NON avanzano all'interno di un'interrupt, il che può essere problematico.
per esempio: ogni interrupt calcoli il tempo dall'ultimo interrupt (perchè ti salvi il tempo esecuzione dell'ultimo interrupt), se il tempo supera una soglia X allora parte il caso "speciale", e scegli se gestirlo con il metodo 1. o 2.
Consiglio il metodo 1.