#include <NoDelay.h>
#include <string.h>

// Definir pines
const unsigned int PIN1 = 2;
const unsigned int PIN2 = 4;
const unsigned int PIN3 = 12;
const unsigned int PIN4 = 13;

const unsigned int BAUD_RATE = 115200;

const long PAUSA = 250;

int i = 0;

const int pins[] = {PIN1, PIN2, PIN3, PIN4};

typedef enum {
  ltr,
  rtl,
  off
} estadoLeds;

estadoLeds edoLuz;

noDelay pausa(PAUSA);

void ltrLuces();
void rtlLuces();
void parpadear();
void offLuces();

void setup() {
  // Inicializar pines como salidas
  pinMode(PIN1, OUTPUT);
  pinMode(PIN2, OUTPUT);
  pinMode(PIN3, OUTPUT);
  pinMode(PIN4, OUTPUT);

  Serial.begin(BAUD_RATE);

  offLuces();
}

void loop() {
  char comando[6];

  if (Serial.available() > 0) {
    // Lee a lo mas 5 caracteres del puero serie o hasta que se
    // presione la tecla Enter y los guarda en el arreglo
    // comando.
    int n = Serial.readBytesUntil('\n', comando, 5);
    // Todas las cadenas en C/C++ terminan en el carácter de
    // fin de cadena, ‘\n’.
    comando[n] = '\0';
    // Escribe el comando al puerto serie
    Serial.print("Comando: ");
    Serial.println(comando);

    if (pausa.update()) {

    switch (edoLuz){
      case off:
        if(strcmp(comando, "ltr") == 0){
          ltrLuces();
          edoLuz = ltr;
        }
        else if(strcmp(comando, "rtl") == 0){
          rtlLuces();
          edoLuz = rtl;
        }
        else{
          parpadear();
        }

      case ltr:
        ltrLuces();
        if(strcmp(comando, "off") == 0){
          offLuces();
          edoLuz = off;
        }
        else{
          parpadear();
        }

      case rtl:
        if(strcmp(comando, "off") == 0){
          offLuces();
          edoLuz = off;
        }
        else{
          parpadear();
        }
    }
  }
  }

  


}

void offLuces() {
  digitalWrite(PIN1, LOW);
  digitalWrite(PIN2, LOW);
  digitalWrite(PIN3, LOW);
  digitalWrite(PIN4, LOW);
}

void ltrLuces() {
  if (i == 3) {
    i = 0;
    digitalWrite(pins[3], LOW);
    digitalWrite(pins[i], HIGH);
  }
  else {
    digitalWrite(pins[i], LOW);
    digitalWrite(pins[++i], HIGH);
  }

}

void rtlLuces() {
  if (i == 0) {
    i = 3;
    digitalWrite(pins[0], LOW);
    digitalWrite(pins[i], HIGH);
  }
  else {
    digitalWrite(pins[i], LOW);
    digitalWrite(pins[--i], HIGH);
  }
}

void parpadear() {
  if (i == 0) {
    i = 2;
    digitalWrite(PIN1, HIGH);
    digitalWrite(PIN2, HIGH);
    digitalWrite(PIN3, HIGH);
    digitalWrite(PIN4, HIGH);
  }
  else {
    digitalWrite(PIN1, LOW);
    digitalWrite(PIN2, LOW);
    digitalWrite(PIN3, LOW);
    digitalWrite(PIN4, LOW);
    i = 0;
  }
}

$abcdeabcde151015202530354045505560fghijfghij