Análise de código com motor de passo, estou tentando entender o Arduino.

bubulindo:
Acho que descobriste o teu problema...

Para fazer o que pretendes, eu olharia a implementar uma função que corre com base no tempo (pesquisa por Timer1 interrupt) e programaria ela para interromper o programa de x em x tempo para processar os passos em vez de bloquear o programa.

Falhando isso podes dar instruções mais pequenas de step() dando assim hipótese de processar código entre passos. Não é processamento paralelo, mas dará a sensação disso.

Quanto ao teu problema de não aceitar comandos, parece-me óbvio porquê... não podes ler da porta série em dois sítios diferentes. Imagina que tu mandas um comando para acender uma lampada, mas a função que é chamada logo a seguir é a controlandoPortao()... o que vai acontecer é que o comando é ignorado.

Assim sendo eu criaria uma função para tratar da porta série em separado dessas funções e mediante o comando recebido, executarias uma função para cada um dos comandos.

A função controlandoPortao() sozinha funciona bem. Sendo assim eu digo que o único problema é mesmo a porta série.