[RESOLU] Faire reconnaitre un float par communication serial


bonjour l'internet,


j'utilise un arduino nano pour contrôler une pompe en période et durée de fonctionnement. (du blink sans delay qui fonctionne très bien)


le petit truc en plus: j'ai rajouté une commande en serial pour changer la période et la durée de fonctionnement; à base de serialevent(), de reconnaissance de string, découpage, puis transformation de substring en float. plus explicitement:


code: [select]


void commandeserial() {
  float valeur = 0;  
  if (stringcomplete) {
    serial.println(inputstring); // print string when newline arrives
    int separator;
    separator = inputstring.indexof("=");
    if ( separator > 0) { // recherche un signe egal dans la commande, si oui stocke la valeur
      string valeur_lue;
      valeur_lue = inputstring.substring(separator + 1);
      valeur = valeur_lue.tofloat();
    }

   if (inputstring.startswith("dureepompe=")) {
      dureepompe = valeur;
      serial.print(f("ok, je vais pomper toutes les "));serial.print(periodepompe); serial.print(f("h, pendant ")); serial.print(dureepompe); serial.println(f(" s"));
    }
  if (inputstring.startswith("periodepompe=")) {
      periodepompe = valeur;
      serial.print(f("ok, je vais pomper toutes les "));serial.print(periodepompe); serial.print(f("h, pendant ")); serial.print(dureepompe); serial.println(f(" s"));
    }

    // clear string:
    inputstring = "";
    stringcomplete = false;
  }/**/
}

void serialevent() {
  while (serial.available()) {
    // new byte:
    char inchar = (char)serial.read();
    // add inputstring:
    inputstring += inchar;
    // if incoming character newline, set flag
    // main loop can it:
    if (inchar == '\n') {
      stringcomplete = true;
    }
  }
}




voila comment ça marche: dans le moniteur série, j'écris par exemple periodepompe=5, le code va reconnaitre "periodepompe=", et récuperer en substring le "5" qui suit, le transformer en float, puis l'attribuer à periodepompe.

et ça marche très bien avec 5, et avec tous les entiers d'ailleurs.


mais ça ne marche pas avec des nombres décimaux!!!!!  :'(  :'(  :'(  :'(  :'(  :'(
lorsque je rentre disons 5.2, la periodeco2 devient 5. et si je rentre 0.5 c'est l'enfer, periodeco2=0 et la pompe s'arrête plus, mais ça c'est facile à régler avec une petite condition.


j'ai absolument tout déclaré en float, ce qui est un peu hardcore, long pourrait suffire je crois.


un conseil, un avis pour m'éclairer? où est-ce que ça coince?

merci,

bonjour,

le programme semble correct (sous réserve de la déclaration des variables que l'on ne voit pas).

est ce que l'affichage de la chaine reçue est correct?
est ce que tu utilise bien un '.' comme séparateur décimal?
est ce que l'affichage de le valeur décodée est correct?
tu parles de periodeco2, mais il n'apparait pas dans ton code.


Arduino Forum > International > Français (Moderators: jfs, Snootlab) > [RESOLU] Faire reconnaitre un float par communication serial


arduino

Comments

Popular posts from this blog

DHT11 Time out error using v0.4.1library

Sketch upload fails with Java error (___REMOVE___/bin/avrdude)!

Arduino Uno + KTY81/210 temperature sensor