Bonjour,
Je vous écrit aujourd'hui car j'ai un problème avec ma carte (UNO), j'ai besoin de lui envoyer un flux permanent de données par USB (actuellement toute les 25 ms, via un programme externe). La valeur de ce flux est 90, donc tout se passe à peu près bien sauf que par moment j'ai ceci:
90
90
90
9
0
0
0
90
90
...
Alors qu'absolument rien n'a été touché, ça doit venir d'un problème de vitesse de lecture de la carte peut-être ?
En fait j'aimerai savoir si quelqu'un a une idée sur ce problème ?
Mon programme externe envoie la donnée toute les 25ms et arduino fait une boucle avec un timer de 25ms aussi.
Alors là ! Je suis bluffé ! C'était exactement ça mon problème
Mais du coup il me reste un autre soucis (si jamais tu repasses par ici, sinon je ferai un autre post au besoin) :
Des fois au lieu d'interpreter le nombre (par exemple) 126, il va interpreter 12 puis 6 (en gros il va couper le nombre à 3 chiffres), as-tu une idée d'où celà peut venir ?
A mon avi ton Arduino et ton programme externe ne sont pas synchroniser, ce qui a tendance a couper ton nombre,
tu devrais instaurer un système de top pour signaler quand lire le nombre.
Naphta:
Alors là ! Je suis bluffé ! C'était exactement ça mon problème
Oui et non. Ton problème c'est que lorsque tu arrives à la fin de ton while rien ne te garantie que le caractère suivant est déjà arrivé.
Tu as entrevue le problème puisque tu as une variable (sent) qui t'indique si tu commences une réception ou non.
En plus des fois tu envoies des nombre à 2 chiffres et d'autre fois des nombres à 3 chiffres. Comment ton code peut-il savoir quand s'arrêter?
Il faut mettre en place un protocole de communication.
Il te faudrait un code qui indique le début d'une trame de données. La réception de ce code positionnerait pos à 0.
Ensuite tu accumules les caractères reçus comme tu le fais actuellement.
Un code de fin de trame de données ferait sortir du while et interpréter la nouvelle valeur.
Un protocole plus simple pourrait éventuellement se passer du code de début de trame. La réception du code de fin validant la donnée et remettant pos à 0. Dans ce cas le premier transfert pourrait être tronqué.