VirtualWire : difficulté de mise en oeuvre

Bonsoir

Je m'intéresse à la librairie VirtualWire pour une liaison RF 433 MHz entre deux Arduino.
Après l'avoir correctement déclarer (merci fdufnews et 68tjs) et mis le code suivant :

Extrait de mon code ne concernant que la partie 433 Mhz :

#include "VirtualWire.h"//RF433
uint8_t buf[VW_MAX_MESSAGE_LEN]; // Tableau qui va contenir le message reçu (de taille maximum VW_MAX_MESSAGE_LEN)
uint8_t buflen = VW_MAX_MESSAGE_LEN; // Taille maximum de notre tableau


void RF433RX() {
  if (vw_wait_rx_max(200)) // Si un message est reçu dans les 200ms qui viennent
  {
    if (vw_get_message(buf, &buflen)) // On copie le message, qu'il soit corrompu ou non
    {
      Serial.print("RX : ");
      for (byte i = 0; i < buflen; i++) // Si il n'est pas corrompu on l'affiche via Serial
        //Serial.print(buf[i]);   //Conversion ASCII
      { Serial.print(buf[i] - '0');  //Conversion ASCII des chiffres 0-9
      }
      Serial.println("");
    }
  }
}

void setup() {
  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
  vw_set_rx_pin(11);

}

void loop() {

  RF433RX();

}

L'IDE me renvoit les erreurs suivantes :

C:\Users\Malo\AppData\Local\Temp\ccEzVDkE.ltrans0.ltrans.o: In function `main':

ccEzVDkE.ltrans0.o:(.text.startup+0x180): undefined reference to `vw_setup'

ccEzVDkE.ltrans0.o:(.text.startup+0x184): undefined reference to `vw_rx_start'

ccEzVDkE.ltrans0.o:(.text.startup+0x18a): undefined reference to `vw_set_rx_pin'

ccEzVDkE.ltrans0.o:(.text.startup+0x68a): undefined reference to `vw_wait_rx_max'

ccEzVDkE.ltrans0.o:(.text.startup+0x69a): undefined reference to `vw_get_message'

collect2.exe: error: ld returned 1 exit status

J'ignore totalement la signification ce qui est inscrit ci dessus. Si quelqu'un avait l'amabilité de m'orienter, cela m’avancerais bien.

Merci de votre aide et bonne soirée

Et si tu met

#include <VirtualWire.h>

ca change quelque chose ?

Les messages d'erreurs montrent que des fonctions de la bibliothèques virtualwire ne sont pas reconnues par le compilateur c'est à dire qu'elles n'ont pas étée correctement déclarées

Je dirai deux choses :

  1. le programme "réel" que l'IDE transmet au compilateur ne se limite pas aux fonctions setup() et loop().
    L'IDE construit un vrai programme qui répond aux normes du C/C++ et qui donc contient une fonction main() qui appelle toutes les autres fonctions.
    AMHA c'est mieux de connaître la structure d'un programme C/C++.
    Pour en savoir plus sur les programmes en C/C++ consulter des sites d'initiation au C/C++ comme OpenClassRoom.

  2. Ce que je t'ai dit à propos des < > ou des " " est général et s'applique quand on veut décomposer son programme en plusieurs fichiers.
    Néanmoins vu que le compilateur ne retrouve pas toutes les déclarations dont il a besoin c'est qu'il lui manque encore quelque chose.
    Plutôt que de perdre du temps à trouver quoi le mieux est de rentrer dans le rang et de faire comme tu l'a conseillé fdufnews c'est à dire d'installer la bibliothèque virtualwire là où l'IDE s'attend à la trouver c'est à dire dans le sous-répertoire "librairies" qui se trouve dans le répertoire "arduino" où sont rangé les projets personnels. Et bien sur modifier les " xxx.h" en <xxx.h>

CelticLord:
Et si tu met
#include <VirtualWire.h>
ca change quelque chose ?

Vu qu'il nous a dit qu'il a installé les fichiers de la bibliothèque virtualWire dans le même répertoire que le fichier *.ino celà ne donnera pas de résultat positif.

Bonjour

Merci de votre aide,

Effectivement la librairie marche beaucoup mieux une fois installée au bon endroit.

Merci.

Bonsoir

Un nouveau problème vient avec cette librairie.
Je souhaite utiliser les fonctions vw_get_rx_good() et vw_get_rx_bad() mais dans la librairie que j'ai téléchargée (VirtualWire Library, for very cheap wireless communication) ces fonctions n'existent pas, hors elles sont citées sur des sites internet (https://www.carnetdumaker.net/articles/communiquer-sans-fil-en-433mhz-avec-la-bibliotheque-virtualwire-et-une-carte-arduino-genuino/#les-variables-et-fonctions-de-la-bibliotheque-virtualwire).

En rajoutant les lignes manquantes à la librairies que j'ai installée, l'IDE bug sur toute la librairie...

Pourriez-vous éclairez une nouvelle fois ma lanterne ?

Merci

Malokoxis:
Bonsoir

Un nouveau problème vient avec cette librairie.
Je souhaite utiliser les fonctions vw_get_rx_good() et vw_get_rx_bad() mais dans la librairie que j'ai téléchargée (VirtualWire Library, for very cheap wireless communication) ces fonctions n'existent pas, hors elles sont citées sur des sites internet (https://www.carnetdumaker.net/articles/communiquer-sans-fil-en-433mhz-avec-la-bibliotheque-virtualwire-et-une-carte-arduino-genuino/#les-variables-et-fonctions-de-la-bibliotheque-virtualwire).

En rajoutant les lignes manquantes à la librairies que j'ai installée, l'IDE bug sur toute la librairie...

Pourriez-vous éclairez une nouvelle fois ma lanterne ?

Merci

bonsoir
il y a 2 libs differentes avec le meme nom.

La bibliothèque VirtualWire est disponible sur VirtualWire: VirtualWire library for Arduino and other boards Pour les utilisateurs de cartes Teensy, une variante spécialement conçue pour ces cartes est disponible sur le site de PJRC.

Bonsoir Artouste
merci encore une fois pour ton aide :wink:

Ok, ça induit bien en erreur!
Donc celle qui contient les commandes dont je parle est celle de airspace. J'avais téléchargé la mauvaise.

Merci pour ton aide Artouste.