salut, je fabrique en ce moment une surface de contrôle pour logiciel de son. a l'intérieur il y a 6 arduino nano dont 5 communiquent en I2c (master listener). je voudrais que l'un deux envoi des messages de ce type : "<002:058:060>" avec "<" et ">" en indicateur de début et de fin et ":" comme séparateur. ensuite je voudrais que le maitre qui reçoit le message puisse le découper en fonction des séparateurs et assigner les valeurs reçue aux bons endroits.
je pensait convertir ce que j'ai reçu en string, attendre que la variable face 13 caractère, puis la découper et convertir les valeurs en integer pour les traiter.
comment puis je faire ?
ps : quand j'utilise
Wire.readString();
j'ai un temps de latence de fou, au moins une seconde.
j'utilise donc :
Wire.setTimeout(10);
mais c'est pas génial.
merci !
Bonjour
Es-tu obligé de t'embêter à véhiculer en I2C des valeurs étendues, pour ensuite les stocker dans un chaîne de caractères et en extraire les valeurs ?
Je ne vois pas l'intérêt d'ajouter des balises de début/fin, séparateur etc
"<002:058:060>"
Ce message fait 13 caractères (13 octets). Si l'objectif est d'envoyer 3 valeurs de type octet et les extraire à l'autre bout, autant écrire simplement un message de trois octets directement sur le bus I2C.
salut, merci de ta réponse.
tu a raison je peut allégée mon bus en réduisant ma trame. le pb avec l'i2c c'est que le maitre est obliger de faire une demande pour recevoir quelque chose avec :
wire.requestfrom(adresse, nb d'octet de la réponse)
par consentant comme mes valeurs vont de 0 a 127, je suis obliger d'avoir une trame d'au moins 9 octet.
je peut ensuite lui dire de faire des paquet de 3 et de les convertir pour qu'ils puisse être afficher et traité.
ps: si j'utilise l'i2c c'est juste que j'avais penser mon circuit comme ca a la basse et que j'ai été très désillusionné dé que j'ai commencer l'utilisation. et désormais je ne peut plus changer car chaque pin de mes arduino sont prises
merci !
non !
Y a visiblement un truc que tu ne comprends pas : une valeur qui va de 000 à 127, occupe trois caractères uniquement quand on veut l'afficher en clair pour des yeux humains, comme par exemple dans le cas de la phrase que je viens d'écrire.
Mais pour manipuler cette valeur au sens informatique du terme, un seul octet suffit.
Un octet a une valeur comprise entre 0 et 255.
//exemple de code côté maître pour un message de 3 octets
byte message[3];
Wire.requestFrom(esclave, 3);
Serial.print("recu : ");
byte i = 0;
while (Wire.available() && i<3)
{
message[i] = Wire.read();
Serial.print(message[i]);
Serial.print(' ');
i++;
}
Serial.println('.');
salut, merci de ta réponse.
je vient de comprendre. et je te remercie.
je vient de corriger mon pb . merci