Pages: [1]   Go Down
Author Topic: [Résolu] Convertion de Variable  (Read 528 times)
0 Members and 1 Guest are viewing this topic.
Sud-Ouest
Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley-cry
« Last Edit: February 19, 2012, 08:38:23 am by cutprod » Logged

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

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:
                            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);
                 }
Logged

Sud-Ouest
Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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:
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  smiley-sad
Logged

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 .

Logged

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

Sud-Ouest
Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Sud-Ouest
Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Problème résolu !
A force ...
il faut incrémenter la variable text avec le contenu de buf =>
Code:
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  smiley
« Last Edit: February 19, 2012, 08:38:04 am by cutprod » Logged

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Sud-Ouest
Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...)
« Last Edit: February 19, 2012, 08:52:03 am by cutprod » Logged

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Sud-Ouest
Offline Offline
Full Member
***
Karma: 0
Posts: 117
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci a toi, je ne l'ai pas pris comme un reproche smiley-wink
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)
Logged

Chulak
Offline Offline
Full Member
***
Karma: 2
Posts: 234
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

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

Pages: [1]   Go Up
Jump to: