[Solucionado] Como puedo guardar una trama CAN en una variable

Buenas jose es que creo que no se hacer el código de las estructuras.

Mira te explico, es una maquina industrial la cual lleva una pantalla de telemetria (mañana intento hacerle una foto y te la pongo aquí), en esta pantalla vemos todos los datos, de varias temperaturas, posicionamiento de ejes, posición de la pieza donde esta situada, etc......lleva muchísimos sensores.

A la pantalla a parte de los cables de alimentación solo le llegan dos cables trenzados de CAN y esta pantalla solo admites las 20 ID que te muestro.

Para sacar esas tramas, he usado un arduino con un shield MCP2512 y el sketch que puse en el primer post, que es el ejemplo que viene en las libreas para capturas las tramas.

En estas tramas vemos una ID (extendida de 29 bits) y los datos que recibimos son 8 bytes, el LEN solo nos indica el numero de bytes de la trama, los datos de no paran de varias durante el funcionamiento de la maquina.

   ID    LEN           DATA
15EFE411  8   01 1C 20 00 1C 00 00 00
15EFE412  8   01 2C 1F 00 1C 00 00 00
15EFE413  8   01 21 1D 00 1D 00 00 00
15EFE414  8   01 21 1F 00 1D 00 00 00
15EFE415  8   01 53 12 00 20 00 00 00
15EFE416  8   01 AB 13 00 20 00 00 00
15EFE417  8   02 02 14 00 20 00 00 00
15EFE418  8   02 5A 15 00 20 00 00 00
15EFE419  8   02 B2 16 00 20 00 00 00
15EFE41A  8   03 0A 17 00 20 00 00 00
15EFE41B  8   03 62 18 00 20 00 00 00
15EFE41C  8   03 BA 19 00 20 00 00 00
15EFE41D  8   04 11 1A 00 20 00 00 00
15EFE41E  8   04 69 1B 00 20 00 00 00
15EFE41F  8   04 C1 1C 00 20 00 00 00
15EFE420  8   00 00 1D 00 20 00 00 00
15EFE421  8   00 4B 1E 00 20 00 00 00
15EFE422  8   00 A3 1F 00 20 00 00 00
15EFE423  8   00 FB 20 00 20 00 00 00
15EFE424  8   01 53 21 00 20 00 00 00

El problema, es que voy a cambiar la pantalla de telemetria por que esta está medio roto el display, y la pantalla nueva no admite esas ID ( lo que tiene las cosas chinas).
Esta pantalla admite solo de la 01800000 a 02000000.

Entonces el objetivo es leer esas 20 tramas y mandarlas a la nueva pantalla con las ID cambiadas.

Yo hice este Codigo para probar mandar la trama cambiando la ID, lo que hice es mandar un dato por el puerto serie y al recibir el dato manda la trama con la ID cambiada y funciona perfecto, pero claro si solo mando una trama en cuando hice la prueba mandando la segunda, se mezcla todo los datos, por que esta todo en el mismo bufer.

#include <SPI.h>
#include "mcp_can_Err.h"

const int SPI_CS_PIN = 9;
MCP_CAN CAN(SPI_CS_PIN);

unsigned char len = 0;
unsigned char buf[8];

boolean ejecutandoTrama1 = false;
boolean ejecutandoTrama2 = false;

char dato;

void setup()
{
  Serial.begin(9600);

START_INIT:

  if (CAN_OK == CAN.begin(CAN_500KBPS))                  // init can bus : baudrate = 500k
  {
    Serial.println("CAN BUS Shield init ok!");
  }
  else
  {
    Serial.println("CAN BUS Shield init fail");
    Serial.println("Init CAN BUS Shield again");
    delay(100);
    goto START_INIT;
  }
}

void loop() {

  if (ejecutandoTrama1) {
    Trama1();
  }
  if (ejecutandoTrama2) {
    Trama2();
  }

  CAN_MSGAVAIL == CAN.checkReceive();          // check if data coming

  CAN.readMsgBuf(&len, buf);    // read data,  len: data length, buf: data buf

  switch (dato) {
    case '0':
      if (CAN.getCanId() == 0x15EFE411) {
        ejecutandoTrama1 = true;
      }
      break;

    case '1':
      if (CAN.getCanId() == 0x15EFE412) {
        ejecutandoTrama2 = true;
      }
      break;
  }
}

  void Trama1() {
    CAN.sendMsgBuf(0x01800001, 1, 8, buf);
  }

  void Trama2() {
    CAN.sendMsgBuf(0x01800002, 1, 8, buf);
  }

Por eso quiero guardar los datos de cada trama en variables diferentes, pero no se hacerlo para que funcione.

Si no entiendes algo, por favor dímelo.

Muchas Gracias