Unity3D, Port-série, Arduino : comment augmenter la rapidité de transmission.

Salut proautobot,

ce n'est pas évident que tu trouves quelqu'un pour t'aider efficacement avec des problèmes plutôt spécifiques "Unity 3D" sur ce forum :-~ . Je dis cela car les programmes que je t'ai donnés plus haut fonctionnent bien en C#. Unity 3D, car orienté jeu, impose une gestion des évènements qui lui est propre et que perso je ne compte pas regarder.

Je serai toi je ferai un programme le plus minimaliste en Unity 3D dont le seul but est d'envoyer une chaîne de caractères à l'arduino et de recevoir une réponse (éventuellement une simple copie de ce qu'il a reçu). On oublie temporairement toute spécificité de ton programme (servo, ...), toute sécurisation avec un CRC, ... bref le programme Unity 3D devrait tenir sur 30 lignes et le programme arduino pareil.

Ensuite, si cela ne fonctionne pas, tu postes ces codes ici et sur un forum Unity3D et on regarde (en tout cas moi). Je validerai la partie arduino et d'autres j'espère la partie Unity 3D.

sans vraiment comprendre pourquoi je met /n

Bonjoursijeterépondsdecettemanièreestcequetucomprenàcoupsûrcequejevoudraistexpliquer?

Désolé, j'étais persuadé avoir modifié mon micro up.

Je voulais vous dire que j'arrive enfin à piloter mes 6 servos moteurs. En faite du côté unity j’émettais un message toute les 1 mS . j'ai diminué le débit à 2 mS.

Ceci dit j'aimerais avancer dans mon projet. Je met le CRC à plus-tard. Mais je vous assure que j'ai vraiment envie d'en utiliser un. En effet lorsque j'aurais besoin d'une communication double sens et à but différent cela sera indispensable. Je reviendrais quand je commencerais à améliorer mon programme. D'ici la j'aurai aussi un meilleur niveau.

Pour défendre mon bout de gras. Actuellement si mon programme lit mal un message, 20 milli-seconde plus tard il en reçois un nouveau. Ce qui a pour but de mettre à jour le précédent message. De plus j’empêche la valeur lu de dépasser un l'interval. Je protège ainsi mes servo-moteurs.

Cordialement

Super, tu vas pouvoir avancer :wink:

bien,

il y a une chose sur laquelle je voulais attirer ton attention :

si tu utilises un "scrollbar" ou un truc de ce genre, en cas de translation, l’événement "change" qui y est associé va se déclencher avec une périodicité assez courte (peut-être 1ms, à vérifier)

si à chaque fois tu envoies le message avec tous les caractères des 6 servos, tu vas noyer l'arduino :

  • du point de vue logiciel, car il devra se retaper à chaque fois les calculs de conversion caractères -> décimal (pourcentages) -> rapport cyclique
  • du point de vue matériel : le signal type pwm d'un servo ayant une période de l'ordre de 10~20 ms, ça n'a pas de sens de vouloir le changer à tout bout de champ, je pense qu'il vaut mieux respecter 20ms avant d'envoyer une nouvelle valeur

donc pour ce qui te concerne, modifie tes softs :

  • pour que les messages ne soient pas alourdis par des valeurs de servo n'ayant pas changé depuis l'envoi précédent
  • pour que les messages successifs concernant un servo dont la valeur est en cours de changement soient espacés d'un délai de 20 ms (il faudrait étudier un peu la librairie servo pour affiner ce point)