Emetteur recepteur 433Mhz avec afficheur LCD

Salut, j'ai pour projet de faire une station météo avec 3 autres camarades. Je m'occupe de l'émetteur récepteur 433Mhz qui doit envoyer les données d'un pluviomètre sur une autre carte arduino contenant l'aficheur LCD
Je ne m'occupe que de l'émetteur récepteur, le pluviomètre je ne m'en occupe pas, je traite uniquement ça donnée

Carte arduino 1 -> Les données du pluviomètre reçu et envoyé par l'emetteur 433Mhz
Carte Arduino 2 -> Récepteur et affichage sur le LCD

Schéma branchement Emetteur:

Schéma branchement Récepteur:

Les branchements sont bon, le problèmes c'est que je n'arrive pas à afficher la donnée du pluviomètre qui a été à été envoyé en onde haute fréquence sur l'afficheur une fois qu'il a été réceptionné.

voici mon code de l'émetteur:

#include <VirtualWire.h>

const char *msg = "Arduino"; /* Tableau qui contient notre message */

void setup()
{
  Serial.begin(9600); /* Initialisation du port série */
  Serial.println("Page d'envoit de trame");
  vw_setup(2000); /* initialisation de la librairie VirtualWire à 2000 bauds */ 
   /* plus la vitesse de transmission est lente plus la porté est accentué et inversement */
}
void loop()
{
  Serial.print("Début d'envoi: ");
  vw_send((uint8_t *)msg, strlen(msg)); /* envoie le message */ /* Transmet un message de taille len à partir des données contenues dans le tableau buf */
  /* uint_8 = unsigned char = 1 octet, strlen renvoi le nombre de caractere dans une chaine de caractère char */
  vw_wait_tx(); /* Fonction bloquante qui attend la fin de la transmission en cours avant de continuer le programme */
  Serial.println("Envoyé !"); /* on signal la fin de l'envoi */
  delay(1000); /* on attend 1s pour pas flooder */
}

Lui est bon.

Et voici le code du Récépteur:

#include <LiquidCrystal.h>

#include <VirtualWire.h>
  
  LiquidCrystal lcd(7, 8, 9, 10, 6, 12); /* initialise la librairie en précisant les sorties utilisées */

void setup()
{
  
  /* partie récepteur*/
  
  Serial.begin(9600); /* Initialisation du port série à 9600 bauds */
  Serial.println("Pluviométrie"); /* message de début */
  vw_setup(2000); /* initialisation de la librairie VirtualWire à 2000 bauds */
  vw_rx_start(); /*  active/démarre la partie réception de la librairie VirtualWire */
  
  /* partie lcd */
  
    lcd.begin(16, 2); /*  initialise le nombre de caractères et de lignes  */
    lcd.print("valeur du pluviomètre à afficher"); /* Affiche le message  */
  
}
void loop()
{
 
  /* PARTIE RADIO */
 
  uint8_t buf[VW_MAX_MESSAGE_LEN];
  uint8_t buflen = (VW_MAX_MESSAGE_LEN-1); // /!\ Laisser le -1 !!! En effet : si le buffer a un taille x, on ne pourra écrire que (x-1) char car le dernier char doit être un '\0'
 
 if (vw_wait_rx_max(200))
 {
   Serial.print(buf); 
 }

  buf[buflen] = '\0';
 
 
 
  /* PARTIE DEBUG VERS PC */
 
  Serial.print(buf); // Affichage radio
 
 
 
  /* PARTIE LCD */
 
  lcd.setCursor(0, 0); // Curseur en début de première ligne
  lcd.print(buf); // Affichage radio
 
  lcd.setCursor(0, 1); // Curseur en début de seconde ligne
  lcd.print(millis()/1000); // Affichage timer (nombre de secondes depuis le dernier reset)
 
  
}

Je me suis déjà fait aidé sur un forum mais comme j'aimerais le finir le plus rapidement, je profite aussi de ce forum pour recevoir de l'aide.

Le problème doit venir je pense de ce passage dans le code du récepteur:

 if (vw_wait_rx_max(200)) 
 {
   Serial.print(buf); 
 }

Merci d'avance :slight_smile:

Ps: je répondrais rapidement toute la soirée s'il y a une quelconque réponse

Et ça t'affiche quoi sur le LCD quand tu fais le

lcd.print(buf); // Affichage radio

Avant de vouloir l'afficher sur le LcD affiche ta donnée sur le moniteur série .
Blindes ton programme de message de debug por voir ou tu bloques.

Et renseignes toi sur la librairie virtual wire et ces fonctions.

john_lenfr -> Je ne sais pas, je n'ais pas encore testé, je ne peux le faire qu'en cour quand j'ai les 2 cartes.

derder9161 -> j'arrivais à le faire, par exemple j'en voyais un message depuis le moniteur série de l'émetteur et le moniteur série du récepteur l'affichait. Pareil pour le LCD sur la carte du récepteur, j'arrivais à afficherle mot que je voulais dessus mais je n'arrivais pas a mettre les deux en liaison, que le message que j'envoit sur le moniteur série soit aussi affiché sur le LCD.

Voici le code que j'utilisais:

Le même pour l'émetteur:

#include <VirtualWire.h>

const char *msg = "Arduino"; /* Tableau qui contient notre message */

void setup()
{
  Serial.begin(9600); /* Initialisation du port série */
  Serial.println("Page d'envoit de trame");
  vw_setup(2000); /* initialisation de la librairie VirtualWire à 2000 bauds */ 
   /* plus la vitesse de transmission est lente plus la porté est accentué et inversement */
}
void loop()
{
  Serial.print("Début d'envoi: ");
  vw_send((uint8_t *)msg, strlen(msg)); /* envoie le message */ /* Transmet un message de taille len à partir des données contenues dans le tableau buf */
  /* uint_8 = unsigned char = 1 octet, strlen renvoi le nombre de caractere dans une chaine de caractère char */
  vw_wait_tx(); /* Fonction bloquante qui attend la fin de la transmission en cours avant de continuer le programme */
  Serial.println("Envoyé !"); /* on signal la fin de l'envoi */
  delay(1000); /* on attend 1s pour pas flooder */
}

Celui du récepteur:

#include <LiquidCrystal.h>

#include <VirtualWire.h>

uint8_t buf[VW_MAX_MESSAGE_LEN];  
uint8_t buflen = VW_MAX_MESSAGE_LEN;
  
  LiquidCrystal lcd(7, 8, 9, 10, 6, 12);

void setup()
{
  Serial.begin(9600);
  Serial.println("Tuto VirtualWire");
  vw_setup(2000);
  vw_rx_start();
  
    lcd.begin(16, 2); 
    lcd.print("bonjour Adonis"); 
  
}
void loop()
{
  if (vw_wait_rx_max(200))
  {
    if (vw_get_message(buf, &buflen))
    {
      Serial.print("RX : ");
      for (byte i = 0; i < buflen; i++)
      {
        Serial.print(char(buf[i])); // char permet l'affichage en ASCII
      }
      Serial.println("");
    }
  }
  
    lcd.setCursor(0, 1); 
    lcd.print(millis()/1000); 
  
}

Et j'ai changé parce que comme la personne m'a dit sur l'autre forum, je ne cherche pas à l'afficher sur le moiniteur série mais directement sur le LCD.
Le moniteur série me servait uniquement dans ce cas pour voir si l'enformation circulait entre l'émetteur et le récepteur.

derder9161:
Avant de vouloir l'afficher sur le LcD affiche ta donnée sur le moniteur série .

C'est déjà dans son code:

/* PARTIE DEBUG VERS PC */
  Serial.print(buf); // Affichage radio

donc j'ai supposé que c'était ok mais effectivement si déjà au niveau du moniteur série tu n'a pas la bonne valeur il faut regarder le problème avant l'affichage

Uitzicht:
john_lenfr -> Je ne sais pas, je n'ais pas encore testé, je ne peux le faire qu'en cour quand j'ai les 2 cartes.

derder9161 -> j'arrivais à le faire, par exemple j'en voyais un message depuis le moniteur série de l'émetteur et le moniteur série du récepteur l'affichait. Pareil pour le LCD sur la carte du récepteur, j'arrivais à afficherle mot que je voulais dessus mais je n'arrivais pas a mettre les deux en liaison, que le message que j'envoit sur le moniteur série soit aussi affiché sur le LCD.

Voici le code que j'utilisais:

Le même pour l'émetteur:

#include <VirtualWire.h>

const char msg = "Arduino"; / Tableau qui contient notre message */

void setup()
{
  Serial.begin(9600); /* Initialisation du port série /
  Serial.println("Page d'envoit de trame");
  vw_setup(2000); /
initialisation de la librairie VirtualWire à 2000 bauds /
   /
plus la vitesse de transmission est lente plus la porté est accentué et inversement */
}
void loop()
{
  Serial.print("Début d'envoi: ");
  vw_send((uint8_t )msg, strlen(msg)); / envoie le message / / Transmet un message de taille len à partir des données contenues dans le tableau buf /
  /
uint_8 = unsigned char = 1 octet, strlen renvoi le nombre de caractere dans une chaine de caractère char /
  vw_wait_tx(); /
Fonction bloquante qui attend la fin de la transmission en cours avant de continuer le programme /
  Serial.println("Envoyé !"); /
on signal la fin de l'envoi /
  delay(1000); /
on attend 1s pour pas flooder */
}




Celui du récepteur:



#include <LiquidCrystal.h>

#include <VirtualWire.h>

uint8_t buf[VW_MAX_MESSAGE_LEN]; 
uint8_t buflen = VW_MAX_MESSAGE_LEN;
 
  LiquidCrystal lcd(7, 8, 9, 10, 6, 12);

void setup()
{
  Serial.begin(9600);
  Serial.println("Tuto VirtualWire");
  vw_setup(2000);
  vw_rx_start();
 
    lcd.begin(16, 2);
    lcd.print("bonjour Adonis");
 
}
void loop()
{
  if (vw_wait_rx_max(200))
  {
    if (vw_get_message(buf, &buflen))
    {
      Serial.print("RX : ");
      for (byte i = 0; i < buflen; i++)
      {
        Serial.print(char(buf[i])); // char permet l'affichage en ASCII
      }
      Serial.println("");
    }
  }
 
    lcd.setCursor(0, 1);
    lcd.print(millis()/1000);
 
}




Et j'ai changé parce que comme la personne m'a dit sur l'autre forum, je ne cherche pas à l'afficher sur le moiniteur série mais directement sur le LCD.
Le moniteur série me servait uniquement dans ce cas pour voir si l'enformation circulait entre l'émetteur et le récepteur.

A ba forcément, si tu supprime la partie récupération de la donnée tu va pas afficher grand chose.
Il faut laisser l'aquisition qui passe par :

vw_get_message(buf, &buflen)

Faut surtout qu'on sache ce qui s'affiche.

Justement je me suis pas encore posé la question de la récupération de la donnée du pluviomètre sur la carte arduino de l'émetteur, ça se sera après. Ma priorité c'est de recevoir la donnée sur le recpteur et qu'elle l'affiche directement sur l'afficheur lcd.

pour ce qui va s'afficher c'est des valeurs/chiffres de pluviométrie

J'ai avancé dans mon code du récepteur. J'ai mit:

#include <LiquidCrystal.h>

#include <VirtualWire.h>
  
  LiquidCrystal lcd(7, 8, 9, 10, 6, 12); /* initialise la librairie en précisant les sorties utilisées */

void setup()
{
  
  /* partie récepteur*/
  
  Serial.begin(9600); /* Initialisation du port série à 9600 bauds */
  vw_setup(2000); /* initialisation de la librairie VirtualWire à 2000 bauds */
  vw_rx_start(); /*  active/démarre la partie réception de la librairie VirtualWire */
  
  /* partie lcd */
  
    lcd.begin(16, 2); /*  initialise le nombre de caractères et de lignes  */
  
}

void loop()
{
 
  uint8_t buf[VW_MAX_MESSAGE_LEN];  /* Tableau qui va contenir le message reçu */ /* buf = tableau pour envoyer une série d'octet */
  uint8_t buflen = VW_MAX_MESSAGE_LEN; /* Taille maximum de notre tableau */
   
 
  if (vw_wait_rx_max(200)) /* Si une valeur est reçue dans les 200ms */
 {
   vw_get_message(buf, &buflen); /* Copie le message reçu dans buf avec comme limite à ne pas dépasser len. Len étant la largeur du tableau */
   buf[buflen] = '\0';
   lcd.print(buf); /* affichera le message reçu qui a été copié dans le buf sur le LCD */
 }
 
}

Justement je me suis pas encore posé la question de la récupération de la donnée du pluviomètre sur la carte arduino de l'émetteur, ça se sera après. Ma priorité c'est de recevoir la donnée sur le recpteur et qu'elle l'affiche directement sur l'afficheur lcd.

Perso je n'ai jamais parlé de la partie émission, que de la partie réception.

Attention à ne pas tout mélanger

Mon dernier code que j'ai transformé en rajouter un if dans un if:

#include <LiquidCrystal.h>

#include <VirtualWire.h>
  
  LiquidCrystal lcd(7, 8, 9, 10, 6, 12); /* initialise la librairie en précisant les sorties utilisées */

void setup()
{
  
  /* partie récepteur*/
  
  Serial.begin(9600); /* Initialisation du port série à 9600 bauds */
  vw_setup(2000); /* initialisation de la librairie VirtualWire à 2000 bauds */
  vw_rx_start(); /*  active/démarre la partie réception de la librairie VirtualWire */
  
  /* partie lcd */
  
    lcd.begin(16, 2); /*  initialise le nombre de caractères et de lignes  */
  
}

void loop()
{
  
  uint8_t buf[VW_MAX_MESSAGE_LEN];  /* Tableau qui va contenir le message reçu */ /* buf = tableau pour envoyer une série d'octet */
  uint8_t buflen = VW_MAX_MESSAGE_LEN; /* Taille maximum de notre tableau */
    
  
  if (vw_wait_rx_max(200)) /* Si une valeur est reçue dans les 200ms on rentre dans la boucle*/
 {
   if(vw_get_message(buf, &buflen)) /* Li le dernier message, il copie le message dans buf avec comme limite à ne pas dépasser len. Len étant la largeur du tableau */
   /* Si le message est vérifié il renvoit vrai, si le message est corompu il renvoit alors faux */
   {
     buf[buflen] = '\0'; /* Le 0 permet à la fontion de savoir ou s'arreter, à la fin du message pour ne pas perdre d'espace inutilement*/
     lcd.print(buf); /* affichera le message reçu qui a été copié dans le buf sur le LCD */
   }
 }  
}

john_lenfr -> oui je l'ais mit " vw_get_message(buf, &buflen) ", dans ce dernier code et le code d'avant auquel tu as répondu.

Je suis au lycée en ce moment, je viens de tester mon programme et il me dit dans le débug:

codeRecepteuraideForum.cpp: In function 'void loop()':
codeRecepteuraideForum:34: error: call of overloaded 'print(uint8_t [80])' is ambiguous
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:53: note: candidates are: size_t Print::print(const String&) <near match>
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:54: note:                 size_t Print::print(const char*) <near match>
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:55: note:                 size_t Print::print(char) <near match>
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:56: note:                 size_t Print::print(unsigned char, int) <near match>
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:57: note:                 size_t Print::print(int, int) <near match>
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:58: note:                 size_t Print::print(unsigned int, int) <near match>
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:59: note:                 size_t Print::print(long int, int) <near match>
C:\Program Files (x86)\PROG_SIN\arduino-1.0.1\hardware\arduino\cores\arduino/Print.h:60: note:                 size_t Print::print(long unsigned int, int) <near match>

je ne comprends pas quoi changer

Problème :
lcd.print(buf);

La tu demandes à la fonction print de la classe LCD de t'afficher sur l'écran ton tableau ........
buf étant le nom de ton tableau qui stocke des données de 8bits

Tu peux pas affiché un tableau mais les données qu'il contient !!

Du genre buf[1] ou buf[0]

Ah d'accord je vois. Mais si je met buf[1] je n'aurais que le 2eme caractère du tableau ou buf[0] que le 1er caractère. Je ne vois pas comment faire pour qu'il comprennent qu'il doit afficher tous les caractères.

Une simple boucle for :wink:
Rien de plus simple

J'ai testé comme ça avec la boucle for:

void loop()
{
  
  uint8_t buf[VW_MAX_MESSAGE_LEN];  /* Tableau qui va contenir le message reçu */ /* buf = tableau pour envoyer une série d'octet */
  uint8_t buflen = VW_MAX_MESSAGE_LEN; /* Taille maximum de notre tableau */
  
  
  if (vw_wait_rx_max(200)) /* Si une valeur est reçue dans les 200ms on rentre dans la boucle*/
 {
   if(vw_get_message(buf, &buflen)) /* Li le dernier message, il copie le message dans buf avec comme limite à ne pas dépasser len. Len étant la largeur du tableau */
   /* Si le message est vérifié il renvoit vrai, si le message est corompu il renvoit alors faux */
   {
     for(int x = 0; x < 5; x++)
     {
     buf[buflen] = '\0'; /* Le 0 permet à la fontion de savoir ou s'arreter, à la fin du message pour ne pas perdre d'espace inutilement*/
     lcd.print(buf[x]);
     lcd.print(buf[x]);
     lcd.print(buf[x]); /* affichera le message reçu qui a été copié dans le buf sur le LCD */
     lcd.print(buf[x]);
     lcd.print(buf[x]);
   }
   }
 }  
}

mais ça m'affiche des suite de chiffre de 1, 2, 9 ....

alors j'ai testé avec des lcd.write(buf[x]); comme ça:

     for(int x = 0; x < 5; x++)
     {
     buf[buflen] = '\0'; /* Le 0 permet à la fontion de savoir ou s'arreter, à la fin du message pour ne pas perdre d'espace inutilement*/
     lcd.write(buf[x]);
     lcd.write(buf[x]);
     lcd.write(buf[x]); /* affichera le message reçu qui a été copié dans le buf sur le LCD */
     }

et là ça m'affiche un code bizarre avec "YYYoooppp"et d'autres caractères bizaare. Mon message de base étant juste "Yop" que j'ai envoyé depuis le minteur série de l'émetteur pour tester.

Normal regarde :

buf[buflen] = '\0'; // Je place dans mon tableau le caractère de fin de chaîne

for(int x = 0; x < 5; x++) // Tout le code qu'il y a dans cette boucle sera exécute 5 fois !!!!!
Tu as donc deux lignes en trop dans ton for :slight_smile: c'est pour ça qu'il affiche 3 fois Y, 3 fois O et 3 fois P

Bon je te donne l’algorithme et à toi de trouver comment programmer ça :

Pour une variable i eguale à 0 , Tant que la donnée dans mon tableau n'est pas éguale au caractère de fin de chaîne, alors je parcours mon tableau grâce à i.
-> J'affiche la valeur dans mon tableau sur le LCD grâce à i.

Aller bon courage !!! Tu vas y arrivé !!! tu en es pas loin

Je t'avoues avoir chercher mais je n'ais aps trouvé que ce soi en réfléchissant ou sur le net (tuto arduino site du zéro etc)
mais ce que je sais c'est que normalement le pluviomètre va envoyé 3 chiffres, virgule compris ex "2,3" donc j'ai mit dans mon code et ça marche ^^:

     for(int x = 0; x < 3; x++)
     {
     buf[buflen] = '\0'; /* Le 0 permet à la fontion de savoir ou s'arreter, à la fin du message pour ne pas perdre d'espace inutilement*/
     lcd.write(buf[x]); /* affichera le message reçu qui a été copié dans le buf sur le LCD */
     }
     delay(1000);
     lcd.clear();
   }

Pour l'instant ça marche mais il reste toujours un problème. C'est acquérir la donnée du pluviomètre. Je rappel que le pluviomètre va etre sur la même carte que l'émetteur et son code pour l'instant est:

#include <VirtualWire.h>

const char *msg = "2,3"; /* Tableau/chaine de caractère qui contient notre message */
/*Une chaine de caractère se termine toujours avec un caractère nul pour permettre au fonction de savoir ou se termine la chaine sinon les fonctions coninueraient à lire les octets en mémoire et fairait donc perdre de la place de mémoire */ 

void setup()
{
  Serial.begin(9600); /* Initialisation la vitesse de transmission du port série à 9600 bauds */
  Serial.println("Page d envoit de trame"); /* écriture sur moniteur série pour présenter la page */
  vw_setup(2000); /* initialisation de la librairie VirtualWire à une vitesse de transmission de 2000 bauds */ 
   /* plus la vitesse de transmission est lente plus la portée est accentué et inversement si la vitesse de transmission est rapide, la portée diminue */
}

void loop()
{
  Serial.print("Debut d envoi: "); /* indique le début d'envoit en le marquant sur le moniteur série */
  vw_send((uint8_t *)msg, strlen(msg)); /* envoie le message */ /* Transmet un message de taille len à partir des données contenues dans le tableau buf */
  /* uint_8 = unsigned char = 1 octet, strlen renvoit le nombre de caractere dans une chaine de caractère char */
  vw_wait_tx(); /* Fonction bloquante qui attend la fin de la transmission de la trame en cours avant de continuer le programme */
  Serial.println("Envoye !"); /* on signal la fin de l'envoi */
  delay(1000); /* on attend 1s pour pas flooder */
}

Cette partie va servir à mettre le code du pluviomètre sur lequel travail mon camarades avec celui de l'émetteur récepteur sur lequel je travail. Je ne vois pas comment faire pour mettre les 2 en liasons. Déjà, ce code de l'émetteur sera mélangé avec celui du pluviomètre de mon camarade. J'ai pensé a utiliser une nouvelle variable ou même un tableau pour prendre la valeur et la rajouter dans la partie:

const char *msg = " ";
buf[buflen] = '\0';
for(int x = 0; x < 3; x++)
{
     lcd.write(buf[x]); 
}

Elle est très bien ta boucle for :slight_smile: sauf le caractère de fin de chaîne, ça sert à rien d'écrire '0' 3 fois au même endroit dans le tableau.

Ton camarade devra t'envoyer la chaîne via la librairie virtual wire avec la fonction send et toi la récupérer sur une broche d'IT de ton arduino. Puis tu videras le buffer de réception en l'affichant sur ton LCD.

Il y a beaucoup d’exemples sur internet, tu aurais du y jetter un coup d'oeil bien plus tôt

Vas voir ce lien, c'est exactement ton projet (ce qui est assez surprenant pour un projet de BAC) : [Tutoriel] Arduino et émetteur/récepteur 433MHz (VirtualWire) | Skyduino - Le DIY à la française

Au prochain post tu dois me dire : "ça marche !!!!!!" :stuck_out_tongue: Allez bon courage

Uitzicht:
...
Déjà, ce code de l'émetteur sera mélangé avec celui du pluviomètre de mon camarade. J'ai pensé a utiliser une nouvelle variable ou même un tableau pour prendre la valeur et la rajouter dans la partie:

bonjour
vous avez déjà validé la transmission de valeur (emission/reception) d'un capteur unique ?
si oui , c'est déjà "un bon point"
la suite logique est donc de vous attaquer à un protocole "plus ou moins arbitraire"
et en restant logique , le recepteur doit savoir de qui vient l'information emises
dans votre cas

  • info du pluviometre
  • info de ? T°

il faut donc imperativement savoir faire la differenciation sur une trame emise
-soit vous connaissez déjà le protocole (situation la plus simple)
-soit vous avez à le decouvrir (pas absolument simple et surtout gros consommateur de temps 8) )

  • soit vous generez vos trames UHF avec votre propre protocole (ou protocole ouvert)
    en cout et pour faire une synthese à l'instant :
    Vous avez déjàa validé quoi exactement ?

derder9161 :d) c'est le premier site que j'ai trouvé et ça a été mon code de départ mais je l'ais transformé parce qu'il ne collait pas trop. Déjà ça ne servait à rien d'afficher sur le moniteur série, à part au début pour voir si le message était bien envoyé et reçu.
Je vais tester mais pour ,l'instant je ne peux pas voir le code de mon camarade et tester avant lundi après midi.

Artouste -> Pour l'instant je sais que je peux faire circuler l'information entre mon émetteur et mon récepteur et l'afficher sur le lcd. Il faut que j'arrive a acquérir uniquement la donnée du pluviomètre et non celle de la température.

Si quelqu'un peut m'aider, je n'y arrive toujours pas et je passe l'oral jeudi j'aimerais juste leurs montrer que l'information circule apres je leurs parlerais surtout de l'ancien code et toutes les infos que j'ai collecté sur l'emetteur recepteur, modulation etc.

Le code de l'émetteur:

#include <VirtualWire.h>

const char *msg = "Arduino"; /* Tableau/chaine de caractère qui contient notre message */
/*Une chaine de caractère se termine toujours avec un caractère nul pour permettre au fonction de savoir ou se termine la chaine sinon les fonctions coninueraient à lire les octets en mémoire et fairait donc perdre de la place de mémoire */ 

void setup()
{
  Serial.begin(9600); /* Initialisation la vitesse de transmission du port série à 9600 bauds */
  Serial.println("Page d envoit de trame"); /* écriture sur moniteur série pour présenter la page */
  vw_setup(2000); /* initialisation de la librairie VirtualWire à une vitesse de transmission de 2000 bauds */ 
   /* plus la vitesse de transmission est lente plus la portée est accentué et inversement si la vitesse de transmission est rapide, la portée diminue */
}

void loop()
{
  Serial.print("Debut d envoi: "); /* indique le début d'envoit en le marquant sur le moniteur série */
  vw_send((uint8_t *)msg, strlen(msg)); /* envoie le message */ /* Transmet un message de taille len à partir des données contenues dans le tableau buf */
  /* uint_8 = unsigned char = 1 octet, strlen renvoit le nombre de caractere dans une chaine de caractère char */
  vw_wait_tx(); /* Fonction bloquante qui attend la fin de la transmission de la trame en cours avant de continuer le programme */
  Serial.println("Envoye !"); /* on signal la fin de l'envoi */
  delay(1000); /* on attend 1s pour pas flooder */
}

Le code du pluviomètre:

int compteurfm = 1;                                  // compteur de fronts montants
int nbrbalance = 2;    
int LedPin2 = 3;
int Compteur;
unsigned long compte_temps;                          // variable contenant le temps
float compteurG                                      // Variable contenant les précipitations complète depuis le dernier démarrage.

void setup()
{
  pinMode (3, OUTPUT);
  pinMode (2, INPUT);
  attachInterrupt (0, pluviometre, RISING);          // appel de la fonction pluviomètre
  Serial.begin(9600);                                // configuration de la transmission
}

void loop()
{
  delay(1000);                             // Pause 1s
  Serial.print(0.2*nbrbalance);            // calcul des précipitations et envoie sur serial
  Serial.println ("mm");
  digitalRead(nbrbalance);     
  
 if (nbrbalance > compteurG)              // Test: Pleut-il? 
 {
 digitalWrite(LedPin2, LOW);              // si il pleut, la LED s'éteind
 Serial.println("Arrosage OFF");          // et l'arrosage s'éteind
 }
 else
 {
 digitalWrite(LedPin2,HIGH);             // Si il ne pleut pas, la LED se rallume
 Serial.println("Arrosage ON");          // et l'arrosage se rallume
 }
 Compteur=Compteur+nbrbalance;
 Serial.println(Compteur);
 compteurG=nbrbalance;                  // Remise à zéro de la variable de pluie
}

void pluviometre()                      //Fonction permettant le comptage des variables
{
  
  compteurfm++;
  if (compteurfm >2)
  {
    compteurfm = 0;
  }
  
  if (compteurfm == 2)   
  {
    nbrbalance++;
  }
}

Je représsise que cette partie n'est pas de moi mais de la personne avec qui je fais le projet. C'est ça partie le pluviomètre et là on doit mettre les 2 en relations.