retourner un tableau a partir d'une bibliotheque

Salut,

dans le cadre d'un projet ou je dois traiter des telegrammes venant de mon RFID-capteur, je suis bloque.
j'utilise une State Machine dans mon programme pour capturer ces telegrammes.
la presence d'un tag sur le Sensor engendre ces telegrammes.des que le capteur detecte un tag , il envoi un Telegramme commencant par 0xAA que je voudrais enrigister dans un Tableau pour le retouner.

cpp.file

#include "Arduino.h"
#include"RFID.h"
#include "MYHELPERS.h"

#define  RFID_Serialport Serial

void RFID::Read_Block()
{
  switch (state)
  { case senden:
      RFID_Serialport.begin(115200);
      Senden(RB_Nutzbytesanzahl, RB_Nutzbyte1, RB_Nutzbyte2);
      state = wait;
      break;

    case wait:
      digitalWrite(Send_Recievepin, LOW);
      if (RFID_Serialport.available() > 0) {
        state = ack;
      }
      else
        state = wait;
      break;

    case ack:
      startbyte = RFID_Serialport.read();
      if (startbyte == 0xAA ) {
        state = response;
      }
      else {
        state = ack;
      }
      break;

    case response:
      myList.add(startbyte);
      do {
        myList.add(RFID_Serialport.read());
      } while (RFID_Serialport.available() > 0);
      listlaenge = myList.size();
      byte empf[listlaenge];
      for (int h = 0; h < listlaenge; h++) {
        empf[h] = myList.get(h);
      }
      memcpy(&printArray, empf, 11 * sizeof(byte) );
      myList.clear();
      if (listlaenge == 11 ) {
        arrayfull = true;
        state = response; 
      }
    else {
      state = senden;
    }
    break;
  }
}
unsigned char* RFID::Print_Block() {
  if (arrayfull == true){ 
     Serial.println("first print");
    for (int i=0; i<4; i++){
     Serial.println(printArray[i], HEX);
    }
    static unsigned char prufar[11];       //-> le Tableau a retourner
    memcpy(&prufar, printArray, 11 * sizeof(unsigned char));
    Serial.println("values in prufar[i]"); l
    for (int i=0; i<4; i++){
    Serial.println(prufar[i], HEX);                 // -> la je verifie que les Elements souhaites sont copies
    }
    arrayfull = false;     
    return prufar;
  }
    else return NULL;
}

Header Datei contenant de globales variables

#include <LinkedList.h>
#ifndef MYHELPERS_H
#define MYHELPERS_H
LinkedList<byte> myList = LinkedList<byte>();
static unsigned char printArray[20];
bool arrayfull=false;
bool NovalidArray= false;
byte startbyte;
int listlaenge;
enum State_enum {senden, wait, ack, response};
byte state= senden ;
#endif

Sketch

#include <LiquidCrystal.h>                                
#include"RFID.h"
RFID  RFID(6); // Initialisieren der Bibliothek mit der Send_recievepin Nummer 6
LiquidCrystal lcd(12, 11, 5, 4, 3, 7); 

void setup() { 
  }

void loop() {
    RFID.Read_Block();
    delay(1);
    PrintBlocks();
}

int PrintBlocks(){
  unsigned char *checkbyte;
  checkbyte=RFID.Print_Block();
  if (checkbyte== NULL)
  {
    return;
    }
  else{
    unsigned char Block[4];
    checkbyte=RFID.Print_Block();
   Serial.println("second print");
    for (int i=0; i<4; i++){
       Block[i]= *(checkbyte+i);
     Serial.println(Block[i], HEX); 
  }
 }
}

le Print

⸮aah⸮aah⸮first print
AA
B
B
68
values in p⸮]V⸮m⸮u5
AA
B
B
68
second print
A3
0
8
68
⸮aah╪aah

je vois pas ou j'ai pu faire une erreur pour ques les valeures soient modifier.
merci de m'eclaisir ladessus

Quel est le problème ? Les caractères bizarres dans la console ? Autre chose : explique mieux ce que tu attends.

Il y a un "l" en trop à la fin de cette ligne, c'est une erreur ?

Serial.println("values in prufar[i]"); l

Pour moi, ici il y a un problème checkbyte=RFID.Print_Block();Print_Block() retourne un pointeur sur une variable locale.
Donc la zone mémoire sur laquelle a été faite l'allocation de prufar est libérée. Et elle est sans doute réutilisée ce qui explique que ta dernière impression ne soit pas correcte.

lesept:
Quel est le problème ? Les caractères bizarres dans la console ? Autre chose : explique mieux ce que tu attends.

Il y a un "l" en trop à la fin de cette ligne, c'est une erreur ?

Serial.println("values in prufar[i]"); l

l
ces caracteres proviennent du Serial.write(), j'envoi un Telegramm au dabord configurer mon capteur.

le i de trop est est une erreur en copiant, mais il ne se trouvait pas dans le programme

fdufnews:
Pour moi, ici il y a un problème

checkbyte=RFID.Print_Block();

Print_Block() retourne un pointeur sur une variable locale.
Donc la zone mémoire sur laquelle a été faite l'allocation de prufar est libérée. Et elle est sans doute réutilisée ce qui explique que ta dernière impression ne soit pas correcte.

je viens de le declarer comme global , mais ca na pa resolu le probleme