Programación de arduino

Hola, necesito ayuda con un programa, les explico, necesito hacer que cuando mande la letra "a" al monitor serie haga parpadear 2 leds y cuando mande "b" haga encender otros 2 leds y cuando mande "c" tiene que hacer parpadear otros 2 leds indefinidamente, el problema es que cuando mando una letra solo parpadea una vez y no lo vuelve hacer.

char dato;
int a=16;//d0
int b=5;//d1
int c=4;//d2
int d=0;//d3
int e=2;//d4
int f=14;//d5

void setup() {
Serial.begin(115200);
pinMode(a,OUTPUT);
pinMode(b,OUTPUT);
pinMode(c,OUTPUT);
pinMode(d,OUTPUT);
pinMode(e,OUTPUT);
pinMode(f,OUTPUT);

}

void loop() {
if(Serial.available()>0)
{
dato=Serial.read();
Serial.println(dato);
if(dato=='a'){
off();
digitalWrite(a,HIGH);//0
digitalWrite(b,HIGH);
delay(500);
digitalWrite(a,LOW);
digitalWrite(b,LOW);
delay(500);

}
if(dato=='b'){
off();
digitalWrite(c,HIGH);
digitalWrite(d,HIGH);

}
if(dato=='c'){
off();
digitalWrite(e,HIGH);
digitalWrite(f,HIGH);
delay(500);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
delay(500);
}

}

}

void off(){
digitalWrite(a,LOW);
digitalWrite(b,LOW);
digitalWrite(c,LOW);
digitalWrite(d,LOW);
digitalWrite(e,LOW);
digitalWrite(f,LOW);
}

Lee las normas del foro y edita tu post usando etiquetas </>

Buen dia

lo que pasa es que declaras que enciendan los leds y que se apaguen en el mismo if
ejemplo:

if(dato=='a'){
  digitalWrite(a,HIGH);
  digitalWrite(b,HIGH);
  digitalWrite(c,LOW);
  digitalWrite(d,LOW);
  digitalWrite(e,LOW);
  digitalWrite(f,LOW);
}

espero te de una idea bro..

Prueba esto.

char dato;
const byte a=16;       //d0
const byte b=5;        //d1
const byte c=4;        //d2
const byte d=0;        //d3
const byte e=2;        //d4
const byte f=14;       //d5
bool dato1,dato2,dato3;
unsigned long t;

void setup() {
   Serial.begin(115200);
   pinMode(a, OUTPUT);
   pinMode(b, OUTPUT);
   pinMode(c, OUTPUT);
   pinMode(d, OUTPUT);
   pinMode(e, OUTPUT);
   pinMode(f, OUTPUT);
}

void loop() {
   if (Serial.available()>0){
      dato = Serial.read();
      Serial.println(dato);
      switch (dato){
      case 'a':
         dato1 = true;
         dato2 = false;
         dato3 = false;
         break;
      case 'b':
         dato1 = false;
         dato2 = true;
         dato3 = false;
         break;
      case 'c':
         dato1 = false;
         dato2 = false;
         dato3 = true;
         break;
      }
      off();
   }
   if (millis()-t > 500){
      if (dato1){
         digitalWrite(a, !digitalRead(a));
         digitalWrite(b, !digitalRead(b));
      }
      if (dato2){
         digitalWrite(c, !digitalRead(c));
         digitalWrite(d, !digitalRead(d));
      }
      if (dato3){
         digitalWrite(e, !digitalRead(e));
         digitalWrite(f, !digitalRead(f));
      }
      t = millis();
   }
}

void off(){
   digitalWrite(a, LOW);
   digitalWrite(b, LOW);
   digitalWrite(c, LOW);
   digitalWrite(d, LOW);
   digitalWrite(e, LOW);
   digitalWrite(f, LOW);
}