Transformation de tableau de byte en char

Hello !

Alors oui c'est denouveau moi :roll_eyes:. 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 :smiley:
Cordialement,
Thibaud.

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

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 LiquidCrystal - Arduino Reference donc tu n'as rien de particulier à faire pour afficher un nombre.

Bonjour,

Bon va falloir être plus précis :wink:

  • 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 :
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);

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

En C j'ai :

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 :

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.

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

Nanonnien:
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 :wink:

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.

Merci beaucoup =) !!