Error al comparar un string recibida por XBEE

Este es el nuevo codigo, que hasta el momento me funciona bien. Quedo muy bien hasta donde yo lo veo, si consideran que tiene algun error mi codigo por favor me dijeran, se los agradeceria muchisimo.

//Declaracion de variables
char inChar;
String cadena = "";
int lng = 0;

//Configuracion de puerto serial y reservacion de variable string
void setup() {
 Serial.begin(9600);
 cadena.reserve(200);
 pinMode(2,OUTPUT);
}

void loop(){
 if (Serial.available()){
//Lectura de caracteres   
  inChar = Serial.read();
//Suma de caracteres en variable string
  cadena+=inChar;
  
//Imprime la variable con los caracteres acumulados hasta la "|"   
 if(inChar == '|'){  //13 como salto de linea

//Recortando Dato
lng = cadena.length();
lng = lng-1;
String data = cadena.substring(0, lng); 
Serial.println(data); // Verifico el String recibida

   if(data == "on"){
     digitalWrite(2, HIGH);    
         Serial.println(data);
         Serial.println("Encendido");
   }
   if(data == "off"){
     digitalWrite(2, LOW);
         Serial.println(data);
         Serial.println("Apagado");
   }
//Borra la variable string para almacenar nuevos datos
   cadena="";
  }
 }
}