Serial write() et read()

Bonjour,

J'aimerais envoyer à partir d'un programme un flottant 32 bits, soit 4 octets.
Sous VB, je l'écris: SerialCom.WriteLine(mon_single)

Sur ma arduino, j'aimerais récupérer cette valeur dans un double (32 bits sur arduino)

void loop()  {
   if (Serial.available()) {
      byteRead = Serial.read();
      Serial.write(byteRead);
      mon_double = (???) byteRead;
   }
}

Tout est dans le cast, je ne sais pas comment faire.
Si j'utilise le terminal arduino et que j'écris 1.99585, il m'affiche 1.99585.
Donc automatiquement, il concatène la reception de 4 octets, et affiche la valeur ? Pourtant dans le code je lis et write() octet par octet? Ou bien c'est converti en string et le premier octet vaut "1", puis le deuxieme ".", puis "9", etc ?

En clair, je ne sais pas quel(s) cast sont fait sur la transmission, et finalement, comment obtenir mon double ?
J'ai vu ce topic: http://forum.arduino.cc/index.php/topic,124745.0.html qui convertit 8 octet en 32 bits, mais ça répond pas totalement à ma question.

Je nage, pouvez vous me lancer une bouée?
Merci

Anduriel:
Si j'utilise le terminal arduino et que j'écris 1.99585, il m'affiche 1.99585.
Donc automatiquement, il concatène la reception de 4 octets, et affiche la valeur ? Pourtant dans le code je lis et write() octet par

Le terminal envoie des caractères. Donc ton programme reçoit une chaîne de caractères.
Pour récupérer la valeur numérique il faut passer la chaîne à la fonction atof() qui converti une chaîne de caractères en flottant.

void setup() {
char machaine[8]="1.25452";
float lechiffre;

lechiffre=atof(machaine);
}

void loop() {

}

Merci fdufnews, mais le byte est considéré comme un int, mon atof renvoie une erreur "invalid conversion from int to const char*".

float res = atof(Serial.read());

Oui Serial.read() renvoie un int entre 0 et 255 correspondant à la table ASCII. Ce n'est pas une chaine de caractère.

int i=0
while(Serial.available()) MaChaine[i++]=Serial.read()
float Nombre=atof(MaChaine);

J'ai pas dit de coller le Serial.read() dans atof. J'ai juste donné une piste.

Une autre piste

Plus l'exemple ReadASCIIString qui se trouve dans l'IDE (menu Fichier/Exemples/04.Communication/ReadASCIIString )

Merci pour vos réponses.

Je n'arrive pas à trouver des docs qui m'expliquent ceci (si vous avez des liens, je suis preneur:): je vois en VB que le serial possède un buffer de lecture et d'écrire. J'imagine que la Arduino aussi.
Que se passe-t-il si trop de byte sont empilés, et pas assez vite dépilés, ce qui est envoyé est alors perdu?

Pouvez-vous me dire quel est le "chronogramme" ou fonctionnement / traitement de débordement ou je ne sais quoi d'autre? Car c'est possible que ma loop() soit plus lente que les données reçues?

Merci

Plop

Si tu veux savoir en detail comment ca se passe , c'est de lire la doc de ton mico-controleur! T'as quoi comme type d'arduino? Par contre accroche toi c'est tout en anglais :wink:
Voici la doc du Atmega32u4: http://academy.cba.mit.edu/classes/embedded_programming/doc7766.pdf
(regarde la section USART)

Et pis si tu as peur de rater des données sur ta liaison utlise les interrruptions...