Lectura XBee Receptor para poder gobernar mi mountainboard

En nuestro sistema, lo que hacemos es enviar una cadena de datos, por ejemplo "aC"; con esto le indicamos a la placa que hemos definido como "a" que realice la instrucción correspondiente a la orden "C". Si enviamos la orden "bO" pues indica que a la placa "b" que realice la instrucción "O".

Para que cada placa haga se active cuando recibe "su encabezamiento" a,b...z lo que hacemos en leer la entrada serie, asignarle una variable para determinar si la placa esta activa o no. Entonces si recibe la llamada a su nombre mediante un if-then pasamos a hacer caso a la siguiente orden. Si no está activa, la siguiente orden la obviamos.

Hay que tener en cuenta que todas las placas con Xbee leen todas las instrucciones, por lo que el código selector ha de estar en la programación de la placa Arduino, haciendo ahí la selección de qué ordenes son a las que tiene que hacer caso y a cuales no.

Adjunto un ejemplo probado:

* PROGRAMA DE PRUEBAS PARA VERIFICACIÓN DEL COMPORTAMIENTO DE LOS PINES
Programa realizado por José Antonio Castillo Rodríguez:
+ Pines actuables son todos (0-13 digitales; 0-5 analógicos)
+ "@" selecciona la placa como activa para ACTIVAR-ON un pin
+ "#" selecciona la placa como activa para APAGAR-OFF un pin
+ "2", "3",..."a", "b", "c", "d" realiza la acción sobre el pin digital del mismo número, siendo a=10, b=11, c=12, d=13
+ "&" selecciona la placa como activa para leer un pin analógico
+ "0", "1", "2",..."5" numeración de los pines analógicos
+
+ OTRO VALOR -> desactiva todos los pines
+
+ el pin de lectura del cambio de estado manual esta definido por variable (remotoPin)
+
+ Como prueba, se va a enviar como respuesta una señal del tipo "a2ON", esto es:
+ "placaActiva"+"nº de pin"+"estado del pin" para que lo lea el sistema central
+
*/

// VARIABLE DE SELECCIÓN DE PLACA
int inByte = 0;    // almacena la lectura del puerto serie
int selecPlacaOn = '@';    // CTE-valor ante el CUAL se activa la placa en modo escucha para activar los pines
int selecPlacaOff = '#';    // CTE-valor ante el CUAL se activa la placa en modo escucha para apagar los pines
int selecLecturaOn = '&';    // CTE-valor ante el CUAL se activa la placa para lectura de sensor analógico
boolean placaActivaOn = false;    // indica si la placa está en modo escucha o no para modo encender
boolean placaActivaOff = false;    // indica si la placa está en modo escucha o no para modo encender
boolean placaLecturaOn = false;    // indica si la placa está en modo escucha o no para modo lectura de sensor
int sensorValor = 0; // Almacena el valor leido en el pin del sensor

void setup() {
  // initialize serial communication:
  Serial.begin(9600); 
  // inicialización de los pines digitales para escritura
  for (int thisPin = 2; thisPin < 14; thisPin++) {
        pinMode(thisPin, OUTPUT);
      } 
}

void loop() {
  // lectura de la señal serie
  if (Serial.available() > 0) {
    int inByte = Serial.read();
    if (placaActivaOn == true) {    // si la placa está en modo activo pasa a actuar dependiendo de la lectura del valor de inByte
      switch (inByte) {
      // encendido del pin 2
      case '2':    
        digitalWrite(2, HIGH);
      // hay que enviar por serie el código
        Serial.print(selecPlacaOn, BYTE);
        Serial.print('2', BYTE);
        Serial.print('O', BYTE);
        Serial.print('N', BYTE);
        Serial.print(",");
        break;
      // encendido del pin 3
      case '3':    
        digitalWrite(3, HIGH);
      // hay que enviar por serie el código
        Serial.print(selecPlacaOn, BYTE);
        Serial.print('3', BYTE);
        Serial.print('O', BYTE);
        Serial.print('N', BYTE);
        Serial.print(",");
        break;
        }
      }
    }
    
    if (placaActivaOff == true) {    // si la placa está en modo activo pasa a actuar dependiendo de la lectura del valor de inByte
      switch (inByte) {
      // encendido del pin 2
      case '2':    
        digitalWrite(2, LOW);
      // hay que enviar por serie el código
        Serial.print(selecPlacaOff, BYTE);
        Serial.print('2', BYTE);
        Serial.print('O', BYTE);
        Serial.print('F', BYTE);
        Serial.print('F', BYTE);
        Serial.print(",");
        break;
      // encendido del pin 3
      case '3':    
        digitalWrite(3, LOW);
      // hay que enviar por serie el código
        Serial.print(selecPlacaOff, BYTE);
        Serial.print('3', BYTE);
        Serial.print('O', BYTE);
        Serial.print('F', BYTE);
        Serial.print('F', BYTE);
        Serial.print(",");
        break;

      default: //cualquier otro valor leido apaga todo
        // corta la alimentación de los pines 2 a 4 -> relés sin alimentación
        for (int thisPin = 2; thisPin < 14; thisPin++) {
        digitalWrite(thisPin, LOW);
        // hay que enviar por serie el código
        Serial.print(selecPlacaOff, BYTE);
        Serial.print('a', BYTE);
        Serial.print('l', BYTE);
        Serial.print('l', BYTE);
        Serial.print('O', BYTE);
        Serial.print('F', BYTE);
        Serial.print('F', BYTE);
        Serial.print(",");
        }
      }
    }
    

    if (placaLecturaOn == true) {    // si la placa está en modo activo pasa a actuar dependiendo de la lectura del valor de inByte
      switch (inByte) {
      //lectura del pin analógico 0
      case '0':    
        sensorValor = analogRead(0);
      // hay que enviar por serie el código
        Serial.print(selecLecturaOn, BYTE);
        Serial.print('0', BYTE);
        Serial.print('/', BYTE);
        Serial.print(sensorValor, DEC);
        Serial.print(",");
        sensorValor = 0;
        break;
      // encendido del pin 3
      //lectura del pin analógico 1
      case '1':    
        sensorValor = analogRead(1);
      // hay que enviar por serie el código
        Serial.print(selecLecturaOn, BYTE);
        Serial.print('1', BYTE);
        Serial.print('/', BYTE);
        Serial.print(sensorValor, DEC);
        Serial.print(",");
        sensorValor = 0;
        break;
      //lectura del pin analógico 2
      case '2':    
        sensorValor = analogRead(2);
      // hay que enviar por serie el código
        Serial.print(selecLecturaOn, BYTE);
        Serial.print('2', BYTE);
        Serial.print('/', BYTE);
        Serial.print(sensorValor, DEC);
        Serial.print(",");
        sensorValor = 0;
        break;

      default: //cualquier da lectura errónea
        // hay que enviar por serie el código
        Serial.print(selecLecturaOn, BYTE);
        Serial.print('e', BYTE);
        Serial.print('r', BYTE);
        Serial.print('r', BYTE);
        Serial.print(",");
      }
    }

    // caso que la placa esté en modo activo, se vuelve a modo escucha tras
    // haber ejecutado la orden correspondiente
    if (placaActivaOn == true) {
      placaActivaOn = false;
    }
    
    if (placaActivaOff == true) {
      placaActivaOff = false;
    }

    if (placaLecturaOn == true) {
      placaLecturaOn = false;
    }
    
    //******** SELECCIÓN DE LA PLACA PARA ACTIVACIÓN DE PIN ***************************
    //*********************************************************************
    // si la variable inByte se corresponde con la letra de la placa (la asignada a la variable selecPlacaOn en este caso)
    // la placa se pone en modo activo
    if (inByte == selecPlacaOn) {
      placaActivaOn = true;
    }
    
    //******** SELECCIÓN DE LA PLACA PARA APAGADO DE PIN ***************************
    //*********************************************************************
    // si la variable inByte se corresponde con la letra de la placa (la asignada a la variable selecPlacaOff en este caso)
    // la placa se pone en modo activo
    if (inByte == selecPlacaOff) {
      placaActivaOff = true;
    }

    //******** SELECCIÓN DE LA PLACA PARA LECTURA DE PIN ANALÓGICO *******************
    //*********************************************************************
    // si la variable inByte se corresponde con la letra de la placa (la asignada a la variable selecLecturaOn en este caso)
    // la placa se pone en modo activo
    if (inByte == selecLecturaOn) {
      placaLecturaOn = true;
    }
    
  }
}

NOTA: he eliminado las acciones a partir de los pines núm 2 para que cupiese todo el código.

Lamento que el ejemplo sea un poco largo, pero éste está probado que funciona. Aquí, el primer caracter indica qué tipo de acción debe hacer el pin del número que se indica a continuación. El segundo caracter es el pin sobre el que se actúa. Si programases varias placas arduino con este código, todas harían lo mismo al mismo tiempo. Para la selección de placa lo único que tienes que hacer es cambiar el primer caracter por uno específico para cada placa.

Espero haber entendido esta vez el sentido de tu consulta. Un saludo.