Scanner de codes barres

Bonjour,

Je fais un projet où quand je scanne un produit avec le scanner, il faut que je récupère l'information reçue par le scanner, j'ai donc fais la liaison entre la carte Arduino et le scanner en RS232 avec un 4 câbles, 5VCC ; GND ; TX ; RX.
Le scanner est le suivant, je l'ai paramétré comme la documentation l'indique.
J'ai utilisé le code donné avec la doc : Barcode_Reader_Scanner_Module-CCD_Camera_SKU_DFR0314-DFRobot

et quand je scanne un article, j’obtiens ça sur la commande "15:20:41.053 -> " seulement pour le premier scan est rien d'autre...

Le problème ne vient pas du scan je pense car il bip à chaque scan et je l'ai paramétré en (8 bits word, 9600 bauds, RS232-TTL)

Quand je scanne, je n'ai pas le voyant TX qui s'allume sur ma Arduino UNO...

Si vous pouviez m'éclairer se serait super!

code (à retrouver sur le lien) :

/*
description:
The sample code is used to read the barcode value using RS232-TTL Converter
This Module will transmit the barcode value in ASCⅡ and end up with 0D
VCC -- VCC
GND -- GND

*/
String code = ""; //initialize the output string
boolean endbit = 0; //a flag to mark 0D received
char temp;

void setup() {
Serial.begin(9600); //initialize the Serial port
}

void loop() {
if (Serial.available() > 0) {
temp = char( Serial.read()); //read the input data
code += temp;
}
if (temp == 0x0D){ // Or temp == '\r'
Serial.println(code);
code = "";
endbit = 0;
temp = 0;
}

}

êtes vous sûr que le scanner envoie '\r' à la fin d'une lecture et pas plutôt '\n' ou rien du tout ?

avez vous bien choisi "CR" comme caractère de fin ?

sinon lisez comment utiliser le forum (les posts épinglés en haut du forum comme "Bien éditer son post pour les nuls" , "Faire un Nouveau Sujet ou le corriger avec les Balises..." et "Règles du forum francophone"), et éditez votre post précédent pour qu'il soit correct. MERCI.

Merci pour votre réponse @J-M-L,
Je ne sais pas du tout par quoi fini la chaîne de caractère que je dois recevoir...
Et j'ai essayé de paramétrer le scanner avec le CR en fin de caractère et remplacer '\r' dans le code, mais je lis toujours sur la commande quand je scanne un article, l'heure à laquelle j'ai scanné le code barre....

Merci pour les liens pour les consignes de posts, je vais les lire de ce pas!

Bonne soirée.

Et j'ai essayé de paramétrer le scanner avec le CR en fin de caractère et remplacer '\r' dans le code, mais je lis toujours sur la commande quand je scanne un article, l'heure à laquelle j'ai scanné le code barre....

si vous avez demandé à votre lecteur de rajouter un CR à la fin, il faut garder '\r' dans le code.

oui justement je l'ai mis car avant dans le code de base c'était "0xOD".

Je me demande si ce n'ai pas à cause de mes câblages, pourtant j'ai bien respecter le le TX et le RX, et je les ai branché sur les PIN déjà dédiées sur la UNO. Peut-être le code fourni n'est pas fiable ce qui m'étonnerai, cependant j'ai des bases très faibles en programmation Arduino, c'est pourquoi je viens vers vous.

Je vais sûrement refaire un post dans les règles avec plus de détail sur les branchements et les documentations techniques.

0x0D (soit 13 en décimal) c'est le code ASCII de '\r' donc c'était bon :wink:

euh... si vous utilisez la console série en même temps que vous avez branché le lecteur sur les pins 0 et 1 alors ça ne va pas le faire... les pins 0 et 1 sont utilisées par le port USB (Serial) pour la discussion avec votre ordinateur...

si vous êtes sur UNO, faudra prendre utiliser SoftwareSerial, par exemple sur les pins 2 et 3 et laissez 0 et 1 libres.

Bonjour à tous!

J'ai un projet d'études qui consiste à scanner et récupérer l'info du code et de la traiter pour encourager les élèves au tri des déchets à la cafétéria de mon école. Cependant, Arduino est un nouveau langage pour moi (même si j'arrive à comprendre brièvement en faisant l'analogie avec d'autres langages, j'ai beaucoup de mal pour l'écriture des codes), c'est pourquoi je viens vers vous pour vous demander votre aide :slight_smile: .

Liste du matériel :
-Carte Arduino Uno
-Scanner de codes-barres DFR0314: Lecteur de code-barres DFR0314 DFRobot - Articles retires | GO TRONIC

Documentation du scanner : Barcode_Reader_Scanner_Module-CCD_Camera_SKU_DFR0314-DFRobot

J'ai donc commencé par branché à ma carte le scanner sur le +5Vcc et le GND et essayé de le paramétrer grâce au "Quick guide", sachant que je veux pouvoir récupérer l'info du scanner sur des produits alimentaires donc des codes-barres EAN il me semble.

Ensuite j'ai branché le câble RX de mon scanner sur la pin0 (RX) de la carte UNO et idem avec le TX sur la pin1.

Ensuite j'ai utilisé le code fournie par la doc :

/*
  description:
  The sample code is used to read the barcode value using RS232-TTL Converter
  This Module will transmit the barcode value in ASCⅡ and end up with 0D
  VCC -- VCC
  GND -- GND

*/
String code = "";           //initialize the output string
boolean endbit = 0;            //a flag to mark 0D received
char temp;

void setup() {
  Serial.begin(9600);       //initialize the Serial port
}

void loop() {
  if (Serial.available() > 0)     {
    temp = char( Serial.read());    //read the input data
    code += temp;
  }
  if (temp == 0x0D){           // Or temp == '\r'
    Serial.println(code);
    code = "";
    endbit = 0;
    temp = 0;
  }

}

Après avoir téléversé le code qui ne contient pas d'erreur de langage, j'ai scanné un produit au hasard, cependant, je n'ai pas eu le numéro qui s'est inscris dans la commande, mais l'heure du scan... et cela ne s'écrit qu'une seule fois, même si le "bip de confirmation" du scan est activé...

J'espère que vous saurez m'éclairer :slight_smile:

PS : Prenez soin de vous en ces temps difficiles.

essayé de le paramétrer grâce au "Quick guide"

Tout le problème est là. Il y a en particulier un paramétrage permettant d'envoyer CR/LF, comme tous les lecteurs de code barre.

Regarde la doc : settings manual.
4.3 Output Characters Parameters
A> Select Terminator

J'ai à nouveau paramétré le scanner avec ce que vous m'avez dit, cependant quand je téléverse sur la UNO, et que j'ouvre la commande et que je scanne un produit, je n'ai pas de code qui est print sur la commande alors que le code est censé récupérer l'info venant du scanner....

Je ne sais pas comment m'y prendre pour pouvoir traiter les infos scanner...

Ah oui j'ai même pas fait la conversion ahah
Et effectivement en me baladant sur les cours d'initiation j'ai vu qu'ils n'utilisaient jamais les PIN Tx et Rx directement...

Vous pourriez éventuellement m'aider pour transformer le code en changeant les PIN 0 et 1 en 2 et 3 ?
Sinon je vais essayer de chercher de mon côté.

Ce serait vraiment super :slight_smile:

Essaie d'afficher code à chaque caractère reçu.
Si tu ne reçois rien tu pourras soupçonner câblage, baudrate, etc.

Les doubles demandes ne sont pas tolérées.

https://forum.arduino.cc/index.php?topic=680333.0

oui autant pour moi je vais retirer un des deux posts

faites un petit effort d'exploration de Software Serial - ce n'est pas bien compliqué, vous écoutez d'un côté et imprimez de l'autre.

Regardez comment est fait l'exemple de base, vous avez quasiment tout ce qu'il faut.

Merci pour les liens, il y a l'air d'avoir tout ce qu'il faut pour que je comprenne comment fonctionne tout ça!
Merci pour touts les conseils, bonne journée

Je te dirai si j'y suis arrivé dans les prochains jours :wink:

Bonjour

il y a un mode usb il serait peut être intéressant de brancher le scanner sur le pc et de regarder ce qu'il envoie en usb (il remplace le clavier) avec n'importe quel programme genre bloc note

il est configuré d'office en mode usb mais s'il a été reprogrammé il suffit de reflasher le bon code de configuration

Bonjour, je n'ai pas te câble USB sur mon scanner...

@J-M-L

j'ai essayé ce code après avoir pris connaissance de ce que tu m'as donné :

#include <SoftwareSerial.h> //Utiliser la librairie pour communiquer sur les ports série
SoftwareSerial mySerial(2, 3); //On définit les pattes RX (Recieve infos), TX (Transfer infos)

String code = "";           //initialize the output string
boolean endbit = 0;            //a flag to mark 0D received
char temp;

void setup() {
  Serial.begin(9600);       //initialize the Serial port
}

void loop() {
  if (mySerial.available() > 0)     {
    temp = char( mySerial.read());    //read the input data
    code += temp;
  }
  if (temp == 0x0D){           // Or temp == '\r'
    Serial.println(code);
    code = "";
    endbit = 0;
    temp = 0;
  }

}

Cependant je n'ai rien qui s'écrit dans le moniteur série...
Si quelqu'un d'autre a une solution pour le code, n'hésitez pas :slight_smile:

il manque dans le setup un mySerial.begin(xxx); // xxx = la vitesse en bauds du scanner

et vous pouvez changer   Serial.begin(9600);      //initialize the Serial porten  Serial.begin(115200);      //initialize the Serial port et ouvrir votre moniteur Série à 115200 bauds car il n'y a aucune raison d'aller à une vitesse d'escargot pour l'affichage sur votre PC/Mac...

et endbit vous sert à rien

essayez aussi d'imprimer si vous avez reçu plus de 10 caractères par exemple parce que si le \r n'est jamais envoyé alors vous n'imprimez jamais rien non plus