recibir números de dos dígitos por el puerto serie.

Hola a todos, estoy haciendo una casa domotica a nivel de maqueta controlada por web, hasta ahora lo que hace es enviar números para encender o apagar luces, con muchos ifs para hacer la gestión (desconozco si se podría hacer un case y si es recomendable).

mi problema es que hasta ahora, encender era 1 apagar 0, habitación 2: encender 2, apagar 3... Pero al llegar al número 10 cuando lo envío por serie me lo detecta como 1 y como 0, es decir no es un 10 si no un 1 y un 0 por separado ¿se podría decir que es un único número?

Si no imagino que lo haría por letras, a,b,c,d,e,f....

Un saludo y gratis

Hola,
en realidad el puerto serie envía todo como caracteres alfanuméricos, o sea, que esos dígitos en realidad no son números, son lo mismo que las letras a, b, c... cada carácter de esos tiene un valor numérico en ASCII http://www.ascii.cl/
A mi modo de ver, lo que puedes hacer es enviar una letra y un dígito: letras para indicar habitaciones, dígitos para indicar lo que se debe hacer (las letras mayúsculas y minúsculas son distintas)

A1 = apagar habitación A
A2 = encender habitación A
A3 = ver estado habitación A
B1 = apagar la B
etc.

Así podrás evaluar lo que recibes en char z

if(isalpha( z) )
   // sabes que ha llegado la letra 
  if(isdigit( z) )
  // sabes que ha llegado el dígito

Y si por un casual envío un A10 no me lo reconocería como A, como 1 y como 0?

lo del if este no lo he entendido, vale para saber si es número o letra? pero que función realmente tiene, no lo veo claro...

un saludo! y gracias por todo

Edito: lo he probado y al pulsar A1 no enciende nada tampoco B1,B0... etc creo que el problema reside en que todos los ifs están dentro de este primero:

if (Serial.available() >= 0) {
incomingByte = Serial.read();
if (incomingByte == 'A1') { .....

Hola,
para recuperar cualquier valor numérico, tendrías que enviar una cadena de texto con dígitos, y convertir la cadena leída a número después

char cadena[11];
int retardo;


// enviar unos dígitos, por ejemplo "123"

// ................

// después de leer cadena, convertir a int
 retardo = atoi(cadena);

Hola curro, el problema es que no puedo asignarle lo que recibe por serial a un array

Por el momento creo que esta podría ser una solución a ver que opinas:

cont=0; // cargo un array con lo que llega por el serial
while(cont < 2)
{
aux = Serial.read();
incomingByte[cont] = aux;
cont++;
}

if(strcmp(incomingByte,“A1”) == 0){ // lo comparo y si es igual enciendo, o apago
digitalWrite(ledPin, HIGH);
}
// if it’s an L (ASCII 76) turn off the LED:
if(strcmp(incomingByte,“A0”) == 0){
digitalWrite(ledPin, LOW);
}