SOS!!!! Leer lo que se imprime en el serial

HOLA!

Ojalá podáis ayudarme !!!

Estoy realizando un programa para mi TFG y utilizo arduino+netbeans

El programa consiste en poder decodificar cualquier tipo de mando y redecodificarlo en arduino para utilizarlo con una aplicación en netbeans.

Bien, en mi código decodifico cualquier tecla del mando, y en el serial, me muestra el protocolo, código hexadecimal y num. de bits utilizados por ese protocolo para posteriormente poder emitirlos desde arduino, el problema, es que necesito guardar en variables lo que me imprime en el serial, para automatizar la emisión del código en función de lo que se haya leído.

¿Cómo puedo guardar en variables lo que se imprime en el serial?

Tienes que dar más detalles como: qué se imprime, en qué formato, es texto o binario.

Mis funciones son:

void  ircode (decode_results *results)
{
 // Panasonic has an Address
 if (results->decode_type == PANASONIC) {
   Serial.print(results->address, HEX);
   Serial.print(":");
 }

 // Print Code
 Serial.print("");
 Serial.print(results->value, HEX);
 Serial.print("");
}


void  encoding (decode_results *results)
{

 switch (results->decode_type) {
   default:
   case UNKNOWN:      Serial.print("UNKNOWN");       break ;
   case NEC:          Serial.print("NEC");           break ;
   case SONY:         Serial.print("SONY");          break ;
   case RC5:          Serial.print("RC5");           break ;
   case RC6:          Serial.print("RC6");           break ;
   case DISH:         Serial.print("DISH");          break ;
   case SHARP:        Serial.print("SHARP");         break ;
   case JVC:          Serial.print("JVC");           break ;
   case SANYO:        Serial.print("SANYO");         break ;
   case MITSUBISHI:   Serial.print("MITSUBISHI");    break ;
   case SAMSUNG:      Serial.print("SAMSUNG");       break ;
   case LG:           Serial.print("LG");            break ;
   case WHYNTER:      Serial.print("WHYNTER");       break ;
   case AIWA_RC_T501: Serial.print("AIWA_RC_T501");  break ;
   case PANASONIC:    Serial.print("PANASONIC");     break ;
   case DENON:        Serial.print("Denon");         break ;
 }

}

 void irbits (decode_results *results)
{
  Serial.print("");
  Serial.print(results -> bits, DEC);
 }


//+=============================================================================
// Dump out the decode_results structure.
//
void  dumpInfo (decode_results *results)

{
 // Check if the buffer overflowed
 if (results->overflow) {
   Serial.println("IR code too long. Edit IRremoteInt.h and increase RAWLEN");
   return;
 }

 // Show Encoding standard
 Serial.print("Protocolo: ");

 encoding(results);


 // Show Code & length
 Serial.println("");
 Serial.print("Codigo: 0x");
 ircode(results);
 Serial.print(" (");
 Serial.print(results->bits, DEC);
 Serial.println(" bits)");
}


}

El loop es:

void  loop ( )
{
     digitalWrite(12, LOW); 
  
     while (Serial.available()>0){
     caracter = Serial.read();
     comando.concat(caracter);
     
     delay(10);  
    }

        
    
  /*Cuando tengamos la cadena acabada, comprobamos el valor aquí abajo. Si no se encuentra, 
   * lo ignorará. */

    if (comando.equals("1") == true){ 
      //Si en la cadena de caracteres se incluye un 1
      digitalWrite (12, HIGH);        //Enciendo el LED para comprobar que estoy dentro
      decode_results  results;        

       if (irrecv.decode(&results)) {  
          irrecv.blink13(true);
          Serial.println(""); 
          dumpInfo(&results);             
          Serial.println("");
          

         
          /* Imprimo en pantalla:
           * encoding(results)
           * ircode(results)
           * irbits(results)
          */

          irrecv.resume();              // Prepara para el siguiente valor
       }
   }


   
   //RC5=5
      else if (comando.equals ("5") == true){
      irsend.sendRC5(0x811,12);
      Serial.println("EnviadoRC5");
      delay(10);
      irrecv.enableIRIn();
                
   //RC6 = 6
   }else if (comando.equals("6") == true){
      irsend.sendRC6(0x810,12);
      Serial.println("EnviadoRC6");
      delay(10);
      irrecv.enableIRIn();      
      
   }

   comando = ""; //Limpiamos la cadena para volver a recibir el siguiente comando.
   
}

Por cada protocolo, existe un if, ya que el código hexadecimal puede cambiar y por lo tanto el numero de bits, la impresión en el serial es por ejemplo:

Protocolo: RC5
Código: 0x210 (12 bits)

Y es esto lo que debo especificar en cada if

Entiendo. Lo que imprime al puerto serial es para mostrarlo al usuario; sin embargo ahora la pregunta es: ¿El mismo Arduino que imprime los datos es el que posteriormente debe enviar ese código, o es otro el que se encargará de eso?

Puedes almacenar o transmitir una copia entera de la struct decode_results; así no tendrás muchos dolores de cabeza a la hora de tener que reenviar dichos datos a futuro.