Go Down

Topic: Lecteur QR code + LCD + imprimante (Read 3958 times) previous topic - next topic

DjLab

Salut J-M-L, fidèle au poste !

Quel c.....n....

Bon pareil avec
Code: [Select]
Serial.print("[");Serial.print(Prs.QRCodeBuffer);Serial.println("]");

J'ai essayé d'autre lecteur de code barre 1D, ça fonctionne, j'ai vraiment un souci avec la 2D, bizare.

J-M-L

et pour être complet j'imprimerai aussi le strlen() et aussi faites une boucle et imprimez un par un le code ASCII et le caractère associé de ce  que vous avez lu.
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

DjLab

Bonjour,
En utilisant le programme USB_desc pour lire les infos provenant de l'interface USB (le lecteur donc) branché sur le shield, j'ai remarqué qu'entre un lecteur qui marche et ceux qui ne fonctionnent pas il y a une différence sur les lignes :

Attr.: valeur à CO fonctionne, à C0 ou A0 non.
Max.pwr : la valeur à 32 fonctionne, à C8 non.
Polling interval: valeur à OA fonctionne, à 01 non.

Est-ce que ça vous parle, mon problème de lecteur 2D qui ne marche pas doit être pas loin, un paramétrage dans les librairies.

Cordialement, DjLab.

DjLab

Bonjour,

Après cette longue période d'absence (problème familiaux), me revoilà.

Je n'ai pas réussi à résoudre mon petit bug de filtrage de données, pas grave pour le moment, il y a plus grave, je n'ai toujours pas réussi à faire fonctionner ce lecteur 2D.

C'est quand même bizarre car en utilisant des exemples comme USB_desc ou USBHIDMultimediaKbd le lecteur 2D s'initialise, mais rien en lecteur dans le moniteur série.
Code: [Select]
#include <hidcomposite.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

// Override HIDComposite to be able to select which interface we want to hook into
class HIDSelector : public HIDComposite
{
public:
    HIDSelector(USB *p) : HIDComposite(p) {};

protected:
    void ParseHIDData(USBHID *hid, uint8_t ep, bool is_rpt_id, uint8_t len, uint8_t *buf); // Called by the HIDComposite library
    bool SelectInterface(uint8_t iface, uint8_t proto);
};

// Return true for the interface we want to hook into
bool HIDSelector::SelectInterface(uint8_t iface, uint8_t proto)
{
  if (proto != 0)
    return true;

  return false;
}

// Will be called for all HID data received from the USB interface
void HIDSelector::ParseHIDData(USBHID *hid, uint8_t ep, bool is_rpt_id, uint8_t len, uint8_t *buf) {
#if 1
  if (len && buf)  {
    Notify(PSTR("\r\n"), 0x80);
    for (uint8_t i = 0; i < len; i++) {
      D_PrintHex<uint8_t > (buf[i], 0x80);
      Notify(PSTR(" "), 0x80);
    }
  }
#endif
}

USB     Usb;
//USBHub     Hub(&Usb);
HIDSelector    hidSelector(&Usb);

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.");

  // Set this to higher values to enable more debug information
  // minimum 0x00, maximum 0xff, default 0x80
  UsbDEBUGlvl = 0xff;

  delay( 200 );
}

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

DjLab

Je viens de tester avec un autre lecteur 1D, ba il marche tout seul, et retrouve en utilisant l'exemple USB_desc la ligne Max.pwr à 32.

J'ai vraiment l'impression que le lecteur 2D demande au sheld l'autorisation d'avoir xx Max.pwr mais ceci lui est interdit, du coup il ne s'initialise pas. Pas très technique comme language mais j'espère que vous comprendrez.

Ça me rend dingue de ne pas trouver alors que je suis sur que c'est une connerie.

bricofoy

question bête peut-être mais à un moment le lecteur 2d à été configuré en RS232 si j'ai bien suivi. A t'il été depuis re-configuré en émulation de clavier ? Sinon ça pourrait expliquer qu'il ne semble rien envoyer malgré une initialisation ok
-tu savais que si tu passe le CD de windows à l'envers, tu entends une chanson satanique ?
-non, mais il y a pire : à l'endroit, ça l'installe !

J-M-L

j'ai essayé avec différents lecteur et certains fonctionnent avec le shield, d'autres non. il faudrait s'assurer que votre scanner soit "compatible HID"
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

DjLab

Bonsoir,
Merci à vous deux pour vos réponses, c'est sympa!
bricofoy, je vais regarder mercredi cette histoire d'émulation de clavier, bien vue.
J-M-L, je vais regarder dans la doc s'il en parle du HID.
Je vous tiens au courant, en attendant je vous souhaites un bon et long week-end.

DjLab

Bonjour,
Bon ba j'ai testé toutes les configurations de claviers possible, rien n'y fait.
Pour le HID je suppose qu'il l'est puisque en utilisant l'exemple USB_desc il cause bien et me renvoie bien tout son pédigré, par contre je n'ai rien vue dans la doc du scan.
J'ai un doute sur le type d'interface à sélectionner, bien que j'ai tout testé et rien ne marche.
En PJ les interface possible et type de clavier possible également.  

DjLab

#114
Aug 16, 2017, 10:22 am Last Edit: Aug 18, 2017, 01:15 pm by DjLab
J'ai trouvé le code barre qui permet de faire un Restore Factory Configuration et là .............. ça cause, il s'initialise et lorsque je scan un code j'ai une série de lignes comme ci dessous.
Le texte scanné est "I love Arduino".
Code: [Select]
Keypad(00)(01)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(01)(00)(00)(00)(00)(00)(00)
(00)
(0C)(00)(00)(00)(00)(00)
 Keypad(00)(01)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(2C)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(0F)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(12)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(19)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(08)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(2C)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(01)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(01)(00)(00)(00)(00)(00)(00)
(00)
(14)(00)(00)(00)(00)(00)
 Keypad(00)(01)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(15)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(07)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(18)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(0C)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(11)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(12)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(28)(00)(00)(00)(00)(00)
 Keypad(00)(00)(00)(00)(00)(00)(00)(00)
(00)
(00)(00)(00)(00)(00)(00)

DjLab

Bonjour,

Grace à ce bout de schéma : http://forum.arduino.cc/index.php?topic=307494.15 (merci olimpo88) j'ai réussi à faire fonctionner ce fichu lectuer 2D en RS232, impeccable.
Ne me reste plus qu'a retoucher le code prévu à l'origine pour de l'USB.
Je vous tiens au courant et posterai l'ensemble du code fonctionnel si ça intéresse quelqu'un.

DjLab

Bonjour,

Ne voulant que recevoir les données, j'ai très simplement modifier le code de l'exemple "SoftwareSerial" comme suit.

Mais voila, je voudrai n'afficher qu'une partie de la chaîne de caractère lue par le lecteur code barre. J'ai essayé de le faire en reprenant ce que J-M-L m'avait donné mais ça ne marche pas.

L'idée est de ne garder que les 9 nombres qui se trouvent derrière le "-" de la chaîne de caractère :

- chaîne complète : A000000-1234567890000
- chaîne à afficher dans le moniteur série : 123456789

J'ai sans doute été maladroit dans le code car j'obtiens, pour un même code lu, des chaînes caractères aléatoires, quelqu'un aurai une idée?

Par avance merci de votre aide.
 
Quote
#include <SoftwareSerial.h>

SoftwareSerial mySerial(10, 11); // RX pin 10, TX pin 11

void setup() {
  Serial.begin(9600); // Baud rate moniteur série
  while (!Serial) {
    ;
  }
  Serial.println("Salut les Arduinotes !!!");

  mySerial.begin(9600); // Baud rate appareil
}

void loop() {
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if ((strlen (mySerial.read()) >= 21) && (strchr (mySerial.read(), '-') != NULL))
  {
    char Buffer1[10];
    strncpy(Buffer1, strchr (mySerial.read(), '-') + 1, 9);
    Buffer1[9] = '\0';
    Serial.write(Buffer1);
  }
}


J-M-L

#117
Aug 18, 2017, 09:26 am Last Edit: Aug 18, 2017, 09:28 am by J-M-L
Sachant que mySerial.read()) retourne un seul caractère (celui dispo dans le buffer du port série à ce moment là et l'enlève) - cette ligne est supposée faire quoi ?
Code: [Select]
if ((strlen (mySerial.read()) >= 21) && (strchr (mySerial.read(), '-') != NULL))

il serait peut-être bon de relire Serial Input Basics (et l'usage des fonctions des librairies standard stdlib.h et string.h)

Deux petits commentaires en plus:

avec 60 posts derrière vous, merci d'utiliser les tags de code plutôt que quote pour poster du code.. c'est quand même bcp plus lisible...

mySerial est un nom un peu "simplet"  :smiley-twist: , pourquoi ne pas utiliser lecteurQRCode par exemple plutôt - à la lecture du programme on comprend tout de suite mieux ce que lecteurQRCode.read() veut dire!
Please do not PM me for help,  others will benefit as well if you post your question publicly on the forums
Pas de messages privés SVP

DjLab

Bonjour J-M-L,

Désolé, je ne suis pas très familié avec avec tous les thermes "Quote", "Tags" mais je viens de voir la différence grâce à vous, effectivement, c'est beaucoupo plus lisible.

Merci pour les infos concernant Serial Input Basics, je vais regarder ça de plus près.

DjLab

Il y a confusion, je pensais que mySerial.read()) retournait la chaîne de caractères complète, donc effectivement ceci ne peut fonctionner.
Code: [Select]
if ((strlen (mySerial.read()) >= 21) && (strchr (mySerial.read(), '-') != NULL))
Cette ligne était censée vérifier qu'il y est bien 21 caractères composé d'un "-".

Go Up