Se funziona tutto ok, non è malvagio come programma!
Però io modificherei qualcosa,
uno mi sembra che la variabile booleana non serva a niente, hai i sensori di fine corsa che attivano o disattivano, esempio non esegue due volte chiudi, e non esegue due volte apri, perché i sensori sono attivi e non permettono questo.
Due, comandi da seriale, apri o pedonoale, dovresti mettere tre condizioni, in modo da avere un effetto un po più interessante.
if (c== 's') {//Gestione automatica
apri();
delay(3000);
chiudi();
}
else if ( c == 'p') {
pedonale();
}
else if(c=='a'){
apri();
}
else if(c=='c'){
chiudi();
}
// la variabile i non serve