Communication entre 2 appareils

Bonjour,

Voilà mon problème je travaille sur un projet visant à récupérer des données venant d'un appareil d'identification de personne pour les horaires de travail, traiter les données reçues et les renvoyer vers une imprimante (type ticket de caisse).
Lorsque que je relie mon appareil avec l'hyperterminal windows j'obtiens quelque chose du genre "032 001 14:20:36 06/13/2018 IDENTIFY FOR ID ( 1) 100000" en soit ce que je reçoit m'intéresse en effet j'ai l'ID de la personne reconnu, l'heure, la date etc... Le problème c'est que lorsque je relie cet appareil avec un des ports série (1,2 ou 3) de ma carte arduino mega 2560 j'obtiens des données totalement à l'ouest (crochet, espace, signe arithmétique, lettre,...). J'ai pourtant tout essayé les différentes variables bit, caractère mais aussi les chaines tenter la conversion en ASCII mais je n'obtiens jamais ce que je désire. est ce que quelqu'un aurait une réponse à m'apporter ?
Puisque même avec un programme tout simple qui demande juste d'afficher ce qui est envoyé sur le port série où se trouve mon appareil ne me permet pas d'obtenir quelque chose d'exploitable.

void setup() {
  Serial.begin(9600);
  Serial2.begin(9600);
}

void loop() {
  while (Serial2.available()){
    
  char a = Serial2.read();
  Serial.print(a);
  delay(50);
  }
}

exemple.ino (165 Bytes)

Capture d’écran 2018-06-20 à 13.09.38.png

Hello there!

From your description, it seems like you may be on different baud rates from your transmitter and receiver. Make sure they are both sending/receiving at the same rate.

Comme le dit l'ami canidé, ça ressemble à un problème de Baud.
Si un appareil émet en 9600 et l'autre attend autre chose, on se retrouve avec des hiéroglyphes.

Au cas où, ce paramètre se trouve souvent en tête du setup() et ressemble à Serial.begin(9600);

Si ça fonctionne avec le terminal sous Windows, tu peux regarder quels sont ses réglages (baudrate, parité, nb de bits...) et reporter ces paramètres dans ton prog. Arduino.

L'appareil d'identification de personne, son interface de communication est en niveau électrique RS232 ou en TTL?

Oh la question qui tue (le matériel ) !

Merci pour vos différentes réponses, au niveau du Baud j'ai bien 9600 sur l'appareil et dans l'initialisation de mon port série j'ai bien mis begin.Serial2(9600); au niveau des autres paramètres de mon port série (via RS 232) je ne peux pas vraiment modifier d'autres paramètres ? parité des bits bit de fin etc ?

J'utilise en fait un lecteur de main SCHLAGE 3000 et une imprimante PRP 085 iiit

http://forum.arduino.cc/index.php?topic=554258.0

belt:
j'ai bien mis begin.Serial2(9600);

Euh.... vraiment?

Liens vers vos produits ?

Si on regarde la datasheet du Schlage HandPunch 3000 voilà ce que l'on trouve:

Communications  RS-485 (4 wire)
                RS-232 serial printer support or PC communication

Donc tu ne peux pas l'interfacer directement avec l'Arduino.
Le RS232 fournit une tension qui peut être comprise entre +/-15V (même si généralement les niveaux sont inférieurs) donc cela tue les entrées/sorties de l'Arduino.
Il faut faire une adaptation de niveau pour rendre l'interface compatible des niveaux électriques acceptables par l'Arduino.

J-M-L:
Euh.... vraiment?

non j'ai bien mis Serial2.begin(9600) autant pour moi.

Merci fdufnews !

En effet j'ai regardé et donc pour une communication via RS 232 l'utilisation d'un MAX3323 pour pouvoir adapter les entrées et sorties à une liaison de type CMOS. Je vais donc me pencher là dessus et reviendrai vers vous pour vous dire quels sont les résultats.