Pinhapple a écrit :J'ai fait quelques calculs et tests cet après-midi : j'ai théoriquement 16 384 impulsions par tour (5 caractères), 125 µs de durée d'impulsion (3 caractères), et 250 µs entre deux fronts montants (3 caractères) : si je fais le calcul de ce que je vais avoir à balancer en UDP, j'arrive à 5 + 16 384 * 3 + 16 384 * 3 = 98 309 caractères dans une chaîne, sans même inclure les séparateurs, ce qui ferait monter le total à 98 309 + 32 768 = 131 077 caractères. Je n'y connais pas grand chose en UDP avec Python et Arduino, mais ça ne représente pas une immense quantité de données à envoyer/recevoir ? Sachant que l'Arduino est censé envoyer cette chaîne entre deux impulsions, donc en moins de 125 µs...

T’es pas prêt de t’en sortir comme ça.
Primo :
Convertir tes entiers en string, c’est du n’importe quoi. Ça te fais (16384 * 2) + 1 conversion par tour. Je ne parle même pas de l’explosion relative de la quantité mémoire utilisé (faut-il encore qu’il y en ait assez sur l’arduino) pour tout buffériser. Tout ça pour qu’a l’envoi tout soit forcement re-encoder en octets avec en prime une multiplication par 4 la volumétrie nécessaire.
Un truc qu’il faut savoir, c’est que tu ne transmets ni des chaines de caractères et encore moins des entiers. Tu ne transmets que des octets et la quantité dépend des types de départ et de l’encodage utilisé.
Secondo : 131077 octet par tours.
Un datagram UDP unicast c’est maxi 65535 octet. Là-dessus, il faut en enlever 20 pour le header IP et 8 pour le header UDP donc la taille maxi du payload c’est 65535 – (20 + 8) = 65507 octet. Ce qui veut dire qu’avec ta méthode tu vas devoir envoyer les résultats d’un tour en au moins 3 séquences. Il faut aussi savoir que les gros datagramme UDP, c’est bien, mais forcement ça fragmente (de mémoire MTU Ethernet 1500 octet) et qui dit fragmentation dit conso mémoire (si l'en reste ...) , conso uc (si il a encore du temps) et dégradation des performance (et pas qu’un peu sur des petits systèmes comme le pi ou l’arduino)
Pour résumer, ton arduino est déjà sur les rotules à force de traitement d’interrupt. et de conversion, il n’a plus de mémoire et sa couche réseaux est totalement saturée.
Pour te répondre clairement, Non, ca ne marchera pas avec ces méthodes.
Ton problème de volumétrie par tour peut tout simplement se résoudre en 32770 octets en raisonnant de la sorte :
1 word (2 octets) pour stocker la valeur d’impulsion + 16384 bytes (1 octet) pour stocker 16384 durée d’impulsion + 16384 bytes (1 octet) pour stocker 16384 durée de signaux.
De là à les envoyer en 125 µS, ce n’est pas gagné …
Le premier ennemi de la connaissance n’est pas l’ignorance, c’est l’illusion de la connaissance (S. Hawking).