Probléme moniteur série

Bonjour a tous, je rencontre actuellement un probléme avec ma liaison série. En effet, je dispose d’un lecteur de badge RFID. A l’aide d’une requete envoyé, le lecteur me renvoie une trame contenant l’id du badge. A l’aide de la fonction memcpy, je récupére uniquement l’id du badge. Lorsque j’affiche sur mon moniteur série l’id du badge, Serial.print(tab2); qui me répond bien l’id du badge : 54CC9.

Cependant, je souhaite verifier si le badge lu correspond bien a mon badge, j’initialise donc une autre valeur dans un tableau char : char tabcarte[5] = “54CC9”;

voici le code complet :

#include <SoftwareSerial.h>

SoftwareSerial mySerial(2, 3 ); // RX, TX
const int MODE_TRANSMISSION = 5;
bool x = 1;
void setup()

{
  // Open serial communications and wait for port to open:
  pinMode(MODE_TRANSMISSION, OUTPUT);
  Serial.begin(9600);
  mySerial.begin(9600);
  delay(500);
  digitalWrite(MODE_TRANSMISSION, HIGH);
}

void loop() {
  //if (x == 1) { //run the loop once*
  delay(1000);
  digitalWrite(5, HIGH);
  byte message[] = {0x02, 0x30, 0x30, 0x05, 0x85, 0x03};
  mySerial.write(message, sizeof(message));
  digitalWrite(5, LOW);
  char tab[17];
  char tab2[5] = "00000";
  char tabcarte[5] = "54CC9";
  if (mySerial.available()) {
    for (int i = 0; i < 17; i++) {
      tab[i] = mySerial.read();
      //Serial.print(tab[i], HEX);

      //Serial.print(incomingByte, HEX);
      // Serial.print(' ');

    }

    memcpy(tab2, tab + 10, 5);
    for (int i = 0; i < 5; i++) {
      //Serial.print("ITERATION : ");
      //Serial.print(i);
      Serial.print("\t");
      //Serial.print(tab2[i], HEX);
      Serial.print("\n");

    }

    Serial.print(tab2);



    //int incomingByte = mySerial.read();
    // Serial.print(incomingByte, HEX);
    //Serial.print(' ');

    //Serial.println();
    if (tab2 == tabcarte) {
      Serial.print("carte autorise");
    }
    else {
      Serial.print("carte non autorise");
    }
    //}
    delay(2000);
  }
}

l’erreur est la suivante, alors que l’id du badge lu et contenu dans tab2 correspond bien au contenu de tabcarte, je recoie le message “carte non autorisee”. Merci de votre aide et bonne fin de journée a vous

Bonjour,

En C/C++ une chaine de caractère se termine par \0.
Donc quand tu fais char tabcarte[5] = "54CC9" la chaine occupe 6 octets (avec le terminateur \0) et dépasse du buffer.

De plus quand tu fait tu compares l'adresse mémoire des deux chaines. Si tu veux comparer leurs valeurs il faut utiliser strcmp ou memcmp