Lecteur QR code + LCD + imprimante

est-ce que le lecteur retournera toujours qque chose de formaté exactement comme cela?

si oui suffit d'extraire les caractères au bon endroit :slight_smile: par exemple avec strncpy()

si non, si vous prenez toujours les 6 chiffres après le tiret, alors il faut chercher le tiret et ensuite extraire les 6 caractères (pour chercher le tiret c'est la fonction strchr()

Voici les fonctions en C ou C++ qui travaillent sur des buffer de caractères (qui ont un '\0' à la fin)

un exemple d'usage en fonction des contraintes (en pratique il vaut mieux tester quand même pour ne pas déborder de la mémoire)

const char QRCode[] = "E00000-1234569999";

void setup() {
  char lcdBuffer1[7];  // 6 caractères plus le '\0' à la fin
  char lcdBuffer2[7];
  char lcdBuffer3[7];
  char lcdBuffer4[7];
  char lcdBuffer5[7];

  Serial.begin(115200);


  // -------------------------------------------------------------------
  // si on sait que la chaîne commence toujours à l'index No 7
  // -------------------------------------------------------------------

  strncpy(lcdBuffer1, QRCode + 7, 6); // on copie 6 caractères à partir de l'index 7
  lcdBuffer1[6] = '\0'; // on marque la fin de chaine

  // on peut aussi utiliser la fonction qui recopie de la mémoire
  memcpy (lcdBuffer2, QRCode + 7, 6); // on copie 6 caractères  à partir de l'index 7
  lcdBuffer2[6] = '\0'; // on marque la fin de chaine


  // -------------------------------------------------------------------
  // si on ne sait pas trop où les 6 caractères commencent
  // -------------------------------------------------------------------
  // avec strncpy
  strncpy(lcdBuffer3, strchr (QRCode, '-') + 1, 6); // on extrait 6 caractères en trouvant le '-' et on commence au caractère suivant
  lcdBuffer3[6] = '\0'; // on marque la fin de chaine

  // ou avec memcpy
  memcpy (lcdBuffer4, strchr (QRCode, '-') + 1, 6); // on extrait 6 caractères en trouvant le '-' et on commence au caractère suivant
  lcdBuffer4[6] = '\0'; // on marque la fin de chaine


  // -------------------------------------------------------------------
  // si on veut les caractères entre le tiret et s'arrêter au premier 9 suivant le tiret
  // -------------------------------------------------------------------

  // avec strncpy, ce serait mieux bien sûr de tester que les pointeurs ne sont pas nulls
  char * ptrPostTiret = strchr (QRCode, '-') + 1; // le pointeur dans la chaîne sur le caractère après le tiret
  int nbChar = strchr (ptrPostTiret, '9') - ptrPostTiret ; // on cherche où est le premier 9 qui suit le tiret, ensuite et on fait la différence pour trouver le nb de caractères
  strncpy(lcdBuffer5, ptrPostTiret, nbChar ); // on extrait les caractères concernés
  lcdBuffer5[nbChar] = '\0'; // on marque la fin de chaine en priant fort que nbChar < 7 :-)

  Serial.print("["); Serial.print(QRCode); Serial.println("]");
  Serial.print("["); Serial.print(lcdBuffer1); Serial.println("]");
  Serial.print("["); Serial.print(lcdBuffer2); Serial.println("]");
  Serial.print("["); Serial.print(lcdBuffer3); Serial.println("]");
  Serial.print("["); Serial.print(lcdBuffer4); Serial.println("]");
  Serial.print("["); Serial.print(lcdBuffer5); Serial.println("]");
}

void loop() {}