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 :

Tank télécommander par Bluetooth - Android


Sujet :

Arduino

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Particulier
    Inscrit en
    Juillet 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 23
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Particulier

    Informations forums :
    Inscription : Juillet 2019
    Messages : 1
    Par défaut Tank télécommander par Bluetooth - Android
    Bonjour,
    Alors, qu'est-ce qui ne va pas? J'essaie de créer un petit Tank(car) avec mon smartphone Android (l'application est Bluetooth Electronics de keuwlsoft sur le Play Store).

    J'utilise un Arduino UNO, un bouclier de moteur de DK Electronics et un bouclier Bluettooth de seeedstudio. (Et vis Shield de seeedstudio aussi).

    En pièce jointe, vous avez un écran de l'application et sur chaque bouton, la valeur envoyée. Pour 1 j'obtiens 49, 2 -> 50, 3 -> 51, 4 -> 52, 5 -> 53, 6 -> 53. Le bouton 1 doit déclencher le sens avant, le 2 doit déclencher le bon sens, le 3 doit déclencher la direction arrière, le 4 doit déclencher la direction gauche, le 5 doit déclencher l'arrêt, le 6 doit déclencher la musique de Tetris.

    Donc, la musique fonctionne, le problème est que j'entends un petit déclencheur du moteur quand je demande la direction souhaitée, mais les moteurs ne fonctionnent pas. Par contre, si je teste les seuls moteurs sans déclencher le bluetooth, ils fonctionnent parfaitement. Je mets le code arduino en pièces jointes.

    Sur les photos de mon robot, vous voyez un capteur à ultrasons, mais je n'ai pas encore intégré le code correspondant dans ce programme que vous avez.

    Merci de m'aider les amis!


    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
     
    #include <AFMotor.h>
    #include <SoftwareSerial.h>
     
    #define RxD 7
    #define TxD 6
     
    AF_DCMotor motor3(3);
    AF_DCMotor motor4(4);
     
    int a;
    SoftwareSerial blueToothSerial(RxD, TxD);
     
    #include "pitches.h"
     
    int melody[] = {
      NOTE_E5, NOTE_E3, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_C5, 
      NOTE_B4, NOTE_A4, NOTE_A3, NOTE_A4, NOTE_C5, NOTE_E5, NOTE_A3, NOTE_D5,
      NOTE_C5, NOTE_B4, NOTE_E4, NOTE_G4, NOTE_C5, NOTE_D5, NOTE_E3, NOTE_E5,
      NOTE_E3, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_A3, NOTE_A4, NOTE_A3, NOTE_B2, 
      NOTE_C3, NOTE_D3, NOTE_D5, NOTE_F5, NOTE_A5, NOTE_C5, NOTE_C5, NOTE_G5, 
      NOTE_F5, NOTE_E5, NOTE_C3, 0, NOTE_C5, NOTE_E5, NOTE_A4, NOTE_G4, NOTE_D5,
      NOTE_C5, NOTE_B4, NOTE_E4, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_G4, NOTE_E5, 
      NOTE_G4, NOTE_C5, NOTE_E4, NOTE_A4, NOTE_E3, NOTE_A4, 0,};
     
    int noteDurations[] = {
      8,8,8,8,8,16,16,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
      8,4,8,8,16,16,8,8,8,8,8,8,8,16,16,8,8,8,8,8,8,8,8,8,8,8,8,8,8,4,4,8,
      8,8,8,8,16,16,};
     
    void setup() {
      Serial.begin(9600);
      pinMode(RxD, INPUT);
      pinMode(TxD, OUTPUT);
      setupBlueToothConnection();
      motor3.setSpeed(255);
      motor4.setSpeed(255);
    }
     
    void loop() {
      while (1) {
        //Serial.println(a);
        if (blueToothSerial.available()) {
          a = blueToothSerial.read();
          Serial.println(a);
          if (a==49) {
            motor3.setSpeed(255);
            motor4.setSpeed(255);
            motor3.run(FORWARD);
            motor4.run(FORWARD);
          }
     
          if (a==51) {
            motor3.setSpeed(255);
            motor4.setSpeed(255);
            motor3.run(BACKWARD);
            motor4.run(BACKWARD);
          }
     
          if (a==50) {
            motor3.setSpeed(255);
            motor4.setSpeed(255);
            motor3.run(BACKWARD);
            motor4.run(FORWARD);
          }
     
          if (a==52) {
            motor3.setSpeed(255);
            motor4.setSpeed(255);
            motor3.run(FORWARD);
            motor4.run(BACKWARD);
          }
     
          if (a==53) {
            motor3.setSpeed(255);
            motor4.setSpeed(255);
            motor3.run(RELEASE);
            motor4.run(RELEASE);
          }
     
          if (a==54) {
            for (int thisNote = 0; thisNote < sizeof(melody) / sizeof(melody[0]); thisNote++){
     
            int noteDuration = 1000/noteDurations[thisNote];
            tone(11, melody[thisNote],noteDuration);
     
            int pauseBetweenNotes = noteDuration * 1.30;
            delay(pauseBetweenNotes);
     
            noTone(11);
            }
          digitalWrite(11,LOW);
          }
        }
      break;
      }
    }
     
    void setupBlueToothConnection() {
      blueToothSerial.begin(9600);
    }
    Images attachées Images attachées      

  2. #2
    Expert confirmé

    Homme Profil pro
    mad scientist :)
    Inscrit en
    Septembre 2019
    Messages
    2 921
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : mad scientist :)

    Informations forums :
    Inscription : Septembre 2019
    Messages : 2 921
    Par défaut
    Vous avez sans doute des conflits sur les broches utilisées:

    Il faudrait voir la doc de votre shield moteur, mais si je me souviens bien, tel que le code est écrit (avec les moteurs sur les ports 3 et 4) ça va monopoliser les pins 4, 5, 6, 7, 8 et 12 et vous avez essayé d'attacher votre composant bluetooth en SoftwareSerial sur les pin 6 et 7 --> d'où conflit.

    il faudrait mettre votre composant bluetooth ailleurs sur 2 autres pins.

    votre code pourrait aussi être un peu restructuré pour utiliser le code des caractères au lieu de leur valeur ASCII (par exemple '1' au lieu de 49) et l'instruction switch/case permet d'éviter les cascades de if (et vous pourriez utiliser des if/else sinon) et il est bon de nommer les broches plutôt que d'utiliser des nombres dans les appels.

    ça pourrait ressembler à cela (je n'ai pas changé les pins)
    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
    // Les moteurs. Le shield Moteur monopolise les pin 4, 5, 6, 7, 8 et 12 (<== A VERIFER DANS LA DOC)
    #include <AFMotor.h>
    const uint8_t portMoteurD = 3;
    const uint8_t portMoteurG = 4;
    AF_DCMotor moteurDroite(portMoteurD); // PWM par défaut à 1KHz
    AF_DCMotor moteurGauche(portMoteurG); // PWM par défaut à 1KHz
     
    // Le bluetooth
    #include <SoftwareSerial.h>
    const uint8_t RxD = 7; // <<== ERREUR A METTRE AILLEURS
    const uint8_t TxD = 6; // <<== EREUR A METTRE AILLEURS
    SoftwareSerial blueToothSerial(RxD, TxD);
     
     
    // La musique
    #include "pitches.h"
    const uint8_t brocheHP = 11;
     
    const uint16_t melody[] = {
      NOTE_E5, NOTE_E3, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_E5, NOTE_D5, NOTE_C5,
      NOTE_B4, NOTE_A4, NOTE_A3, NOTE_A4, NOTE_C5, NOTE_E5, NOTE_A3, NOTE_D5,
      NOTE_C5, NOTE_B4, NOTE_E4, NOTE_G4, NOTE_C5, NOTE_D5, NOTE_E3, NOTE_E5,
      NOTE_E3, NOTE_C5, NOTE_A3, NOTE_A4, NOTE_A3, NOTE_A4, NOTE_A3, NOTE_B2,
      NOTE_C3, NOTE_D3, NOTE_D5, NOTE_F5, NOTE_A5, NOTE_C5, NOTE_C5, NOTE_G5,
      NOTE_F5, NOTE_E5, NOTE_C3, 0, NOTE_C5, NOTE_E5, NOTE_A4, NOTE_G4, NOTE_D5,
      NOTE_C5, NOTE_B4, NOTE_E4, NOTE_B4, NOTE_C5, NOTE_D5, NOTE_G4, NOTE_E5,
      NOTE_G4, NOTE_C5, NOTE_E4, NOTE_A4, NOTE_E3, NOTE_A4, 0,
    };
     
    const uint8_t noteDurations[] = { // sur un seul octets car les durées sont <255. si besoin de longues durées utiliser uint16_t ou uint32_t
      8, 8, 8, 8, 8, 16, 16, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
      8, 4, 8, 8, 16, 16, 8, 8, 8, 8, 8, 8, 8, 16, 16, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 4, 4, 8,
      8, 8, 8, 8, 16, 16,
    };
     
    void setup() {
      Serial.begin(9600);
      pinMode(brocheHP, OUTPUT);
      blueToothSerial.begin(9600);
      moteurDroite.setSpeed(255);
      moteurDroite.run(RELEASE);
      moteurGauche.setSpeed(255);
      moteurGauche.run(RELEASE);
      noTone(brocheHP); // pour s'assurer qu'il n'y a pas de son pour le momment
    }
     
    void loop() {
     
      switch (blueToothSerial.read()) {
     
        case '1': // tout droit
          moteurDroite.run(FORWARD);
          moteurGauche.run(FORWARD);
          break;
     
        case '2': // on tourne à droite
          moteurDroite.run(BACKWARD);
          moteurGauche.run(FORWARD);
          break;
     
        case '3': // marche arrière
          moteurDroite.run(BACKWARD);
          moteurGauche.run(BACKWARD);
          break;
     
        case '4': // on tourne à gauche
          moteurDroite.run(FORWARD);
          moteurGauche.run(BACKWARD);
          break;
     
        case '5': // on s'arrête
          moteurDroite.run(RELEASE);
          moteurGauche.run(RELEASE);
          break;
     
        case '6': // musique (CODE BLOQUANT, ON NE PEUT PAS PILOTER LE VÉHICULE PENDANT QUE LA MUSIQUE JOUE)
          for (size_t thisNote = 0; thisNote < sizeof(melody) / sizeof(melody[0]); thisNote++) {
            int noteDuration = 1000 / noteDurations[thisNote];
            tone(brocheHP, melody[thisNote], noteDuration);
            delay(noteDuration * 1.30);
          }
          break;
     
        case -1: // rien à lire en entrée
        default: // autres valeurs reçues
          break;
      }
    }


    - Notez aussi que la fonction tone() utilise un timer qui va influencer le PWM sur les broches 3 et 11 de votre UNO.

Discussions similaires

  1. Envoyer des télécommandes par bluetooth
    Par baloub dans le forum VB.NET
    Réponses: 6
    Dernier message: 03/09/2018, 22h41
  2. Réponses: 0
    Dernier message: 05/06/2018, 09h02
  3. comment se connecter par bluetooth
    Par 10aless dans le forum Java ME
    Réponses: 2
    Dernier message: 16/02/2007, 11h31
  4. connecter deux téléphones par bluetooth
    Par chabfive dans le forum Développement Mobile en Java
    Réponses: 2
    Dernier message: 26/12/2006, 17h22
  5. transfert programme par bluetooth vers samsung SGH-E530
    Par impskil dans le forum Développement Mobile en Java
    Réponses: 3
    Dernier message: 26/02/2006, 22h32

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