Bonjour à tous,
J’ai récemment changé d’ordinateur et je rencontre un problème que je ne parviens pas à régler.
J’ai développé il y a quelques années une application Arduino (UNO R3) pour le contrôle d’une matrice de LED RGB à partir d’un ordinateur. Cette application envoie le motif d’éclairage comme une trame d’octet.
Jusqu’à présent, j’utilisais un ordinateur équipé de Windows 7 (64 bit, version 1.6.8 de l’IDE) et je n’ai rencontré aucun problème. J’ai remplacé l’ordinateur par un autre plus récent équipé de Windows 10 et cela ne fonctionne plus correctement.
Le téléchargement se déroule bien, la communication bi-directionnelle entre l’ordinateur et l’Arduino est fonctionnelle mais dès que j’envoie une trame un peu longue (au maximum 180 octets), elle n’est pas transférée entièrement.
Cela semble dépendre de la vitesse de transfert : à 57600 baud, le problème apparaît pour une trame de 65 octets, pour une vitesse plus lente, la longueur de la trame est un peu plus longue mais encore insuffisante. De même, si je réduis le délai imposé ici à 1200 µs, quelques octets supplémentaires sont transmis mais c'est insuffisant.
J’ai testé plusieurs versions d’IDE (1.6.2, 1.6.8, 1.8.12) sans résultats.
J’ai testé sur d’autres PC en Windows 7 et Windows 10 et le problème n’apparait que quand je télécharge le firmware avec Windows 10.
Si je télécharge le firmware avec Windows 7 mais que l’utilise l’application avec Windows 10, cela fonctionne très bien.
J’ai le même défaut avec des Arduinos officiels et des clones.
Auriez-vous déjà rencontré ce problème (je n'ai rien trouvé de semblable sur Internet) ? Je place le code Arduino en fin de message.
Par avance merci.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 //----------------------------------------------------------------------: // --- Réception des octets envoyés par le PC --- : //----------------------------------------------------------------------: unsigned char In[NPIX * 3 + 4]; // Tableau de réception des paramètres. unsigned int LgMsg; // Longueur du message reçu. unsigned int i = 0; // Compteur de boucle. while (Serial.available()) { In[i++] = Serial.read(); delayMicroseconds(1200); } LgMsg = i - 1; // Longueur du message = nombre d'octets recus. Serial.println(LgMsg);
Partager