Bonjour tout le monde.
J'ai l'occasion de revenir ici pour solliciter un peu d'aide. Après de nombreux essais sans succès, sur plusieurs semaines, j'en suis venu à me dire que je n'avais pas la bonne méthode ou bien que je ne m'étais pas orienté dans la bonne direction.
Pour faire simple. J'ai un message relativement long qui part du PC et qui doit être traité par la carte arduino uno. J'ai donc choisi de couper les choses en plusieurs morceaux. Un morceau "adresse" et un morceau "message". Sachant que le message demandera certainement un traitement spécifique.
Je rencontre 2 problèmes. Le premier est que le message n'a pas le temps d'arriver à temps pour la considéré comme arrivé correctement. Je n'ai pas trouvé comment forcer mon while sur la fin de chaine avec "\n".
Il faut que je reste en phase avec ma structure :
const uint16_t sizeMaxData = 43; //Taille max du data à envoyer
struct data_t {
uint16_t addr[8];
uint8_t dataSend[sizeMaxData]; //Nombre d'octets
} data;
Le second problème c'est de parser efficacement la chaine. J'aimerais envoyer quelque-chose comme :
"Addr;0xAF21:0xAF22:0xAF23:0xAF24:0xAF25:0xAF26:0xAF27:0xAF28". Je dois parser plusieurs chaines. J'ai pensé à strtok mais je n'ai pas réussi a le faire fonctionner correctement.
Au final, je pense à un pseudo code simple:
//Loop {
//if(Serial.available)
//while(Serial.available tant que pas "\n")
//Recevoir du data
}
//Nous avons une chaine à parser avec strtok
//Si Addr {
//data.addr[0] = 0xAF21
//data.addr[1] = 0xAF22
//data.addr[2] = 0xAF23
//data.addr[3] = 0xAF24
//data.addr[4] = 0xAF25
//data.addr[5] = 0xAF26
//data.addr[6] = 0xAF27
//data.addr[7] = 0xAF28
//}
//Si Msg {
//dataSend = message
//}
//}
//}
Peut-être que ne je suis pas dans la bonne direction. En tout cas, j'aimerais résoudre le problème du message qui n'arrive pas complet. Nous verrons ensuite le problème du strtok et de sa pratique.
Merci.