J'ai utilisé un programme pour faire fonctionner mon lecteur, il est censé afficher le CB, faire une incrémentation tous les scans, le CB ne s'affiche pas entièrement, il affiche que le premier caractères sur toute la ligne du lcd. et aucune incrémentation apparaît
Tu devrais voir coté PC que le code-bar est entièrement transmis, si ce
n’est pas le cas sur le LCD c’est parce que tu lui demande explicitement
de n’afficher qu’un seul caractère (buffer[i]
est de type char
).
Je ne comprend pas tout, je vous met le complet a la fin mais quelqu'un peut m'expliquer ces quelques lignes :
-byte scanCodes[10] = {0x45,0x16,0x1e,0x26,0x25,0x2e,0x36,0x3d,0x3e,0x46};
-char characters[10] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};
-int SCAN_ENTER = 0x5a;
-int SCAN_BREAK = 0xf0;
Il faut bien comprendre que la douchette se comporte comme un clavier, c’est à
dire que lorsqu’elle lit un code-barre, elle envoie le scancode de chaque
caractère lu, exactement comme si quelqu’un entrait les lettres une à une
au clavier. À la fin du code-barre, le scancode correspondant à la touche
Enter est envoyé, et enfin un caractère spécial appelé BREAK.
Le code de chacun de ces caractères n’est pas l’ASCII, mais un protocol ad hoc.
Dans le lien que je t’ai donné, le type pointe sur un site qui donne ces
informations, voici en particulier la page qui liste les scancodes.
On peut y voir notamment que le 0 correspond à 0x45, 1 à 0x16, etc..
Revenons en au code. La fonction dataRead()
récupère les scancodes qui
sont envoyé, le programme principal lui récupère ces scancodes et en fait
la correspondance avec les caractères à l’aide des deux tableaux scanCodes
et characters
. Il stocke les caractères convertis dans buffer
jusqu’à
recevoir un BREAK, auquel cas il affiche les caractère reçu et fait clignoter
la led.