Scanner de codes barres

J’ai essayé avec ce nouveau code où je mets un compteur pour pouvoir afficher au bout de n caractères reçu, j’ai essayé avec 10 et ai scanné un article avec un code barre de plus de 10 caractère (EAN 13).
Mais toujours sans succès…
Je vous mets le code ci-joint avec les erreurs corrigées :

#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
char temp;
int cpt = 0;

void setup() {
  Serial.begin(115200); //initialize the Serial port
  mySerial.begin(9600); //on initialise le débit de données entre les PIN et la carte
}

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

où avez vous connecté les pin 2 et 3 ?

Arduino Pin 2 <----> Scanner Tx
Arduino Pin 3 <----> Scanner Rx
GND et Vcc bien sûr

et votre console série est bien ouverte à 115200 bauds ?

Avant d’essayer de grouper le scan, faites simple et regardez si vous recevez quelque chose

#include <SoftwareSerial.h>

const uint8_t rxPin = 2; // Arduino Pin 2 <----> Scanner Tx
const uint8_t txPin = 3; // Arduino Pin 3 <----> Scanner Rx
SoftwareSerial codeBarre(rxPin, txPin); //On définit les pattes RX (Recieve infos), TX (Transfer infos)

void setup() {
  Serial.begin(115200); 
  codeBarre.begin(9600); 
}

void loop()
{
  int recu = codeBarre.read();

  if (recu != -1) {
    Serial.print(F("recu : 0x"));
    Serial.print(recu, HEX);
    Serial.print(F("\t-> '"));
    Serial.print(char(recu));
    Serial.println(F("'"));
  }

}

ça affiche quoi ça quand vous scannez des éléments ?

Bonjour quand je scanne, j'ai toujours rien qui s'affiche sur la console série à 115200 bauds...

Malheureusement il s'avère que mon convertisseur RS232TTL ne fonctionne pas (et en raison du confinemement je n'en ai pas recommandé), j'ai donc mis les câbles arduino directement dans les PINOUT de la sortie RS232. Je l'ai scotché sur une surface plane pour qu'ils ne bougent pas et éviter les faux contacts.

L'erreur est sûrement due à ça, sinon les branchements sont corrects et le scanner est toujours alimenté sans soucis.

j'ai donc mis les câbles arduino directement dans les PINOUT de la sortie RS232

Aie Aie Aie... :o :o

Vous voulez dire que votre Arduino est directement connecté au port RS232 ?

En RS232 Un niveau logique "0" est représenté par une tension de +3 V à +25 V et un niveau logique "1" par une tension de −3 V à −25 V (codage NRZ). D'ordinaire, des niveaux de +12 V et −12 V sont utilisés.

Il y a de fortes chances pour que vous ayez grillé les pins de votre Arduino qui ne supportent que des tensions entre 0 à 5V (avec une toute petite marge d'erreur)

Aïe, mince je pensais que le scanner envoyer que du 5V max comme il est sous tension à 5V...

Donc sans convertisseur je ne peux pas acquérir les données ?

Je viens de tester d'allumer une LED sur les PIN 2 et 3 et elles fonctionnent toujours :slight_smile:

hum j'ai regardé la page web et avec un peu de chance ça devrait aller en fait.. mais rien de garanti sans adaptateur

d'ailleurs ils le font aussi (si c'est ce que vous voulez dire)

Oui j'ai exactement ça, et je me suivis du même schéma pour mes branchements :wink:

vous avez branché le câble USB pointé par la flêche ici ?

quel adaptateur est cassé chez vous ?
pourriez vous réécrire exactement ce que vous avez fait ?

Je n'ai pas l'adaptateur mini DIN - USB... Je pense que seule la liaison RS232 était importante pour récupérer les données n'est-ce pas ?

faites moi un schéma… je ne comprends pas bien

Sur la photo que vous avez posté où il y a les branchements, contrairement à la photo je n'ai pas de sortie USB sur le scanner mais seulement une sortie ronde avec 6 pins, sur le site internet où il y a les présentations des différentes sorties : USB, RS232 et en dernier il y a les "mini DIN" c'est comme cela qu'il le nomme.

En fait sur la photo, à un endroit sur le câble de sortie USB du scanner, il y a une grosse épaisseur, en fait il y a la sortie d'origine (que j'ai) et en plus un adaptateur vers USB.

comme sur ce lien : Barcode Reader/Scanner Module - CCD Camera-DFRobot

postez une photo de votre système si possible et faites un dessin.. je vais pas aller à la chasse aux liens...

et si la sortie n'est pas "TTL serial" sur le port RS232 --> danger, c'est là qu'on utilise un adaptateur à base de MAX232 ou MAX233

Le plus souvent quand même en un signal RS232 c'est ±12V, et l'Arduino lit des signaux TTL 0 à +5V. Donc une connexion directe d'un signal RS232 c'est dangereux et aussi les signaux RS232 sont généralement inversés par rapport aux signaux TTL.

Vous jouez quand même un peu avec le feu sans adaptation...

vous avez accès à un oscilloscope ?? ça permettrait de voir le signal et d'être sûr de ce qu'il se passe...

Il y a le montage en pièce jointe, et comme vous pouvez le voir, il n’y a pas de sortie USB sur le scanner.

Non je n’ai pas accès à un oscilloscope, je suis dans mon appartement d’étudiant sans grand moyen électronique…

montage.jpg

la photo
montage.jpg

Merci bricofoy, je suis nouveau sur le forum j'ai encore du mal à trouver toutes les fonctionnalités...

Faudrait pouvoir mesurer ce qui sort vraiment sur Tx et Rx pour être sûr de ne pas faire de bêtise.
Mais un voltmètre ne va pas suffire car la tension va varier rapidement

Le montage qu'ils proposent sinon est le suivant:

On prend Rx et Tx depuis la prise RS232 qu'on emmène de manière croisée vers la carte d'adaptation RS232 / TTL.

La raison pour laquelle ils connectent aussi la nappe RS232 au PC c'est pour alimenter le scanner et s'assurer que le GND du scanner est identique au GND de l'arduino et du module RS232

--> comment alimentez vous aujourd'hui votre scanner ?

Ils alimentent la carte de conversion en 5V/GND depuis l'arduino et ils ne ressortent que le Tx du module de conversion RS232 qu'ils amènent sur la pin 0 de l'arduino, en Rx.

ça permet de se passer de Software Serial, en disant que ce qui va vers le moniteur Série du PC sort de la pin 1 et ce qui arrive du scanner arrive sur la pin 0. Il faut dans ce cas bien sûr que le port série soit ouvert au débit du scanner (9600 bauds). Dans ce cas on ne peut rien envoyer du PC vers l'arduino par le port série (débrancher pendant l'upload du code) mais ça permet de se passer de Sofwtare Serial et d'afficher le code barre reçu.

Si j'ai bien compris ce que vous avez fait aujourd'hui c'est cela:

Le fait qu'ils aient mis l'adaptateur RS232 dans leur schéma laisse quand même à penser que c'est nécessaire pour qu'il y ait la bonne conversion effectuée.

Le deuxième schéma est bien celui que j'ai, et j'alimente le scanner directement sur la carte Arduino avec le 5Vcc et le GND puisque sur les données du constructeurs, le scanner à besoin d'une alimentation continue de 5V.

Donc avec le peu de moyen que j'ai, pensez-vous que je puisse exploiter les codes barres scannés ?

Non je ne le pense pas.

Si vous êtes prêt à prendre des risques avec votre Arduino, comme souvent les signaux sont inversés, essayez avec le code précédent mais en remplaçant

SoftwareSerial codeBarre(rxPin, txPin, true); //On définit les pattes RX (Recieve infos), TX (Transfer infos)

Le ‘true’ va dire au port série virtuel que les signaux sont inversés (un 1 est un 0 et un 0 est un 1)

Notez que votre lecteur consome 110mA quand il scanne, donc faut rester raisonnable sur le nombre de composants que vous allez alimenter depuis votre Arduino.

Merci beaucoup pour toute l'aide que vous m'avez donnée :wink:

Je vais au moins pouvoir faire la partie théorique de mon rapport technique avec les éléments de codages et de montage.

Bonne journée et prenez soin de vous.