Non sono per niente esperto per quanto riguarda Arduino e quindi non posso darti la conferma che il problema sia dovuto solo da quello (anzi, probabilmente non lo è), ma è un inizio...
Allora, prima di tutto mi sfugge il senso degli if annidati all'interno del ciclo while, come tu stesso hai intuito, e soprattutto di quegli or.
Per snellire un attimo il codice prima di tutto fai uno switch-case
switch (comando) {
case 'a':
S1_abilitato = true;
S1_direzione = true;
break;
case 'b':
S1_abilitato = true;
S1_direzione = false;
break;
case 'c':
S1_abilitato = false;
break;
case 'd':
S2_abilitato = true;
S2_direzione = true;
break;
case 'e':
S2_abilitato = true;
S2_direzione = false;
break;
case 'f':
S2_abilitato = false;
break;
case 'g':
S3_abilitato = true;
S3_direzione = true;
break;
case 'h':
S3_abilitato = true;
S3_direzione = false;
break;
case 'i':
S3_abilitato = false;
break;
case 'l':
S4_abilitato = true;
S4_direzione = true;
break;
case 'm':
S4_abilitato = true;
S4_direzione = false;
break;
case 'n':
S4_abilitato = false;
break;
case 't':
InizializzazioneFUNCT();
break;
}