Non ho seguito la logica del programma, ma mi pare evidente che hai bisogno di
capire qualcosa di più sul C/C++, in particolare il blocchi e scope.
I blocchi servono per delimitare una porzione di codice. I delimitatori sono {}, ciò che è contenuto dentro le parentesi graffe
è un blocco di codice.
I blocchi sono funzionalità indipendenti, non strettamente legate ad altre parole chiave, quindi un blocco di codice
può apparire nel modo in cui lo usi tu, ma ha una finalità specifica che nel tuo caso non risulta evidente dal codice.
La necessità di ricorrere ad un blocco di codice a se stante deve essere presente altrimenti chi legge il codice
potrebbe fare assunzioni errate.
L'unica necessità di ricorrere ad un blocco a se stante che mi viene in mente è quella in cui devi manipolare degli
oggetti transitori o usare degli oggetti transitori di dimensioni grandi che operano su dei dati globali. In questo caso
creare un blocco di codice mi da la possibilità di creare oggetti corposi (di grandi dimensioni) lasciare che questi manipolino le informazioni
e lasciare al blocco l'onere di distruggere gli oggetti ingombranti che ho creato dentro il blocco, difatti tutto quello che creo dentro un
blocco di code cessa di esistere al termine del blocco di codice, cioè dopo la chiusura del blocco con "}".
Un blocco può anche essere rischiesto dalla sintassi, es una funzione è delimitata obbligatoriamente da un blocco di codice, pertanto
le variabili create dentro le funzioni esistono solo al suo interno, quindi si dice che sono locali. Sono locali perchè è la caratteristica del blocco
di codice e non perché si tratta di una funzione.
I blocchi possono essere opzionali quando legati ad alcune parole chiave, vedi if, for, while ecc.
if (app.state() == FINISH)
app.next();
Come si vede non è necessario usare le graffe per delimitare il blocco dopo la if, perchè si tratta di una sola istruzione. Invece il blocco è necessario nel secondo
esempio:
if (ch == 'x' || ch == 'X') {
switchOffMotor();
lcd.print("motor off);
}
Se non usassi il blocco l'istruzione lcd.print() verrebbe eseguita indipendentemente dalla condizione testata dalla if.
La forma di if else che necessità di blocchi è la seguente:
if (condizione)
{ // apre il blocco
1 linea
2 linea
n linea
} else { // chiude il blocco e apre un altro blocco "else"
codice
codice
....
}
Altra forma prevede al posto di else, l'istruzione composta else if (condizione)
if (ch == 'x')
{
codice
codice
.......
} else if (ch == 'y') {
codice
codice
codice
} else if (ch == 'z') {
codice
codice
codice
}
Quindi se non hai buoni motivi per isolare del codice all'interno di un blocco non usarlo e inutile e fuorviante.
Ciao.