Conversion Chaine de caractère vers Int

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 :

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

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?

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.

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().

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 :

Ligne = buf[1] + 10 * buf[2] + 100 * buf[3];

Cela devrait fonctionné non ?

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

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

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.