Go Down

Topic: [Résolu] Convertion de Variable (Read 580 times) previous topic - next topic

cutprod

Feb 19, 2012, 10:35 am Last Edit: Feb 19, 2012, 02:38 pm by cutprod Reason: 1
Bonjour, j'ai besoin d'un petit coup de main pour convertir une variable.
je recois par radio un array contenant un string, je peux l'afficher avec =
Quote
#include <VirtualWire.h> // inclusion de la librairie VirtualWire
//pin de rx = 11 par default
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message recu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau

#include <LCD4884.h>
// LCD_RST pin 6
// SPI_CS  pin 5
// SPI_MOSI pin 3
// SPI_SCK pin 2
// LCD_DC  pin 4
// LCD_BL  pin 7
String text;

void setup()  
{
Serial.begin(9600);
lcd.LCD_init(); // creates instance of LCD
lcd.LCD_write_string(0,0,"LCD OK",0);
delay(2000);
lcd.LCD_clear(); // blanks the display

pinMode(7, OUTPUT);
 
 vw_set_ptt_inverted(true);//necessaire au reto ecl du lcd shield
 vw_setup(2000);   // initialisation de la librairie VirtualWire à 2000 bauds (note: je n'utilise pas la broche PTT)
   vw_rx_start();  // Activation de la partie réception de la librairie VirtualWire

 

}

//##############################################################################
void loop()
{
uint8_t buf[VW_MAX_MESSAGE_LEN];
uint8_t buflen = VW_MAX_MESSAGE_LEN;

      if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
      {
         lcd.LCD_clear();
                       int i;
                       lcd.LCD_write_string(0,0,"RX=>",0);
         lcd.LCD_set_XY(0,1);
                           for (i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
            {
                               lcd.LCD_write_char(buf,0);
                               text= buf;
                               Serial.print (text);
                 }
                Serial.println ("");
                affiche_text();
      }

}

void affiche_text()
{
Serial.println (text);  
}

mais apres je n'arrive pas a "sauver" cette chaine pour la manipuler avec "substring()" ou
"startsWith()"
Je dois me planter quelque part, mais ou ?
La fonction affiche_text() ne m'affiche que le dernier char de l'array! Or c'est ici que je voudrais manipuer ma chaine  =(

fdufnews

Il doit y avoir une erreur dans cette boucle. i n'est pas utilisé
Tel qu'elle est écrite cette boucle devrait
     - écrire buflen fois le premier caractère de buf sur l'afficheur LCD
     - initialiser buflen fois text avec le contenu de buf
     - afficher buflen fois le contenu de buf sur la console

Code: [Select]
                            for (i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
            {
                                lcd.LCD_write_char(buf,0);
                                text= buf;
                                Serial.print (text);
                 }

cutprod

Merci a toi pour ton aide.
C'est vrai je sais pas ce qu'il c'est passé! j'ai poster un code erroné!
après correction =
Code: [Select]
for (i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
            {
                                lcd.LCD_write_char(buf[i],0);
                                text= buf[i];
                                Serial.print (text);
                 }
                 Serial.println ("");
                 affiche_text();

la console affiche bien "text" mais pas la fonction affiche_text(), qui m'affiche le dernier élément du tableau  :(

Tealcoune

le fais qu'il ne t'affiche que le dernier élément du tableau c'est tout a fais normal.

tu fais text = buf; donc a chaque fois que tu tourne dans la boucle for .. tu modifie text au lieu de concaténé buf a chaque fois .

Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

cutprod

Oui je comprend d'ou vient mon erreur, mais je ne sais pas comment la corriger  :smiley-red:
Comment faire pour que ma variable text soit = à l'assemblage des char contenu dans buf ?

cutprod

#5
Feb 19, 2012, 02:35 pm Last Edit: Feb 19, 2012, 02:38 pm by cutprod Reason: 1
Problème résolu !
A force ...
il faut incrémenter la variable text avec le contenu de buf =>
Code: [Select]
if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
{
lcd.LCD_clear();
                       int i;
                       lcd.LCD_write_string(0,0,"RX=>",0);
lcd.LCD_set_XY(0,1);
                       text = "";  
                           for (i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
                             {
                               lcd.LCD_write_char(buf[i],0);
                               text += buf[i];
                              }
                  }

et là ma variable text est un string pur et dur auquel je peux appliquer un traitement ...
Merci a tous pour votre aide  :)

Tealcoune

héhé.. ^^.. bon du incrémente pas la variable text mais c'est pas grave (mot mal utiliser)... ^^...

mais tu vois le plaisir de trouver soit même la solution.. ^^..
Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

cutprod

#7
Feb 19, 2012, 02:47 pm Last Edit: Feb 19, 2012, 02:52 pm by cutprod Reason: 1
excuse pour la mauvaise utilisation... j'apprends tout seul, je suis électricien...
Tu as bien raison et c'est la meilleur façon d'apprendre! Ce qui me manque c'est le temps...(boulot, famille...)

Tealcoune

t'inquiète pas ce n'étais point un reproche.. mais tu apprend et tu essai par toi même .. ^^.. d'autre n'essai même pas .. et veulent tout de suite la réponse sans savoir pourquoi sa marche.. ^^.. je pense que l'on ne peux pas évoluer comme sa ...

alors courage par la suite.. ^^.. n'hésite pas a reposer des questions..
Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

cutprod

Merci a toi, je ne l'ai pas pris comme un reproche ;)
Et quand je dis "j'apprends tout seul" c'est une expression car en fait c'est grâce aux tutos et au forum...
Merci a tous ceux qui font vivre la communauté!
Au fais quel étais le terme approprier pour la construction de ma variable text ? (pour ne pas faire 2 * la même erreur)

Tealcoune

sa serai plus concaténation ..
incrémentation c'est plutôt quand tu fais i=0; ... i++; ou la i sera incrémenté de 1..
Aimez la Vie, mais preferez la Mort, car seulement celle-ci vous liberera des tenebres de la Vie.

Go Up