Il serait préférable de ne pas utiliser de String, mais des c_string (char[]).
//...
char inString[20];
if (FromProMini.available() > 0)
{
int n=FromProMini.readBytesUntil('\n', inString, sizeof inString-1);
inString[n]='\0'; // marque de fin de chaine
angle = atof(inString);
}
//....
BrUnO14200:
j'ai une Pro Mini qui envoie une valeur de type float à une Uno .
En lisant ceci, moi je comprends qu'un float est envoyé au format binaire, sur 4 octets.
En voyant le code, je comprends que c'est une chaine de caractères qui circule, elle représente un nombre réel (et non pas un float).
Rhhaaaa, le vocabulaire...
@biggil : moi et les types de variables, ça fait 3 ou 4
kamill:
Bonjour,
Pourquoi déclarer inChar comme float
float inChar = FromProMini.read();
read retourne un int
Tu ne mémorises pas le point décimal.
Si tu essaies de lire les caractères plus vite que l'émetteur ne transmet ça ne va pas marcher.
Tu peux simplifier ton programme
//...
String inString = "";
if (FromProMini.available() > 0)
{
inString=FromProMini.readStringUntil('\n');
angle = inString.toFloat();
}
//....
Il serait préférable de ne pas utiliser de String, mais des c_string (char[]).
//...
char inString[20];
if (FromProMini.available() > 0)
{
int n=FromProMini.readBytesUntil('\n', inString, sizeof inString-1);
inString[n]='\0'; // marque de fin de chaine
angle = atof(inString);
}
//....
Tu peux aussi utiliser parseFloat().
Merci , Kamill, ça marche , je reçevais bien des floats négatifs et positifs mais pas la partie après la virgule..
J'ai multiplié la valeur par 100 à l'envoi puis je la divise par 100 à la réception pour "tricher" .. c'est moche mais ça fonctionne