IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Simplification code avec boucle for + dtostrf


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Par défaut Simplification code avec boucle for + dtostrf
    Bonjour tout le monde,

    J'essaie de simplifier ma fonction miseEnForme au travers d'une boucle mais je n'y arrive pas, voici mon code :

    Cette fonction permet de mettre en forme un URL en ajoutant la valeur de mes capteurs dans l'url.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    void setup() { 
      Serial.begin(9600);
    }
     
    float tempDHT = 12.2;
    float humDHT = 88.55;
    float poids = 50.55;
     
    char tempDHTchar[4];
    char humDHTchar[5];
    char poidschar[5];
    char valeurs[8]=;
     
    //obligé de faire dtostrf à chaque ligne
    void miseEnForme() 
      {
      const String args[4] = { "http://xxxxx.xxxxx.com?Temp=", "&Hum=", "&poids=" };
      String result = "";
      result += args[0];
      dtostrf(tempDHT, 4, 2, tempDHTchar);
      result += tempDHTchar;
      result += args[1];
      dtostrf(humDHT, 4, 2, humDHTchar);
      result += humDHTchar;
      result += args[2];
      dtostrf(poids, 4, 2, poidschar);
      result += poidschar;
      Serial.println(result);
      Serial.println();
     
      }
    J'ai essayé avec une boucle for mais ca ne fonctionne pas car il faut exécuter la commande dtostrf à chaque iteration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
      //probléme car il faut faire un dtosrf à  chaque fois
    void miseEnForme2() 
      {
      const String args2[8] = { "http://xxxx.xxxx.com?Temp=", tempDHTchar, "&Hum=", humDHTchar, "&poids=", poidschar };
      String result2 = "";
     
     
      for (int i=0; i <= 6; i++){
          Serial.print(args2[i]);
       }
     
      Serial.println(result2);
      Serial.println();
     
      }
    Auriez vous une idée par tout hasard ? car pour le moment je n'ai que 3 capteurs mais bientot j'en aurais bien plus .

    Merci pour votre aide

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 152
    Billets dans le blog
    47
    Par défaut
    Bonsoir,

    Peut-être en utilisant sprintf() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    char url[100];
     
    sprintf(url, "http://xxxx.xxxx.com?Temp=%s&Hum=%s&poids=%s", tempDHTchar, humDHTchar, poidschar);
     
    Serial.println(url);

  3. #3
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Par défaut
    Bonjour et merci pour ta réponse mais le probléme est qu'il faut que je convertisse à chaque fois les float en char au travers d'un tableau et cela avec la commande dtostrf mais je dois l'exécuter à chaque itération de ma boucle sinon ca ne fonctionne pas.

  4. #4
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    13 152
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 13 152
    Billets dans le blog
    47
    Par défaut
    Bonsoir,

    Exemple avec une structure :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    struct Sensor {
      float value;
      String argument;
    };
     
     
    Sensor tabSensors[3]={
                          {12.2, "temp"},
                          {88.55, "hum"},
                          {50.55, "poids"}
    };
     
    String url = "http://xxxx.xxxx.com?";
     
    void setup() {
      Serial.begin(9600);
      for (int i=0; i<3; i++){
        //Serial.println(tabSensors[i].value);
        //Serial.println(tabSensors[i].argument);
     
        char r[8];
        dtostrf(tabSensors[i].value, 4, 2, r);
        url+=tabSensors[i].argument;
        url+="=";
        url+=r;
        url+="&";
      }
     
      url=url.substring(0,  url.length()-1); // enlever le dernier '&'
      Serial.println(url);
     
    }
     
    void loop() {
      // put your main code here, to run repeatedly: 
     
    }
    résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://xxxx.xxxx.com?temp=12.20&hum=88.55&poids=50.55

  5. #5
    Membre averti
    Inscrit en
    Novembre 2012
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Novembre 2012
    Messages : 50
    Par défaut
    Bonsoir,

    Merci beaucoup, ça fonctionne exactement comme je voulais.
    Et aussi merci pour les cours et tutoriels pour apprendre Arduino

    Encore merci. sujet résolu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Simplification de code avec boucle
    Par Chatvador dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/07/2016, 08h43
  2. script avec boucle for
    Par gloglo dans le forum Langage SQL
    Réponses: 16
    Dernier message: 30/05/2007, 14h30
  3. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  4. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  5. faire plusieur declaration avec boucle for ?
    Par debutant-1 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2006, 20h19

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo