utiliser un code-barre lu par un scanner USB

Bonjour les Arduineux,

Mon matériel :
1 arduino UNO (incluse la librairie USB Host Shield Library 2.0)
1 shield USB
1 lecteur de code-barre GM65
1 carte dont le code barre est : 9922905

Je suis actuellement sur un projet et je suis bloqué dans une étape cruciale.
La reconnaissance d’un code-barre par un scanner branché sur usb.

J'ai trouvé beaucoup de documentation sur la lecture de code-barres avec Arduino mais cela dépasse de loin mes compétences et j'ai donc tendance à me perdre dans le code.

Voilà ci)dessous le code (dont je ne comprends rien) que j’ai récupéré sur GitHub. La lecture du code-barre fonctionne, je la récupère sur le moniteur série de la manière suivante :

Start
9922905 – Finished

En gros j’aimerais pouvoir juste récupérer le code-barre lu, le déterminer en variable et l’utiliser dans des conditions du style : if (codebarreLu == 9922905) { monServo.write(120);}

D'avance un tout grand merci pour vos réponses, pistes, solutions.

#include <usbhid.h>
#include <usbhub.h>
#include <hiduniversal.h>
#include <hidboot.h>
#include <SPI.h>

class MyParser : public HIDReportParser {
  public:
    MyParser();
    void Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf);
  protected:
    uint8_t KeyToAscii(bool upper, uint8_t mod, uint8_t key);
    virtual void OnKeyScanned(bool upper, uint8_t mod, uint8_t key);
    virtual void OnScanFinished();
};

MyParser::MyParser() {}

void MyParser::Parse(USBHID *hid, bool is_rpt_id, uint8_t len, uint8_t *buf) {
  // If error or empty, return
  if (buf[2] == 1 || buf[2] == 0) return;

  for (uint8_t i = 7; i >= 2; i--) {
    // If empty, skip
    if (buf[i] == 0) continue;

    // If enter signal emitted, scan finished
    if (buf[i] == UHS_HID_BOOT_KEY_ENTER) {
      OnScanFinished();
    }

    // If not, continue normally
    else {
      // If bit position not in 2, it's uppercase words
      OnKeyScanned(i > 2, buf, buf[i]);
    }

    return;
  }
}

uint8_t MyParser::KeyToAscii(bool upper, uint8_t mod, uint8_t key) {
  // Letters
  if (VALUE_WITHIN(key, 0x04, 0x1d)) {
    if (upper) return (key - 4 + 'A');
    else return (key - 4 + 'a');
  }

  // Numbers
  else if (VALUE_WITHIN(key, 0x1e, 0x27)) {
    return ((key == UHS_HID_BOOT_KEY_ZERO) ? '0' : key - 0x1e + '1');
  }

  return 0;
}

void MyParser::OnKeyScanned(bool upper, uint8_t mod, uint8_t key) {
  uint8_t ascii = KeyToAscii(upper, mod, key);
  Serial.print((char)ascii);
}

void MyParser::OnScanFinished() {
  Serial.println(" - Finished");
}

USB          Usb;
USBHub       Hub(&Usb);
HIDUniversal Hid(&Usb);
MyParser     Parser;

void setup() {
  Serial.begin( 115200 );
  Serial.println("Start");

  if (Usb.Init() == -1) {
    Serial.println("OSC did not start.");
  }

  delay( 200 );

  Hid.SetReportParser(0, &Parser);
}

void loop() {
  Usb.Task();
}