Go Down

Topic: Transformation de tableau de byte en char (Read 864 times) previous topic - next topic

Nanonnien

Mar 11, 2013, 06:50 pm Last Edit: Mar 11, 2013, 06:57 pm by Nanonnien Reason: 1
Hello !

Alors oui c'est denouveau moi  :smiley-roll:. J'ai un petit soucis j'aimerai afficher les valeurs qui me sont envoyés par un capteur température et humidité sur un écran LCD. Pour cela je dois évidemment avoir des caractères a afficher, mais les données que j'ai sont sous forme de tableau de bytes. Je pense bien que ça doit pas être compliqué mais comment faire pour reprendre mes bytes et les transformer en tableau ou en char afin des les afficher ? Est ce que c'est possible ou je devrais récupérer autrement mes données ?

En espérant une fois de plus avoir été clair  :D
Cordialement,
Thibaud.

( hum embarassant j'ai poster dans le mauvais topic --' désolé. Est ce qu'un GM pourrait le déplacer =) ? )

fdufnews

#1
Mar 11, 2013, 09:18 pm Last Edit: Mar 12, 2013, 09:03 am by fdufnews Reason: 1
Si tu affiches sur un écran LCD, tu dois utiliser la librairie LiquidCrystal.
Cette librairie contient une méthode print qui accepte en entrée des bytes http://arduino.cc/en/Reference/LiquidCrystalPrint donc tu n'as rien de particulier à faire pour afficher un nombre.

skywodd

Bonjour,

Bon va falloir être plus précis ;)
- Quel type d'écran lcd ?
- Avec quelle librairie / code ?
- Quel format pour le tableau de byte ?

En vrac :
- avec LiquidCrystal : une boucle "for" pour parcourir le tableau et LiquidCrystal::print() pour afficher la valeur à chaque fois
- sinon sprintf() pour faire une conversion byte -> char[] et utiliser une fonction d'affichage de texte de ta librairie
Exemple :
Code: [Select]
char buf[21];
byte temp[5];

sprintf(buf, "%x %x %x %x %x", temp[0], temp[1], temp[2], temp[3], temp[4]);
lcd.print(buf);
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Nanonnien

Hello Skywodd ça commence a être une habitude que tu me répondes !
-écran lcd 128*64
-librairie u8glib

En C j'ai :

Quote

float DHT::readHumidity(void) {
  float h;
  if (read()) {
    switch (_type) {
    case DHT11:
      h = data[0];
      return f;
    case DHT22:
    case DHT21:
      h = data[0];
      h *= 256;
      h += data[1];
      h /= 10;
      return h;
    }
  }
  Serial.print("Read fail");
  return NAN;
}


après je l'apelle comme ça :

Quote

  float t = dht.readTemperature();


et il m'est demandé un const char* pour l'affichage par la bibliothèque. Je me disais que le plus simple aurait été de prendre mes bytes à la source avant d'en faire un float et de les transformer directement en caractères. Après un autre problème se pose à moi, si j'ai besoin de float pour un calcul je devrais retransformer mes char en float.

fdufnews


La librairie u8glib implémente la méthode print elle aussi. Donc elle affiche directement les nombres qu'on lui passe en argument et il n'est pas nécessaire de passer par des chaines de caractères.
http://code.google.com/p/u8glib/wiki/userreference#print

skywodd


et il m'est demandé un const char* pour l'affichage par la bibliothèque. Je me disais que le plus simple aurait été de prendre mes bytes à la source avant d'en faire un float et de les transformer directement en caractères. Après un autre problème se pose à moi, si j'ai besoin de float pour un calcul je devrais retransformer mes char en float.

La fonction print() peut afficher directement un float regarde bien le lien donné par fdufnews ;)

Tu gardes ta température dans un float (tu convertis tes byte[] en float suivant la formule qui va bien) et tu passes juste la valeur à print().
En interne print() fera le formatage flottant -> texte et l'affichage.
Comme ça tu garde ton float tel quel pour tes calculs ou autre si besoin.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !


Go Up