São dois problemas:
O led_1 não pisca ele permanece aceso, enquanto que os outros piscam.
Eu só consigo dar uma resposta para a variável recebido, isto é ela não recebe outro valor além do primeiro digitado, neste caso seria para ele produzir a sua respectiva função até que outro valor fosse digitado.
Começa com os leds fazendo um sequencial de piscas da esquerda para a direita
Se digitar A a sequencia dos leds permanece invertida.
Se digitar B todos os leds permanecem apagados.
Se digitar C todos os leds permanecem ascesos.
Se digitar D o código é resetado
int recebido;
int recebido2 = '0';
int led_1 = 1;
int led_2 = 2;
int led_3 = 3;
int led_4 = 4;
void setup()
{
pinMode(led_1, OUTPUT);
pinMode(led_2, OUTPUT);
pinMode(led_3, OUTPUT);
pinMode(led_4, OUTPUT);
Serial.begin(9600);
}
void(* resetFunc)(void)=0;
void loop()
{
digitalWrite(led_1, HIGH);
delay(250);
digitalWrite(led_1, LOW);
delay(250);
digitalWrite(led_2, HIGH);
delay(250);
digitalWrite(led_2, LOW);
delay(250);
digitalWrite(led_3, HIGH);
delay(250);
digitalWrite(led_3, LOW);
delay(250);
digitalWrite(led_4, HIGH);
delay(250);
digitalWrite(led_4, LOW);
delay(250);
if(Serial.available()>0){
recebido = Serial.read();
while (recebido == 'a'){
digitalWrite(led_4, HIGH);
delay(250);
digitalWrite(led_4, LOW);
delay(250);
digitalWrite(led_3, HIGH);
delay(250);
digitalWrite(led_3, LOW);
delay(250);
digitalWrite(led_2, HIGH);
delay(250);
digitalWrite(led_2, LOW);
delay(250);
digitalWrite(led_1, HIGH);
delay(250);
digitalWrite(led_1, LOW);
delay(250);
recebido2 == '5';
}
while (recebido == 'b'){
digitalWrite(led_4, LOW);
digitalWrite(led_3, LOW);
digitalWrite(led_2, LOW);
digitalWrite(led_1, LOW);
recebido2 == '5';
}
while (recebido == 'c'){
digitalWrite(led_4, HIGH);
digitalWrite(led_3, HIGH);
digitalWrite(led_2, HIGH);
digitalWrite(led_1, HIGH);
recebido2 == '5';
}
while (recebido == 'd'){
resetFunc();
}
}
}