Problemas com Led e função While

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

sobre o led 1, tente usar outra porta... a porta 0 e 1 sao usadas para comunicacao da serial... use as portas 2 a 5;

o problema do while é que o programa fica preso eternamente neles, pois quando ele entra no while o programa nunca mais le o que vem da serial...
troque o while por IF, desta forma ele executara o IF e depois far a leitura da serial novamente...