Lecteur QR code + LCD + imprimante

Bonjour à tous,

Nouveau dans le monde Arduino, j'ai un projet en tête mais je bloque sur un truc.

Voilà le projet : scanner un QR code, n'afficher q'une partie du code, l'afficher sur un écran LCD et l'imprimer.

Voici le matos utilisé :

Lorsque je scan mon QR code, le code entier ressemble à ça : E00000-123456789.

Ce qui m'intéresse c'est de n'afficher et d'imprimer ceci : 12345.

J'ai des bouts de programme sur le net pour lire ce qui se passe sur l'USB et faire marcher l'imprimante, mais ce que je ne sais pas faire c'est de ne prendre en compte que les nombres voulu.

Si une bonne âme a une idée, j'en serai ravi.

Par avance, merci de votre aide.

Trouvez le tiret et prenez les 5 digits suivants dans le buffer du scan du QRcode

Merci pour votre réponse, je vais chercher en se sens, mais j'avoue ne pas avoir tout compris. Dois-je configurer mon lecteur QR code pour n'afficher que les nombres qui m'intéresse ou Est-ce une fonction qui me permettra de faire cela?

C'est une fonction qui reçoit tout ce que le lecteur a scanné, qui fait le traitement proposé par J-M-L et ne renvoie que les données filtrées

Bonjour,
Je viens de recevoir tout le matériel.
J'ai réussi non sans mal à faire fonctionner le LCD I2C (pas mal de librairie mais toutes ne fonctionnent pas).
J'arrive à lire les coordonnées d'une souris USB branché sur le shield, je suppose donc que jusque là tout va bien.
Mais le gros problème que j'ai maintenant c'est que je n'arrive pas à lire les codes barres, mon lecteur s'allume mais je n'ai pas le "bip" au démarrage comme si je le branchais directement sur mon PC.
Je précise que sur le PC il marche bien, fonctionne comme un clavier.
Voici le modèle du lecteur :

Vous l'alimentez comment?

La doc dit "power source rated 5-14V minimum 900mA"

Votre shield probablement ne fournit que 5V et 500mA sur l'USB donc normal à mon avis que ça,ne fonctionne pas avec votre lecteur de code barre alors que c'est suffisant pour une souris

Va falloir séparer l'alim par USB (2 pins) des data (2 pins) ou essayer éventuellement avec un hub USB alimenté entre les 2


(source)

ou un cable usb avec double connecteur, mais comme si il y a seulement un connecteur sur ton shield usb, ca va etre compliqué.

Bonjour,
Merci pour vos réponses rapides, je n'avais pas pensé au bridage du shield niveau courant.
J'ai essayé d'alimenter le lecteur avec une alimentation externe bien costaud, ça ne change rien.
En fait quant je branche le lecteur directement sur le shiel, le lecteur s'allume mais ne s'initialise pas (pas de bip et le laser de viseé reste éteint).
Avec l'alimentation externe j'ai le même phénomène.
J'ai l'impression que le lecteur attend un code via l'usb pour s'activer.
Sinon j'ai testé avec un clavier USB, ça marche nickel, c'est le lecteur qui me pose problème.
J'ai de bonnes bases en électroniques (fait pas mal de montage audio quant j'était plus jeune), mais en programmation je n'y connais pas grand chose.

DjLab:
J'ai l'impression que le lecteur attend un code via l'usb pour s'activer.
Sinon j'ai testé avec un clavier USB, ça marche nickel, c'est le lecteur qui me pose problème.
J'ai de bonnes bases en électroniques (fait pas mal de montage audio quant j'était plus jeune), mais en programmation je n'y connais pas grand chose.

bonjour
ton scanner est configuré comment en sortie ?
tu expose qu'il fonctionne bien sur ton PC , il y est vu comme quel type de peripherique ?

  • port com ?
  • clavier ?
  • autre(s) ?

Sur le PC aviez vous été obligé installer un driver pour qu'il fonctionne?

J-M-L:
Sur le PC aviez vous été obligé installer un driver pour qu'il fonctionne?

bonjour J-M-L
Aujourd'hui la quasi totalité des scanners "codes" sont configurés "usine" pour etre vu comme un simple clavier additionnel over USB .
La plupart des OS offre sans installation supplémentaire/volontaire "la fonctionnalité"
C'est ce qu'il semble ressortir de la doc , mais j'ai peut etre rapidement parcouru

Oui c'est ce que je pense aussi mais dans ce cas si l'alimentation est suffisante il devrait être vu par le shield USB comme un clavier... donc c'est louche:)

Ba non, pas besoin de driver, j'ai branché, et ça a marché tout de suite sur le PC, juste obligé de le configurer en AZERTY.
J'ai peur qu'il faille lui envoyer un message pour qu'il s'initialise.....je ne suis pas sortie de l'auberge j'ai l'impression.

DjLab:
Ba non, pas besoin de driver, j'ai branché, et ça a marché tout de suite sur le PC, juste obligé de le configurer en AZERTY.
J'ai peur qu'il faille lui envoyer un message pour qu'il s'initialise.....je ne suis pas sortie de l'auberge j'ai l'impression.

  • Comment ton scanner est vu dans le gestionnaire de peripherique lorsque tu le connecte sur ton PC ?

  • quelle librarie utilise pour ton shield avec ton uno ?

-quel programme a tu telechargé sur ton uno ?

DjLab:
J'ai peur qu'il faille lui envoyer un message pour qu'il s'initialise.....je ne suis pas sortie de l'auberge j'ai l'impression.

à mon avis non, sinon il aurait fallu un driver sur le PC pour le faire. à moins que ce ne soit reconnu en standard... sur le PC vous voyez quoi comme appareil connecté au port USB?

Salut Artoust,
Voici les réponses à tes questions, dans l'ordre.

1- Dans le panneau de configuration il est dans "Claviers" et marqué comme "Périphérique clavier PIH"???
Dans la notice j'ai vue que l'on pouvait changer le mode de communication en scannant des Qrcode directement de la notice, il y a :
RS-232 standard interface
RS-232 Wincor-Nixdorf
RS-232 for use with OPOS/UPOS/JavaPOS
USB Com to simulate RS-232 standard interface
USB-OEM
Pour ce dernier il est mentionné "Download the correst USB COM driver from www.waspbarcode.com"

2- la librairie est : USB_Host_Shield_2.0-master
Pour le moment il n'y a qu'avec celle là que j'arrive à faire marcher mon shield...

3- le programme de test du clavier est celui contenu en exemple dans la librairie USB_Host_Shield_2.0-master, le voici :

#include <hidboot.h>
#include <usbhub.h>

// Satisfy the IDE, which needs to see the include statment in the ino too.
#ifdef dobogusinclude
#include <spi4teensy3.h>
#include <SPI.h>
#endif

class KbdRptParser : public KeyboardReportParser
{
   void PrintKey(uint8_t mod, uint8_t key);

 protected:
   void OnControlKeysChanged(uint8_t before, uint8_t after);

   void OnKeyDown (uint8_t mod, uint8_t key);
   void OnKeyUp (uint8_t mod, uint8_t key);
   void OnKeyPressed(uint8_t key);
};

void KbdRptParser::PrintKey(uint8_t m, uint8_t key)
{
 MODIFIERKEYS mod;
 *((uint8_t*)&mod) = m;
 Serial.print((mod.bmLeftCtrl   == 1) ? "C" : " ");
 Serial.print((mod.bmLeftShift  == 1) ? "S" : " ");
 Serial.print((mod.bmLeftAlt    == 1) ? "A" : " ");
 Serial.print((mod.bmLeftGUI    == 1) ? "G" : " ");

 Serial.print(" >");
 PrintHex<uint8_t>(key, 0x80);
 Serial.print("< ");

 Serial.print((mod.bmRightCtrl   == 1) ? "C" : " ");
 Serial.print((mod.bmRightShift  == 1) ? "S" : " ");
 Serial.print((mod.bmRightAlt    == 1) ? "A" : " ");
 Serial.println((mod.bmRightGUI    == 1) ? "G" : " ");
};

void KbdRptParser::OnKeyDown(uint8_t mod, uint8_t key)
{
 Serial.print("DN ");
 PrintKey(mod, key);
 uint8_t c = OemToAscii(mod, key);

 if (c)
   OnKeyPressed(c);
}

void KbdRptParser::OnControlKeysChanged(uint8_t before, uint8_t after) {

 MODIFIERKEYS beforeMod;
 *((uint8_t*)&beforeMod) = before;

 MODIFIERKEYS afterMod;
 *((uint8_t*)&afterMod) = after;

 if (beforeMod.bmLeftCtrl != afterMod.bmLeftCtrl) {
   Serial.println("LeftCtrl changed");
 }
 if (beforeMod.bmLeftShift != afterMod.bmLeftShift) {
   Serial.println("LeftShift changed");
 }
 if (beforeMod.bmLeftAlt != afterMod.bmLeftAlt) {
   Serial.println("LeftAlt changed");
 }
 if (beforeMod.bmLeftGUI != afterMod.bmLeftGUI) {
   Serial.println("LeftGUI changed");
 }

 if (beforeMod.bmRightCtrl != afterMod.bmRightCtrl) {
   Serial.println("RightCtrl changed");
 }
 if (beforeMod.bmRightShift != afterMod.bmRightShift) {
   Serial.println("RightShift changed");
 }
 if (beforeMod.bmRightAlt != afterMod.bmRightAlt) {
   Serial.println("RightAlt changed");
 }
 if (beforeMod.bmRightGUI != afterMod.bmRightGUI) {
   Serial.println("RightGUI changed");
 }

}

void KbdRptParser::OnKeyUp(uint8_t mod, uint8_t key)
{
 Serial.print("UP ");
 PrintKey(mod, key);
}

void KbdRptParser::OnKeyPressed(uint8_t key)
{
 Serial.print("ASCII: ");
 Serial.println((char)key);
};

USB     Usb;
//USBHub     Hub(&Usb);
HIDBoot<USB_HID_PROTOCOL_KEYBOARD>    HidKeyboard(&Usb);

uint32_t next_time;

KbdRptParser Prs;

void setup()
{
 Serial.begin( 115200 );
#if !defined(__MIPSEL__)
 while (!Serial); // Wait for serial port to connect - used on Leonardo, Teensy and other boards with built-in USB CDC serial connection
#endif
 Serial.println("Start");

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

 delay( 200 );

 next_time = millis() + 5000;

 HidKeyboard.SetReportParser(0, &Prs);
}

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

DjLab:
1- Dans le panneau de configuration il est dans "Claviers" et marqué comme "Périphérique clavier PIH"???

Alors teste ton programme arduino avec un simple clavier USB et regarde "si déjà ça cause un peu dans le poste"

Oui, j'ai testé avec un clavier sans fil avec le dongle branché sur le shield, ça fonctionne bien, dans le moniteur série ça cause bien, bon en QUERTY au lieu de AZERTY mais ça cause.

Bonjour à tous,
Ça me taraude cette histoire de lecteur qui ne veut pas s'initialiser sur le shield.
Autre test que j'ai fait ce matin, alimenter mon lecteur en externe via un petit montage classique à base de 7805 et relier les 2 fils "data" au PC.
Au début rien, pas d'initialisation.....et puis j'ai relié le "-" de mon alim externe au "-" de l'usb du PC, et là il s'initialise bien.
J'ai vue et testé des schémas avec un pont de résistances (2 de 330K et 2 de 220K) pour amener du 2V aux "data" mais ça ne change rien.
Du coup je me dit qu'il y a un truc entre l'alim et les fils "data", il y a peu être un truc à faire de ce coté mais je ne vois pas, une idée les amis?

Autres tests, hé oui, je veux trouver.
J'ai brancher le lecteur sur:

  • ma free, il s'initialise.
  • ma télé, il s'initialise.
  • mon petit enregistreur TNT, il s'initialise.
    Bon, il y a truc bête qui m’échappe car aucun des trois n'a de driver.
    Pourquoi mais pourquoi ça ne marche pas ahrgnnnnnn !!!