activar y desactivar pines mientras recibo codigo ascill desde el puerto serie

Con este codigo activo las salidas dependiendo del codigo ascill que envio por puerto serie.

Siempre se queda activado el pin último correspondiente a la letra que envié, pero alguien sabe como puedo deja en LOW el pin, creo que en teoria tendría que pasar con este codigo ya que con el "else"

En resumen, que actue como un pulsador cuando envio letra ascill al puerto serie que se active el pin correspondiente y cuando dejo de enviar letra que se desactive LOW.

int ledpin13 = 13; // LED conectado al pin 13
int ledpin12 = 12;
int ledpin11 = 11;
int ledpin10 = 10;
int ledpin9 = 9;
int ledpin8 = 8;
int ledpin7 = 7;
int ledpin6 = 6;
int ledpin5 = 5;
int ledpin4 = 4;
int ledpin3 = 3;

char val; // variable que recibe el dato del puerto serie

void setup() {
pinMode(ledpin13, OUTPUT); // pin 13 (LED)actua como SALIDA
pinMode(ledpin12, OUTPUT);
pinMode(ledpin11, OUTPUT);
pinMode(ledpin10, OUTPUT);
pinMode(ledpin9, OUTPUT);
pinMode(ledpin8, OUTPUT);
pinMode(ledpin7, OUTPUT);
pinMode(ledpin6, OUTPUT);
pinMode(ledpin5, OUTPUT);
pinMode(ledpin4, OUTPUT);
pinMode(ledpin3, OUTPUT);

Serial.begin(9600); // inicia la comunicación con el puerto serie a 9600bps
}
void loop(){
if(Serial.available() )
{

// Read off all bytes
val = Serial.read();
// BlueSerial.print(val);
Serial.print(val);
Serial.println();
// lee y almacena el dato en 'val'

}
if( val == 'a' ) //su el dato recibido es A ?
{
digitalWrite(ledpin13, LOW); //activa el LED
} else {
digitalWrite(ledpin13, HIGH);
}
if( val == 'b' )
{
digitalWrite(ledpin12, HIGH);
} else {
digitalWrite(ledpin12, LOW);
}
if( val == 'c' )
{
digitalWrite(ledpin11, HIGH);
} else {
digitalWrite(ledpin11, LOW);
}
if( val == 'E' )
{
digitalWrite(ledpin10, HIGH);
} else {
digitalWrite(ledpin10, LOW);
}
if( val == 'F' )
{
digitalWrite(ledpin9, HIGH);
} else {
digitalWrite(ledpin9, LOW);
}
if( val == 'G' )
{
digitalWrite(ledpin8, HIGH);
} else {
digitalWrite(ledpin8, LOW);
}
if( val == 'H' )
{
digitalWrite(ledpin7, HIGH);
} else {
digitalWrite(ledpin7, LOW);
}
if( val == 'U' )
{
digitalWrite(ledpin6, HIGH);
} else {
digitalWrite(ledpin6, LOW);
}
if( val == 'D' )
{
digitalWrite(ledpin5, HIGH);
} else {
digitalWrite(ledpin5, LOW);
}
if( val == 'L' )
{
digitalWrite(ledpin4, HIGH);
} else {
digitalWrite(ledpin4, LOW);
}
if( val == 'R' )
{
digitalWrite(ledpin3, HIGH);
} else {
digitalWrite(ledpin3, LOW);
}

delay(60);
// espera 100ms para una nueva lectura

}

Cambia la linea de codigo

If (Serial.available())

Por

if (Serial.available() > 0)
{

Y mete todo lo siguiente ( las comparaciones de texto) entre las llaves del if...
}

Es decir

void loop(){
if(Serial.available() >0)
{

// Read off all bytes
val = Serial.read();
// BlueSerial.print(val);
Serial.print(val);
Serial.println();
// lee y almacena el dato en 'val'

if( val == 'a' ) //su el dato recibido es A ?
{
digitalWrite(ledpin13, LOW); //activa el LED
} else {
digitalWrite(ledpin13, HIGH);
}
if( val == 'b' )
{
digitalWrite(ledpin12, HIGH);
} else {
digitalWrite(ledpin12, LOW);
}
if( val == 'c' )
{
digitalWrite(ledpin11, HIGH);
} else {
digitalWrite(ledpin11, LOW);
}
if( val == 'E' )
{
digitalWrite(ledpin10, HIGH);
} else {
digitalWrite(ledpin10, LOW);
}
if( val == 'F' )
{
digitalWrite(ledpin9, HIGH);
} else {
digitalWrite(ledpin9, LOW);
}
if( val == 'G' )
{
digitalWrite(ledpin8, HIGH);
} else {
digitalWrite(ledpin8, LOW);
}
if( val == 'H' )
{
digitalWrite(ledpin7, HIGH);
} else {
digitalWrite(ledpin7, LOW);
}
if( val == 'U' )
{
digitalWrite(ledpin6, HIGH);
} else {
digitalWrite(ledpin6, LOW);
}
if( val == 'D' )
{
digitalWrite(ledpin5, HIGH);
} else {
digitalWrite(ledpin5, LOW);
}
if( val == 'L' )
{
digitalWrite(ledpin4, HIGH);
} else {
digitalWrite(ledpin4, LOW);
}
if( val == 'R' )
{
digitalWrite(ledpin3, HIGH);
} else {
digitalWrite(ledpin3, LOW);
}

}
delay(60);
// espera 100ms para una nueva lectura
}

No funciona.....

Alguna idea mas??????

void loop() {
int c, pin;
	if (Serial.available() {
		c = Serial.read();
		pin = c - 'a';		// a..m
		if ((pin >= 3) && (pin <= 13)) {
			digitalWrite(pin, !digitalRead(pin));
		}
	}
}

-br

Yo tengo asi en un scketch que hice para encerder unos led desde el iphone usando TouchOSC y funciono perfecto.

void loop()
{
if (Serial.available() > 0)
{
message = Serial.read();

if (message == '1')
{
digitalWrite (salida_salon11,HIGH);
}
else
{
digitalWrite (salida_salon11,LOW);
}

if (message == '2')
{
digitalWrite (salida_dormitorio11,HIGH);
}
else
{
digitalWrite (salida_dormitorio11,LOW);
}

if (message == '3')
{
digitalWrite (salida_dormitorio21,HIGH);
}
else
{
digitalWrite (salida_dormitorio21,LOW);
}

if (message == '4')
{
digitalWrite (salida_dormitorio31,HIGH);
}
else
{
digitalWrite (salida_dormitorio31,LOW);
}

if (message == '5')
{
digitalWrite (salida_terraza1,HIGH);
}
else
{
digitalWrite (salida_terraza1,LOW);
}

if (message == '6')
{
digitalWrite (salida_pasillo1,HIGH);
}
else
{
digitalWrite (salida_pasillo1,LOW);
}

if (message == '7')
{
digitalWrite (salida_pasillo2,HIGH);
}
else
{
digitalWrite (salida_pasillo2,LOW);
}

if (message == '8')
{
digitalWrite (salida_aseo1,HIGH);
}
else
{
digitalWrite (salida_aseo1,LOW);
}

if (message == '9')
{
digitalWrite (salida_aseo2,HIGH);
}
else
{
digitalWrite (salida_aseo2,LOW);
}

if (message == 'A')
{
digitalWrite (salida_cocina1,HIGH);
}
else
{
digitalWrite (salida_cocina1,LOW);
}

if (message == 'S')
{
digitalWrite (salida_tendedero1,HIGH);
}
else
{
digitalWrite (salida_tendedero1,LOW);
}

}
}