Effectivement, je ne vous ai montré qu'un morceau du programme. Le chaîne sont remplies évidemment ^^
Bon, alors, j'ai réussi avec les fonctions strcpy et strncpy à faire ce que je voulais faire...
Cependant, je viens de me rendre compte d'un autre problème...
Il me faut aussi pouvoir envoyer des int et des byte (j'ai un joystick qui commande un moteur dans le mode manuel du projet)...
Et donc, avec cette solution de faire avec des char[], je ne vois aps comment faire pour transmettre ces données...
Mon problème est qu'il me faut pouvoir transmettre les 2 voire 3 types de données en même temps (dans la même ligne transmise) car je dois transmettre le mode de fonctionnement et les infos de commandes en fonctions de ce mode.
Par exemple, pour le mode manuel, j'aimerai que ma trame ressemble à ceci :
M1:MA:X:G:Y
avec :
- M1 : mode 1 (manuel)
- MA : octet indicateur de marche avant (ou booléen, mais sachant que la librairie transfère des byte, autant mettre en byte direct, non ?)
- X : octet de vitesse moteur
- G : octet indicateur pour tourner à gauche (ou booléen)
- Y : octet de vitesse de rotation
Voici mes fonctions de transmissions :
/*
* RF_msgT : Message qui sera envoyé par RF
* RF_msgR : Message qui sera reçu par RF
*/
char RF_msgT[RF_PAYLOAD] = "";
char RF_msgR[RF_PAYLOAD] = "";
/*
* RF_bArray : tableau d'octet pour la transmission
*/
byte RF_bArray[RF_PAYLOAD];
/**
* Fonction permettant d'envoyer une chaîne de caractère
* @param msg Message à envoyer
*/
void RF_send () {
// On converti la chaîne à envoyer en octets
strcpy( (char *)RF_bArray, RF_msgT );
Serial.println("\nMessage en cours de transmission :\n\t" + String(RF_msgT));
// On envoie
Mirf.send( RF_bArray );
while (Mirf.isSending());
Serial.println("\t!!Envoi termine!!");
}
/**
* Fonction permettant d'envoyer une chaîne de caractère
* @return Message en cours de réception
*/
boolean RF_receive () {
if(!Mirf.isSending() && Mirf.dataReady()) {
Mirf.getData(RF_bArray);
strcpy( RF_msgR, (char *)RF_bArray );
Serial.println("\nMessage recu :\n\t" + String(RF_msgR));
return true;
}
else
return false;
}
Je ne vois pas du tout comment faire...
Quels conseils pourriez-vous me donner ?
Merci d'avance
PS : La trame que j'ai proposé ci-dessous n'est pas vraiment optimisée et je vais sûrement envoyer la vitesse de rotation du moteur gauche et la vitesse du moteur droite ainsi que leur sens de rotation.
Edit : J'ai trouvé la fonction :
char * itoa ( int value, char * str, int base );
Je pense qu'elle peut m'être utile, mais je ne vois pas comment l'utiliser, mis à part en concaténant des tableaux de char et je pense qu'il y a plus optimisé et plus simple...