Salut tout le monde,
Je développe un actuellement un projet mélangeant un Arduino Zero et une application en VB .net.
L'Arduino doit envoyer par USB un peu prés 8000 bytes par secondes par paquet de 6 bytes. (6 bytes, delay de 500µs, 6 bytes, delay de 500 µs, etc..).
Le problème, c'est que j'ai des octets qui sautent de temps de en temps...
Voici ma fonction Arduino, j'utilise oui le port série, pas de soucis la dessus, il travaille bien en 115200 8N1. :
SerialUSB.write(Buffer_Gypro, 6);
Et ma fonction de reception VB.net, c'est ici que j'observe un décalage au bout de 200 lectures à peu près: IncomingBytes(4) contient la valeur de IncomingBytes(5)..:
1 2 3 4 5 6 7 8
|
SerialPort1.Read(IncomingBytes, 0, 6)
Byte0 = IncomingBytes(0)
Byte1 = IncomingBytes(1)
Byte2 = IncomingBytes(2)
Byte3 = IncomingBytes(3)
Byte4 = IncomingBytes(4)
Byte5 = IncomingBytes(5) |
J'utilise read comme je souhaite travailler en byte et non en chaine de caractères pour optimiser mes traitements de données.
Je n'ai pas de soucis avec la fonction ReadByte, toutefois celle ci fait ralentir le transfert de données et n'arrive pas à supporter un débit supérieure à 4000 bytes/sec (les octets s'accumulent dans le buffer du port jusqu'à leurs traitements...)
J'observe également le même problème lorsque j'augmente l'intervalle entre chaque paquet (en changent 500µs a 100ms).
Le problème vient bien de l'appli, je n'ai aucun soucis de pertes de données avec mes 3 hyperterminal (putty, termite et celui de l'IDE d'Arduino).
Y-a t'il un moyen pour rendre solide et sans pertes cette communication ?
Voilà comment est configuré mon port série dans l'appli, je pense pas avoir fait d'erreur ici :
1 2 3 4 5 6 7 8 9 10 11
|
With SerialPort1
.PortName = COM_Port_Detected
.BaudRate = 115200
.Encoding = System.Text.Encoding.Default
.RtsEnable = True
.DtrEnable = True
.Parity = Parity.None
.StopBits = StopBits.One
.Open()
End With |
Merci pour votre aide,
Bonne journée
Partager