Pages: [1]   Go Down
Author Topic: Transformation de tableau de byte en char  (Read 702 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-grin
Cordialement,
Thibaud.

( hum embarassant j'ai poster dans le mauvais topic --' désolé. Est ce qu'un GM pourrait le déplacer =) ? )
« Last Edit: March 11, 2013, 12:57:30 pm by Nanonnien » Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3435
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
« Last Edit: March 12, 2013, 03:03:32 am by fdufnews » Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Bon va falloir être plus précis smiley-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 :
Code:
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);
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

France
Offline Offline
Faraday Member
**
Karma: 36
Posts: 3435
There is an Arduino for that
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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
Logged

France
Offline Offline
Faraday Member
**
Karma: 55
Posts: 5347
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-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.
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Newbie
*
Karma: 0
Posts: 19
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci beaucoup =) !!
Logged

Pages: [1]   Go Up
Jump to: