Ottimizzazione codice - 4 motori passopasso lentissimi

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;
  }