Go Down

Topic: Conversion Chaine de caractère vers Int (Read 3052 times) previous topic - next topic

JJbs01

May 30, 2013, 11:01 am Last Edit: May 30, 2013, 11:10 am by JJbs01 Reason: 1
Bonjour à tous,
Je viens de faire l'acquisition d'une paire de module pour faire de la communication unidirectionnel en 433 MHz
J'ai le code suivant :
Quote
#include <VirtualWire.h> // On inclue la librairie VirtualWire

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 du buffer

void setup()
{
   Serial.begin(9600); // Initialisation du port série pour avoir un retour sur le serial monitor

   vw_setup(2400);   // Initialisation de la librairie VirtualWire à  2400 bauds
   vw_set_rx_pin(2);   // On indique que l'on veut utiliser la broche 2 pour recevoir
   vw_rx_start();      // Activation de la partie réception de la librairie VirtualWire
}

void loop()
{
   if (vw_have_message()) // Si on a un message dans le buffer
   {
         if (vw_get_message(buf, &buflen)) // Alors on récupère ce message qu'il soit entier ou pas
      {
                       int i;
         Serial.print("RX : ");
         for (i = 0; i < buflen; i++) // On affiche tous ce que l'on a
            Serial.print(buf[ i]);
         Serial.println(""); // Une fois qu'il est entier, on peut ajouter un retour à  la ligne.
      }
   }
}

Mon récepteur reçoit bien un signal de ma carte émettrice. Le problème est que cette valeurs est comprise entre 1 et 255 (parfait)
Mais ensuite, je souhaiterai utilisé cette valeur pour faire des actions.
Par exemple : If (N° envoyé ==45){ je fais quelquechose}
If (N° envoyé == 46){ Je fais autre chose}

J'avais pensé a une fonction genre
Ligne = int(buf[ i]);
Mais deviné quoi... ça ne fonctionne pas.

Avez vous une idée ?

fdufnews

Quote
J'avais pensé a une fonction genre
Ligne = int(buf[ i]);
Mais deviné quoi... ça ne fonctionne pas.

Qu'est-ce qui ne fonctionne pas?
Tu ne reçois pas la valeur attendue? ou tu ne la reçois pas sous la forme attendue?

JJbs01

Ben quand j'utilise la fonction
Ligne = int(buf[ i]);
Je souhaite l'afficher pour voir, via une fonction
Serial.println(Ligne); et le résultat est toujours 0, avec n'importe quelle valeur transmise.

La conversion n'est pas effectuée.

mahth

Ton tableau buf est déjà de type int, pourquoi vouloir le caster de nouveau avec (int) ?
Normalement un Serial.print(buf) doit te sortir ta valeur récupérée via vw_get_message().

JJbs01

#4
May 30, 2013, 11:46 am Last Edit: May 30, 2013, 02:54 pm by JJbs01 Reason: 1
Ben j'avais fais le test de taper :

Ligne = Buf[ i];
J'ai une erreur de compilation.

Si on prend la logique, j'ai un chiffre qui varie entre 0 et 255, donc la valeur de i varie entre 0 et 3.
Et je viens de pensé à un truc bête.

si je fais ce code :
Code: [Select]
Ligne = buf[1] + 10 * buf[2] + 100 * buf[3];
Cela devrait fonctionné non ?

mahth

#5
May 30, 2013, 12:03 pm Last Edit: May 30, 2013, 12:15 pm by mahth Reason: 1
La var "Ligne" est de quel type ?

Sinon tu peux tester strtol > http://www.tutorialspoint.com/c_standard_library/c_function_strtol.htm
ret = strtol(buf, ptr, 10);

JJbs01

la Variable Ligne est un entier.
Ce soir, quand je rentre, je vais testé mon option (j'y crois pas trop)

puis je vais tester la tienne ^^

skywodd

Bonjour,

Voir la fonction atoi() pour transformer ton buffer en int.
Sinon regarde sur le forum ya même pas 3 jours j'ai donné un exemple de code pour envoyer une variable directement en binaire.
Des news, des tutos et plein de bonnes choses sur http://skyduino.wordpress.com !

Go Up