IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Arduino Discussion :

Problème tester les valeurs transmises en Bluetooth


Sujet :

Arduino

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Problème tester les valeurs transmises en Bluetooth
    Bonjour,

    Voici mon projet :
    Un petit robot qui se pilote en Bluetooth.

    Voici mon problème :
    Aucun problème pendant la compilation. La communication Bluetooth fonctionne bien. Dans le terminal, je peux bien voir les données transmises. Mais par contre impossible de tester ces données. Il ne rentre pas dans les conditions et n’exécute pas les commandes demandées (avancer, reculer...)

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
     
    #include <LiquidCrystal.h>
    #include <SoftwareSerial.h>
     
    //Bluetooth
    SoftwareSerial Bluetooth(6, 7); // (RX, TX) (pin Rx BT, pin Tx BT)
    int Donnees=0;
    // Ecran LCD
    const int rs = 13, en = 12, d4 = 11, d5 = 10, d6 = 9, d7 = 8;
    LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
    // Moteur CC
    const byte MotorA1 = 2;
    const byte MotorA2 = 3;
    const byte MotorB1 = 4;
    const byte MotorB2 = 5;
     
     
    void setup() {
     
      // Ouvre la voie série avec le module BT
      Bluetooth.begin(9600);
     
      // Démarrage sur port série PC
      Serial.begin(9600);
     
      // Clignotement "PRET"
      lcd.clear(); // Effacer l'écran LCD
      delay(1000);
      lcd.write("PRET"); // "PRET" clignotement
      delay(1000);
    }
     
    void loop() {
      // put your main code here, to run repeatedly:
      if (Bluetooth.available()) {
        Donnees = Bluetooth.read();
        Serial.write(Donnees);
        if (Donnees==1){
          Serial.write("AVANCER"); 
          Avancer();
        }
        else if (Donnees==2){
          Reculer();
        }
        else if (Donnees==3){
          Gauche();
        }
        else if (Donnees==4){
          Droite();
        }
        else if (Donnees==5){
          Droite();
        }
      }
    }
     
    void Avancer(){
      lcd.clear();
      lcd.write("AVANCER"); 
      Serial.write("AVANCER"); 
      digitalWrite (MotorA1, LOW);
      digitalWrite (MotorA2, HIGH);
      digitalWrite (MotorB1, LOW);
      digitalWrite (MotorB2, HIGH);
      delay(3000);
    }
     
    void Reculer(){
      lcd.clear();
      lcd.write("RECULER");  
      digitalWrite (MotorA1, HIGH);
      digitalWrite (MotorA2, LOW);
      digitalWrite (MotorB1, HIGH);
      digitalWrite (MotorB2, LOW);
    }
     
    void Arret(){
      lcd.clear();
      lcd.write("ARRET");  
      digitalWrite (MotorA1, LOW);
      digitalWrite (MotorA2, LOW);
      digitalWrite (MotorB1, LOW);
      digitalWrite (MotorB2, LOW);
    }
     
    void Droite(){
      lcd.clear();
      lcd.write("DROITE");  
      digitalWrite (MotorA1, HIGH);
      digitalWrite (MotorA2, LOW);
      digitalWrite (MotorB1, LOW);
      digitalWrite (MotorB2, HIGH);
    }
     
    void Gauche(){
      lcd.clear();
      lcd.write("GAUCHE");  
      digitalWrite (MotorA1, LOW);
      digitalWrite (MotorA2, HIGH);
      digitalWrite (MotorB1, HIGH);
      digitalWrite (MotorB2, LOW);
    }
    Merci pour votre aide

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 647
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 647
    Points : 11 136
    Points
    11 136
    Par défaut
    bonjour

    corrige tes conditions en
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (Donnees=="1"){
          Serial.write("AVANCER"); 
          Avancer();
        }
        else if (Donnees=="2"){
          Reculer();
        }
    etc.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2017
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2017
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Cela ne fonctionne pas.
    Donnees est une variable Integer, normalement on ne met pas de guillemets.
    J'ai essayé avec une variable character + guillemets mais cela ne fonctionne pas non plus.

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur électricien
    Inscrit en
    Septembre 2008
    Messages
    1 267
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur électricien

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 267
    Points : 4 829
    Points
    4 829
    Par défaut
    Mais en attendant Bluetooth.read() renvoie un char et pas un int.
    Avec la cascade de conversion (char-> int, puis int->str dans le serial.write();), difficile de dire exactement sous quel format la donnée est reçue.

    C'est quoi exactement qui apparait dans le moniteur série? Et notamment ce qui est envoyer par Serial.write(Donnees);?

    Delias

  5. #5
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Consultant en Systèmes Embarqués
    Inscrit en
    Avril 2002
    Messages
    3 187
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Consultant en Systèmes Embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 187
    Points : 11 568
    Points
    11 568
    Par défaut
    Salut,
    La méthode Read() de SoftwareSerial semble retourner un caractère donc un char https://www.arduino.cc/en/Reference/SoftwareSerialRead

    Il faut donc modifier les conditions comme suit :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    if (Donnees=='1'){
          Serial.write("AVANCER"); 
          Avancer();
        }
        else if (Donnees=='2'){
          Reculer();
        }
        else if (Donnees=='3'){
          Gauche();
        }
        else if (Donnees=='4'){
          Droite();
        }
        else if (Donnees=='5'){
          Droite();
        }
      }
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

Discussions similaires

  1. Problème récupérer les valeurs dans une Hash
    Par pymouse dans le forum Langage
    Réponses: 4
    Dernier message: 12/07/2007, 17h11
  2. [VBA-E] Tester les valeurs d'un classeur
    Par mwa33 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/06/2007, 14h02
  3. Tester les valeurs de retour de ADsOpenObject
    Par Menontona dans le forum Windows
    Réponses: 1
    Dernier message: 31/05/2006, 16h17
  4. Problème avec les valeurs par défaut
    Par Steph Ace dans le forum Requêtes
    Réponses: 3
    Dernier message: 12/12/2005, 09h55
  5. Tester les valeur d'une liste déroulante
    Par st0nky dans le forum Langage
    Réponses: 1
    Dernier message: 04/12/2005, 14h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo