Partage
  • Partager sur Facebook
  • Partager sur Twitter

[Arduino] émetteur - récepteur 433 mhz

Sujet résolu
    24 février 2016 à 17:47:38

    Salut à tous, pour tester mon programme j'ai besoin de déconnecter l'Arduino de mon pc tout en ayant accès au moniteur série pour pouvoir lire en temps réel les informations envoyer par mon capteur de vibration et ainsi le régler correctement.

    J'ai fait plusieurs essais avec plusieurs programmes et vidéos trouver sur le net mais rien de concluant, pour l'instant mon récepteur lit bien le message " measurement " et l'affiche à très grande vitesse sur le moniteur série mais aucune valeur venant du détecteur de vibration et indiquer.

    Voici mes codes si quelqu'un peut m'aider je le remercie !

    Émetteur :

    #include <VirtualWire.h>
    
    int vibra = 3;
    
    void setup()
    {
      vw_setup(2000);
      vw_set_tx_pin(12);
      pinMode(vibra, INPUT);
    }
    
    long TP_init()
    {
      delay(10);
      long measurement = pulseIn (vibra, HIGH);
      return measurement;
    }
    
    void loop()
    {
      long measurement = TP_init();
      delay(100);
    
      const char *Message = "measurement";
      vw_send((uint8_t *)Message, strlen(Message));
      vw_wait_tx();
      delay(200);
    }


    Récepteur :

    #include <VirtualWire.h>
    
    uint8_t buf[VW_MAX_MESSAGE_LEN];
    uint8_t buflen = VW_MAX_MESSAGE_LEN;
    
    void setup()
    {
      Serial.begin(9600);
      Serial.println("--------Mesure des Vibrations-------");
      vw_setup(2000);
      vw_set_rx_pin(11);
      vw_rx_start();
    
    }
    
    void loop()
    {
      long measurement;
      if (vw_get_message(buf, &buflen))
        delay(250);
    
      Serial.print("measurment = ");
      Serial.println(measurement);
    
    }
    


    Merci.



    • Partager sur Facebook
    • Partager sur Twitter
      24 février 2016 à 20:20:45

      Oui, c'est plutôt logique puisque tu n'envoies jamais ta variable measurment.

      Tout ce que tu envoies, c'est une chaine de caractères qui contient la lettre m, la lettre e, la lettre a... pour former le mot measurment.

      Ton code devrait plutôt être :

      // Émetteur :
      
      #include <VirtualWire.h>
       
      int vibra = 3;
       
      void setup() {
      	vw_setup(2000);
      	vw_set_tx_pin(12);
      	pinMode(vibra, INPUT);
      }
       
      long TP_init() {
      	delay(10);
      	long measurement = pulseIn (vibra, HIGH);
      	return measurement;
      }
       
      void loop() {
      	long measurement = TP_init();
      	delay(100);
      	vw_send(&measurement, sizeof(measurement));
      	vw_wait_tx();
      	delay(200);
      }
      
      
      
      // Récepteur :
      
      #include <VirtualWire.h>
      
      void setup() {
      	Serial.begin(9600);
      	Serial.println("--------Mesure des Vibrations-------");
      	vw_setup(2000);
      	vw_set_rx_pin(11);
      	vw_rx_start();
      }
       
      void loop() {
      	long measurement;
      	int buflen = sizeof(measurement);
      	if (vw_get_message(&measurement, &buflen)) {
      		Serial.print("measurment = ");
      		Serial.println(measurement);
      	}
      	delay(250);
      }
      



      • Partager sur Facebook
      • Partager sur Twitter
        26 février 2016 à 14:26:37

        Merci à toi d'avoir répondu à mon post. Ton code pour l'émetteur ne compile pas mais pas grave j'ai trouver la solution ! Je post si jamais ça peut aider quelqu'un :

        // Récepteur :
        
        #include <VirtualWire.h>
        
        uint8_t buf[VW_MAX_MESSAGE_LEN];
        uint8_t buflen = VW_MAX_MESSAGE_LEN;
        
        void setup()
        {
          Serial.begin(9600);
          Serial.println("--------Mesure des Vibrations-------");
          vw_setup(2000);
          vw_set_rx_pin(11);
          vw_rx_start();
        
        }
        
        void loop()
        {
          long measurement;
          uint8_t lg=sizeof measurement;
          
          if (vw_get_message((uint8_t *)&measurement, &lg))
          {
            Serial.print("measurment = ");
            Serial.println(measurement);
          }
        }
        
        // Emetteur :
        
        #include <VirtualWire.h>
        
        int vibra = 3;
        
        void setup()
        {
          vw_setup(2000);
          vw_set_tx_pin(12);
          pinMode(vibra, INPUT);
        }
        
        long TP_init()
        {
          delay(10);
          long measurement = pulseIn (vibra, HIGH);
          return measurement;
        }
        
        void loop()
        {
          long measurement = TP_init();
          delay(100);
          vw_send((uint8_t *)&measurement, sizeof measurement);
          vw_wait_tx();
          delay(200);
        }
        
        



        • Partager sur Facebook
        • Partager sur Twitter
          26 février 2016 à 15:43:30

          Ne compile pas, c'est un bien grand mot.

          Je suppose que tu as eu une erreur du genre : cannot convert long* to uint8_t* on line 22.

          Sur la ligne 22, il suffisait juste de rajouter (uint8_t *) devant &measurement de façon à forcer le cast du long* en uint8_t* et ainsi supprimer l'erreur que génère le compilateur ;)

          -
          Edité par lorrio 26 février 2016 à 15:47:48

          • Partager sur Facebook
          • Partager sur Twitter
            26 février 2016 à 16:35:53

            HaHa c'été un piège lol !!! Alors effectivement il me compile bien le code sur la partit émetteur mais pas sur le récepteur, voici le default :

            Arduino : 1.6.7 (Windows 8), Carte : "Arduino/Genuino Uno"
            
            C:\Users\damien\AppData\Local\Temp\arduino_2d6f8febc2877c522219c579e4c1ba5d\sketch_feb26b.ino: In function 'void loop()':
            
            sketch_feb26b:14: error: cannot convert 'long int*' to 'uint8_t* {aka unsigned char*}' for argument '1' to 'uint8_t vw_get_message(uint8_t*, uint8_t*)'
            
                 if (vw_get_message(&measurement, &buflen)) {
            
                                                         ^
            
            exit status 1
            cannot convert 'long int*' to 'uint8_t* {aka unsigned char*}' for argument '1' to 'uint8_t vw_get_message(uint8_t*, uint8_t*)'
            
            


            J'ai essayer la même manip que tu vient de me donner pour l’émetteur mais rien non plus il reste en Default !

            • Partager sur Facebook
            • Partager sur Twitter
              26 février 2016 à 16:50:37

              C'est exactement la même chose, tu dois forcer le cast en rajoutant (uint8_t *) devant &measurement

              Il y a aussi une petite erreur sur le second paramètre : le compilateur annonce que ce doit être un pointeur sur un uint8_t et non sur un int.

              Du coup, tu dois aussi remplacer int buflen par uint8_t buflen.

              Ce qui nous donne le code suivant :

              void loop() {
                  long measurement;
                  uint8_t buflen = sizeof(measurement);
                  if (vw_get_message((uint8_t*)&measurement, &buflen)) {
                      Serial.print("measurment = ");
                      Serial.println(measurement);
                  }
                  delay(250);
              }

              A coder directement comme ça sur l'éditeur d'OpenClassRoom, on fait forcément quelques erreurs mais rien de bien méchant.

              De toute façon, ton code fonctionne maintenant, c'est l'essentiel ;)

              -
              Edité par lorrio 26 février 2016 à 16:52:22

              • Partager sur Facebook
              • Partager sur Twitter
                26 février 2016 à 21:01:20

                Oui c'est sur mais comme ça sa me permet de savoir pourquoi sa marcher pas et de comprendre un peut mieux !!! Encore merci de ton aide et à bientôt sur le forum !!!
                • Partager sur Facebook
                • Partager sur Twitter
                  22 octobre 2018 à 1:56:31

                  //simple Tx on pin D12
                  //Written By : Mahmoudi Med ElAmine
                  // 3:00pm , 13/6/2013
                  //http://www.genotronex.com/
                  //..................................
                  #include <VirtualWire.h>
                  char *controller;
                  void setup() {
                    pinMode(13,OUTPUT);
                  vw_set_ptt_inverted(true); //
                  vw_set_tx_pin(12);
                  vw_setup(4000);// speed of data transfer Kbps
                  }

                  void loop(){
                  controller="AMINE"  ;
                  vw_send((uint8_t *)controller, strlen(controller));
                  vw_wait_tx(); // Wait until the whole message is gone
                  digitalWrite(13,1);
                  delay(1000);
                  digitalWrite(13,0);
                  delay(1000);



                  }

                  //simple Tx on pin D12
                  //Written By : Mahmoudi Med ElAmine
                  // 3:00pm , 13/6/2013
                  //http://www.genotronex.com/
                  //..................................
                  #include <VirtualWire.h>
                  void setup()
                  {
                  Serial.begin(9600);
                  vw_set_ptt_inverted(true); // Required for DR3100
                  vw_set_rx_pin(11);
                  vw_setup(4000); // Bits per sec
                  pinMode(13, OUTPUT);

                  vw_rx_start(); // Start the receiver PLL running
                  }
                  void loop()
                  {
                  uint8_t buf[VW_MAX_MESSAGE_LEN];
                  uint8_t buflen = VW_MAX_MESSAGE_LEN;

                  if (vw_get_message(buf, &buflen)) // Non-blocking
                  {
                  String msg="";
                  int i=0;
                  for(i = 0; i < sizeof(buf); i++){
                   
                      msg = msg+char(buf[i]);
                   
                  }
                   
                  Serial.println(msg);

                  }
                  }


                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 octobre 2018 à 9:07:45

                    Était-ce vraiment nécessaire de déterrer un sujet marqué résolu pour balancer un code prit sur internet ?

                    -
                    Edité par lorrio 22 octobre 2018 à 9:08:03

                    • Partager sur Facebook
                    • Partager sur Twitter

                    [Arduino] émetteur - récepteur 433 mhz

                    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                    • Editeur
                    • Markdown