A savoir que la méthode print(var) ou println(var) convertit var en chaîne de caractères, et dans le cas où var est un float, la chaine de caractères représentera un nombre à virgule, mais avec seulement deux décimales, c'est comme ça... Si tu envoies ta valeur avec write(), ce sont les 4 octets du float qui seront envoyés (et encore, il faut essayer car les fonctions arduino sur le port série sont bien trop orientées texte!), mais le terminal arduino les interprètera comme une chaîne de 4 caractères, donc illisible, tu auras l'impression qu'il te dit des gros mots...
La seule solution serait d'utiliser un processing qui traite les 4 octets reçus sous forme de float, ou se faire un terminal perso qui traite des octets et non pas des caractères (ça existe peut être, faudrait googliser la chose).
Je viens de regarder comment j'utilisais mon port série entre arduino et VB6 :
void Serial_write_16(word value){ // écrit un word sur le port série
Serial.write(lowByte(value)); //poids faible
Serial.write(highByte(value)); // poids fort
}
Effectivement, j'envoie deux octets et non pas une variable de 16 bits. Du coup, pour envoyer un float, peut-être faudrait faire un truc genre :
void Serial_write_32(float value){ // écrit un float sur le port série
byte valToSend;
for (byte i = 0; i <= 3; i++) {
valToSend = mem[@value + i]; // (1)
Serial.write(valToSend); //envoi un octet
}
}
(1) : comprendre @ comme renvoyant l'adresse en mémoire de la variable value, mem[
a] est emprunté ici au TurboPascal et renvoie la valeur à l'adresse
a, désolé, je ne maîtrise pas du tout les pointeurs en C ou C++...
Ce code devrait envoyer les 4 octets composant la variable value...
Ensuite, il faut recevoir ces 4 octets comme un float...