Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème avec arduino et module Bluetooth HC-05

Sujet résolu
    26 mars 2019 à 16:28:10

    Bonjour alors voila j'ai un souci j'envoie 3 octets à partir d'une application app inventor a mon arduino qui détècte que les octets ont étaient envoyer mais le serial.read ne reçois que -1 je ne comprend vraiment pas. pour information j'ai coder mon programme en série c'est bien sur fais exprès merci d'avance voila le programme :

    #define rxPin 0
    #define txPin 1
    int incomingByte = 0;
    int LedR = 0;
    int LedV = 0;
    int LedB = 0;
    const int ledRouge=3; // Constante pour la broche 3
    const int ledVert=5; // Constante pour la broche 5
    const int ledBleu=6; // Constante pour la broche 6
    void setup() {

    pinMode (ledVert,OUTPUT);
    pinMode (ledRouge,OUTPUT);
    pinMode (ledBleu,OUTPUT);
    pinMode(rxPin, INPUT);
    pinMode(txPin, OUTPUT);
    Serial.begin (9600);


    }

    void loop(){

    if ( Serial.available() > 0)

    { // si données disponibles sur le port série
      Serial.println(Serial.available());
                    // lit l'octet entrant
                    Serial.println("oui");
                   incomingByte = Serial.read();
                   incomingByte = Serial.read();
                   incomingByte = Serial.read();
                  
                    // renvoie l'octet reçu
                   
                    Serial.print("Octet recu: ");
                    Serial.println(incomingByte, DEC);           
                    LedB = incomingByte;            
                    LedV = incomingByte;
                    LedR = incomingByte;
                     
     
                   
                    Serial.println(LedB);
                    Serial.println(LedV);
                    Serial.println(LedR);
                                               
                    }            
                     
                    analogWrite(ledBleu,  LedB);
                    analogWrite(ledVert,  LedV);
                    analogWrite(ledRouge,  LedR);
                   
    }



                   
                   

    • Partager sur Facebook
    • Partager sur Twitter
      26 mars 2019 à 18:43:21

      Bonjour,

      Il y a un bouton </> pour poster et formater correctement le code sur le forum...

      L'arduino tourne à une fréquence bien plus élevée que la vitesse du port série. La boucle/fonction loop à le temps de s'exécuter plusieurs fois entre chaque octet reçu, donc quand tu envoies 3 octets à la suite, la fonction est exécutée 3 fois et lit séparément chaque octet. 

      D'ailleurs dans ta sortie, tu as bien dû voir que Serial.available() renvoyait 1 au lieu de 3. La fonction read n'attend pas si aucun octet n'est présent dans le buffer du port série.

      Pour éviter que les octets soient lues séparément, tu dois attendre qu'ils soient tous reçus avant d'y toucher:

      if ( Serial.available() >= 3) 
      { 

      De plus, si tu lis 3 octets dans la même variable incomingByte, sans l'écrire ailleurs entre temps, la valeur est écrasée, tu ne peux pas relire 3 valeurs différentes. Comme tu as déjà 3 variables, tu peux les affecter directement:

      LedB = Serial.read();
      LedV = Serial.read();
      LedR = Serial.read();
      // Couleur reçue 
      Serial.print("Couleur reçue: (");
      Serial.print(LedB, DEC);
      Serial.print(", ");
      Serial.print(LedV, DEC);
      Serial.print(", ");
      Serial.print(LedR, DEC);
      Serial.println(")");
      

      Ca reste une méthode peu fiable, si par exemple l'arduino ne reçoit pas le 1er octet, parce qu'il n'était pas allumé au moment de l'envoi, ou que la connexion bluetooth n'est pas fiable, il va y avoir un décalable au niveau des composantes de couleurs, et/ou le programme va être bloqué avec Serial.available() à 2, jusqu'à ce que les 3 octets suivants arrivent, et ils seront lus de façon décalée (V et R de la couleur précédente avec le B de la couleur dans les variables LedB, LedV et LedR dans cet ordre).

      PS: Tu n'as pas besoin d'appeler pinMode dans setup() pour les broches 0 et 1, Serial.begin() le fait pour toi.

      • Partager sur Facebook
      • Partager sur Twitter

      Problème avec arduino et module Bluetooth HC-05

      × 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