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

C++ Discussion :

besoin d'aide pour projet arduino


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Lycéen
    Inscrit en
    Avril 2017
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Lycéen

    Informations forums :
    Inscription : Avril 2017
    Messages : 1
    Par défaut besoin d'aide pour projet arduino
    Bonjour,
    Je suis un lycéen en Terminale SSI et j'ai un projet à faire pour la fin de l'année, sauf que j'ai un gros soucis. De plus, je trouve la programmation intéressante, mais je n'y connais pas grand chose...
    J'ai donc un programme qui permet de faire avancer "une voiture" avec deux moteurs qui marchent indépendamment l'un de l'autre. Lors de l'essai du programme seul, sur un prototype, j'ai réussi à faire marcher les moteurs à l'aide de boutons pour les faire tourner à droite, à gauche, puis avancer. Ensuite, j'ai voulu rajouter un programme que j'ai fait à part avec des capteurs ultrasons (il y en a 2 au total) qui permettent d'arrêter le moteur lorsqu'il y a un obstacle devant. En assemblant les deux programmes, plus rien ne marche. Je voudrai savoir si quelqu'un pourrait m'apporter son aide pour ça.
    Je voudrais tout d'abord savoir si je peux résoudre le problème là, sachant que pour l'instant je teste le programme avec des boutons, et qu'au final, les moteurs marcheront à l'aider de 2 capteurs de luminosité dirigés vers le sol sur une bande de couleur noire (les moteurs avanceront quand les capteurs détecteront le peu de lumière renvoyée par la bande noire).
    Merci de votre aide d'avance et je vous laisse mon programme ci-dessous :
    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
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
     
    // La LED est câblée sur la patte 2.
    // Le bouton est câblé sur la patte 3
    // give it a name:
     
    /*#define VITESSE 340
    #include <Wire.h>
     
     
    const int USTrig = 5; // Déclencheur sur la broche 8
    const int USEcho = 4; // Réception sur la broche 9
    const int PinLed = 8; // Branchement de la Led
    const int PinBuzzer = 3;  // Branchement du buzzer 
    const double distanceMax = 0.3; //Distance maximum avant alerte (en m)*/
     
    float distance; //Variable distance utilisée plus bas 
     
    int DirMotA = 12;
    int FreinMotA = 9;
    int PWMMotA = 3;
     
    int DirMotB = 13;
    int FreinMotB = 8;
    int PWMMotB = 11;
     
    int BoutonBP7 = 7;
    int BoutonBP2 = 2;
    int BoutonBP6 = 6;
     
    boolean Ancien_Appui7 = true;
    boolean Nouvel_Appui7 = false;
    boolean Etat_mot = false;
     
    boolean Ancien_Appui2 = true;
    boolean Nouvel_Appui2 = false; 
    boolean Tournedroite = false;
     
    boolean Ancien_Appui6 = true;
    boolean Nouvel_Appui6 = false;
    boolean Tournegauche = false;
     
    // Le sous programme setup s'éxécute à la mise sous tension ou après un Reset:
    void setup() {                
      // initialise les entrées digitales en entrées et sorties.
      pinMode(BoutonBP7, INPUT);
      pinMode(BoutonBP2, INPUT);
      pinMode(BoutonBP6, INPUT); 
      pinMode(DirMotA, OUTPUT);
      pinMode(FreinMotA, OUTPUT);
      pinMode(PWMMotA , OUTPUT);
      pinMode(DirMotB , OUTPUT);
      pinMode(FreinMotB , OUTPUT);
      pinMode(PWMMotB , OUTPUT);
     
     /* pinMode(USTrig, OUTPUT); //On définit le type de sortie de chaque cable
      pinMode(USEcho, INPUT);
      pinMode(PinLed, OUTPUT);
      pinMode(PinBuzzer, OUTPUT);
      digitalWrite(USTrig, LOW);
      Serial.begin(9600);
      digitalWrite(13,LOW);
      digitalWrite(8,LOW);
      analogWrite(11,55);
      digitalWrite(12,LOW);
      digitalWrite(9,LOW);
      analogWrite(3,55); */
    }
     
    // Le sous programme loop tourne en boucle:
    void loop()/* {
       
      // put your main code here, to run repeatedly:
       float distanceMesuree = mesureDistance();
                // 6. On affiche la distance
          if (distanceMesuree>0)
          {
           Serial.print("Distance = ");
           Serial.print(distanceMesuree); //affiche la distance mesurée (en mètres) sur le moniteur
           Serial.println("m");
          
          } 
          else
          {
            Serial.println("Mesure echouee");
           
          }
     
         if (distanceMesuree < distanceMax) //si la distance est inférieure à la distance définie
       {
       
        digitalWrite(PinLed,HIGH); //On allume la led
        digitalWrite(PinBuzzer,HIGH); //Le buzzer sonne
        delay(10);
        digitalWrite(PinBuzzer,LOW);
        digitalWrite(13,LOW);
        digitalWrite(8,LOW);
        analogWrite(11,0);// On éteint le moteur
        delay(200);
        digitalWrite(12,LOW);
        digitalWrite(9,LOW);
        analogWrite(3,0);// On éteint le moteur
        delay(200);
        }
       else
       {
        digitalWrite(PinLed, LOW);
        digitalWrite(13,HIGH);
        digitalWrite(8,LOW);
        analogWrite(11, 55);//On allume le moteur
        digitalWrite(12,LOW);
        digitalWrite(9,LOW);
        analogWrite(3 , 55);//On allume le moteur
        delay(200);
       }
     
     // petite pause
       delay(90);
     
     
    }
     
    float mesureDistance(){
    // 1. Un état haut de 10 microsecondes est mis sur la broche "Trig"
       digitalWrite(USTrig, HIGH);
       delayMicroseconds(10); //on attend 10 µs
       // 2. On remet à l’état bas la broche Trig
       digitalWrite(USTrig, LOW);
     
       // 3. On lit la durée d’état haut sur la broche "Echo"
       unsigned long duree = pulseIn(USEcho, HIGH);
     
       if(duree > 30000)
       {
          // si la durée est supérieure à 30ms, l'onde est perdue
          Serial.println("Onde perdue, mesure échouée !");
          return 0;
       }
       else
       {
          // 4. On divise cette durée par deux pour n'avoir qu'un trajet
          duree = duree/2;
          // 5. On calcule la distance avec la formule d=v*t
          float temps = duree/1000000.0; //on met en secondes
          distance = temps*VITESSE; //on multiplie par la vitesse, d=t*v
          return distance;
        }
       } */
    {
      Nouvel_Appui7 = digitalRead(BoutonBP7);  // teste l'état du bouton BP7
      if (Nouvel_Appui7==true && Ancien_Appui7==false) 
      {
          if (Etat_mot==false) // si la variable Etat_mot est faux
          {
            Etat_mot = true; // alors on l'a met à vrai
            digitalWrite( DirMotA , HIGH );
            digitalWrite( FreinMotA , LOW );
            analogWrite( PWMMotA , 55);
            digitalWrite( DirMotB , LOW );
            digitalWrite( FreinMotB , LOW );
            analogWrite( PWMMotB , 55); // on allume le mot
          }
          else // sinon on fait l'opposé
          {
            Etat_mot = false;
            digitalWrite( DirMotA , HIGH );
            digitalWrite( FreinMotA , LOW );
            analogWrite( PWMMotA , 0);
            digitalWrite( DirMotB , LOW );
            digitalWrite( FreinMotB , LOW );
            analogWrite( PWMMotB , 0);
          } 
      }
      Nouvel_Appui2 = digitalRead(BoutonBP2);  // teste l'état du bouton BP2
      if (Nouvel_Appui2==true && Ancien_Appui2==false)
        {    
         if (Tournedroite==false)
          { 
            Tournedroite == true;
            digitalWrite( DirMotA , HIGH );
            digitalWrite( FreinMotA , LOW );
            analogWrite( PWMMotA , 55);
            digitalWrite( DirMotB , LOW );
            digitalWrite( FreinMotB , LOW );
            analogWrite( PWMMotB , 0);
          }
          else
          {
            Etat_mot = true; // alors on la met à vrai
            digitalWrite( DirMotA , HIGH );
            digitalWrite( FreinMotA , LOW );
            analogWrite( PWMMotA , 55);
            digitalWrite( DirMotB , LOW );
            digitalWrite( FreinMotB , LOW );
            analogWrite( PWMMotB , 55);
          }
        }
        Nouvel_Appui6 = digitalRead(BoutonBP6);   // teste l'état du bouton BP6
      if (Nouvel_Appui6==true && Ancien_Appui6==false)
      {
        if (Tournegauche==false)
          { 
            Tournegauche == true;
            digitalWrite( DirMotA , HIGH );
            digitalWrite( FreinMotA , LOW );
            analogWrite( PWMMotA , 0);
            digitalWrite( DirMotB , LOW );
            digitalWrite( FreinMotB , LOW );
            analogWrite( PWMMotB , 55);
          }
          else 
          {
            Etat_mot = true; // alors on la met à vrai
            digitalWrite( DirMotA , HIGH );
            digitalWrite( FreinMotA , LOW );
            analogWrite( PWMMotA , 55);
            digitalWrite( DirMotB , LOW );
            digitalWrite( FreinMotB , LOW );
            analogWrite( PWMMotB , 55);
          }
          delay(200); // tempo qui permet de se prémunir des rebonds
      }  
     
      Ancien_Appui7 = Nouvel_Appui7;
      Ancien_Appui2 = Nouvel_Appui2;
      Ancien_Appui6 = Nouvel_Appui6; // sert à déterminer les nouveaux états des boutons BP7, BP2, BP6
    }

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Que signifie "plus rien ne marche"?

    Tu te doutes bien que oui, c'est faisable.

    Pourquoi autant de variables globales?
    Pourquoi ne pas faire de structures, ni de fonctions?

    Pour moi, le programme devrait plus ou moins ressembler à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tant qu'on n'arrete pas:
        si capteur 1 détecte du noir, moteur 1 en marche arrière, sinon, moteur 1 en marche avant
        si capteur 2 détecte du noir, moteur 2 en marche arrière, sinon, moteur 2 en marche avant
    Donnes-toi le vocabulaire pour le faire, c'est à dire, des fonctions "capteur <N> voit un obstacle", "moteur <N> dans tel sens de rotation"

Discussions similaires

  1. Besoin d'aide pour un projet graphique de concentration
    Par chacha2007 dans le forum LabVIEW
    Réponses: 0
    Dernier message: 21/11/2007, 20h18
  2. besoin d'aide pour un projet en C
    Par chahine59 dans le forum C
    Réponses: 8
    Dernier message: 05/01/2007, 23h23
  3. Besoin d'aide pour un projet en vb6
    Par Tyrael62 dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 14/01/2006, 05h25
  4. Besoin d'aide pour un projet
    Par ZiMo dans le forum Linux
    Réponses: 9
    Dernier message: 24/10/2005, 00h28
  5. Besoin d'aide pour un projet de jeu en ligne
    Par FLEO dans le forum Projets
    Réponses: 1
    Dernier message: 21/10/2005, 08h55

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