je cherche la solution pour transférer une donnée d'un GPS connecté a un arduino vers un autre
La valeur est l'orientation de la longitude ou latitude N,S,E,W
Ma donnée est : GPS.lat
Normalement pour l'envoi vers le LCD , j'ai cette expression :
if ( GPS.lat == 'N' ) tft.println(" N"); // N or S
else tft.println("S");
Si tu veux convertir une lettre en flotant, ce n’est pas joli, mais c’est possible, du côté où tu écris tu fais ceci :
float aEnvoyer = 0.0F; // initialisation de la variable à 0
*((char *)&aEnvoyer) = 'N'; // ca écrit le caractère "N" dans l'espace mémoire occupé par ton flottant qui du coup dévient invalide et n'importe quoi, n'essaie donc pas de faire un "print" ou quoi que ce soit avec...
Serial.write(aEnvoyer); // ne surtout pas faire un "print", sinon, utilise ce que tu veux pour transferer mais en binaire
Puis du coté où tu reçois ton flotant-buffer :
float aRecevoir; // flottant qui va recevoir ta valeur codée
char cardinal; // caractère qui recevra ta lettre "décodée"
Serial.read(aRecevoir); // ou quoi que ce soit d'autre comme lecture *binaire*
cardinal = *((char *)&aRecevoir); // "décodage" de ton flottant-lettre-buffer
C’est très moche, mais ca peut marcher. Sinon il y a plus simple, tu fais comme dit CelticLord et t’utilises autre chose que des flottants comme ferait tout le monde.
Je débute dans tout ça et je soin loin d' etre une source d'information infaillible mais à la limite pourquoi ne pas mélanger ta méthode et celle de Zorro, au lieu de mettre la valeur 1 ou 0 qui est un entier ca vient peut etre de la, tu essayes avec float dirlat1 = 0.0F ou 1.0F comme ca tu as 0 ou 1 directement en float.
Reprenons, on dirait que t'as modifié et enrichi ton premier message, alors avec ces éléments nouveaux, voici tout d'abord quelques commentaires à propos de ton code :
Coté "master" : RAS, soit...
Mais coté "slave" :
char dirlat2; // cette variable n'est pas initialisée donc elle vaut n'importe quoi entre 0 et 255
char N; // ca c'est une "variable" qui s'appelle "N" et qui ne contient pas du tout la valeur 'N', en plus elle n'est pas initialisée donc elle vaut n'importe quoi entre 0 et 255
char S; // pareil qu'avec N mais avec S
if ( dirlat2 == '1' ) // cette variable n'étant pas initialisée, t'as une chance sur 256 pour qu'elle contienne '1'
{
char dirlat2 = N; // là t'es en train de créer une nouvelle variable qui s'appelle aussi dirlat2 à laquelle t'affectes la valeur non-initialisée de la variable N.
// comme c'est une nouvelle variable dirlat2, ca n'affectera pas la valeur de dirlat2 déclarée au-dessus
}
else
{
char dirlat2 = S; // la même chose qu'au dessus (!)
}
Serial.println( sensorData[sensor].dirlat2,0); // sensorData[sensor].dirlat2 est encore une autre variable : le champ d'une structure, donc rien de ce que t'as fait au dessus n'affectera ni changera sa valeur...
Pour info, voici un code qui affecte le caracètre ASCII 'N' ou 'S' à une variable en fonction de la valeur d'une autre :
int valeurCodee = 1; // disons 1 pour 'N' et n'importe quoi d'autre pour 'S' (une valeur différente de 1 quoi)
char cardinalDecode;
if ( valeurCodee == 1 ) // si la valeur de codage vaut 1
{
cardinalDecode = 'N'; // alors on affecte le caractère ASCII 'N', les guillemets simples utilisés sont très importants, ca veut dire "la lettre N en ASCII"
// si tu mets N sans les guillemets c'est une variable (qui doit exister et être déclarée au préalable), pas un caractère ASCII
}
else
{
cardinalDecode = 'S'; // sinon (si la valeur de codage vaut autre chose que 1), alors on affecte le caractère ASCII 'S'
}
// à partir de là, cardinalDecode contient le caractère 'N' ou le caractère 'S' qui peut être utilisé dans un serial.print() :
Serial.println(cardinalDecode);
Il va falloir revoir un petit peu tes bases de programmation, t'as d'excellents tutoriels partout sur le net, t'as qu'à taper "tuto C" ou "tuto C++" et tu n'auras que l'embarras du choix !
int dirlat1 = 1; // disons 1 pour 'N' et n'importe quoi d'autre pour 'S' (une valeur différente de 1 quoi)
int dirlat2 = 1;
if ( GPS.lat == 'N' ) dirlat1 = 1;
else dirlat1 = 0;
if ( dirlat1 == 0 ) // si la valeur de codage vaut 1
{
dirlat2 = 'N'; // alors on affecte le caractère ASCII 'N', les guillemets simples utilisés sont très importants, ca veut dire "la lettre N en ASCII"
// si tu mets N sans les guillemets c'est une variable (qui doit exister et être déclarée au préalable), pas un caractère ASCII
}
else
{
dirlat2 = 'S'; // sinon (si la valeur de codage vaut autre chose que 1), alors on affecte le caractère ASCII 'S'
}