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;
}
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!
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
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.
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 .
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'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é.
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
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
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
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