problema con lenguaje

HOla amigos

Tengo un problemilla con un programa que intento hacer y no hallo la solución y recurro a vosotros a ver si alguien me echa una mano

intento mediante comunicacion serial que al escribir en el monitor la letra A, se enciendan los tres leds,
cuando escribo la letra B, se encienden el primer led un segundo y se apaga al cabo de un segundo para luego encender el segundo led y apagarse y asi sucesivamente hasta el tercero
cuando escribo la letra C, pretendo que se apaguen todos los leds

el problema es que o bien, no salgo del bucle de la letra B, o bien, solo me ejecuta la rutina correspondiente a B, una sola vez, y yo pretendo que mientras no le diga A o C, siga haciendo la rutina esta de encender o apagar los leds

aqui os dejo el programa

/*
Escritura Serial

*/

int led1 = 13;
int led2 = 12;
int led3 = 8;
int pinArray[]={13,12,8};
int count=0;
int timer=1000;
char leer;

//Funcio principal
void setup()
{
Serial.begin(9600); //Inicia la comunicació serial
pinMode(led1,OUTPUT);
pinMode(led2,OUTPUT);
pinMode(led3,OUTPUT);
}
//Funció ciclica
void loop()
{

int leer=Serial.read();

if (leer=='a')
{
digitalWrite(led1,HIGH);//encen el LED
digitalWrite(led2,HIGH);//encen el LED
digitalWrite(led3,HIGH);//encen el LED
}
if (leer=='b')

{
for (count=0;count<3;count++)
{
digitalWrite(pinArray[count],HIGH);
delay (timer);
digitalWrite(pinArray[count],LOW);
delay(timer);
}
}

if (leer=='c')
{
digitalWrite(led1,LOW);//apaga el LED1

digitalWrite(led2,LOW);//apaga el LED2

digitalWrite(led3,LOW);//apaga el LED3

}

}
//Fin del programa

Alguien puede decirme que es lo que hago mal, para que o bien pueda salir de la rutina correspondiente a la letra B, cuando escribo A o C, o bien lo haga indefinidamente hasta que reciba otra orden

Gracias por adelantado

Buenas, no soy muy entendido y no tengo aqui compilador para probarlo, pero pueba a cambiar:

void loop()
{

int leer=Serial.read();
...

por

...
leer=Serial.read();
...