Bonjour
Je vous présente mon problème. J’ai réalisé une « pointeuse » avec les éléments suivants
Arduino Nano
Shield datalogeur (lecteur carte microSD, horloge)
Afficheur LCD 2 lignes 16 caractères I2C
lecteur de code barre 'Code39" sortie TTL
Fonctionnement
Attente de données sur port série
lecture code barre et stockage dans variable
puis
Affichage d’un message de bienvenue et du code numérique du code barre avec des Delay() pour augmenter le temps d’affichage
puis
Stockage sur la carte SD d’une ligne contenant Date, Heure et code numérique du code barre
puis
Retour au début pour le prochain code barre
(Durée d’un cycle complet environs 8s après la lecture du code barre)
Cette installation fonctionne très bien depuis plus d’un an, Aujourd’hui j’ai besoin d’ajouter une condition pour éviter les doublons lors de la lecture (certaines personnes badge plusieurs fois de suite)
J’ai donc fais une boucle if qui vérifie que le nouveau code barre lu ne soit pas identique au précédent et qui dans le cas d’un doublon lance « return void() » et cela fonctionne bien si programme à fait un tour complet (8s)
Mais si un nouveau code barre est lu avant cette durée il n’est pas vu comme un doublon.
La lecture du code barre est faite sur un port série virtuel pin D5 et D6 à l’aide de la librairie « SoftwareSerial » , j'utilise le code ci dessous pour la capture des données
while(mySerial.available()) { // Attente du debut de reception
mySerial.setTimeout(500); // Délai après le dernier caractère
C39Complet= mySerial.readString(); // capture de la chaine sur port série
J’ai essayer de vidanger le buffer d’entrée avec flush en fin de programme mais cela ne fonctionne pas.
Merci pour votre aide