Partage
  • Partager sur Facebook
  • Partager sur Twitter

Erreur Arduino Mega

Système de déménageur suiveur

    24 avril 2017 à 18:38:35

    Bonjour à tous,

    Je travaille avec mon groupe de PPE sur un système de déménagement suiveur (voir plus bas), et je tombe sur une grosse bourde. Lors que je compile (0 erreur détectée) sur une arduino Mega avec un shield Grove, tout se passe bien. Cependant, une fois lancé, l'arduino ne réagit pas. Les LEDs des deux cartes s'allument mais le système ne fonctionne pas. En affichant le moniteur série non plus, rien ne s'affiche.

    Le système est assez simple : 5 capteurs (distances cm1 à 5) captent la position de l'utilisateur. Celui-ci doit se située à entre 20 et 50 cm du chariot de déménagement. Six autres capteurs (distances cm6 à 11) captent la distance avec les murs latéraux (soucis de sécurité). En fonction de la position de l'utilisateur et si la distance avec les murs ou obstacles est suffisante (10 cm), le chariot avance et tourne (2 moteurs gérés en PWM pour réguler la rotation).

    Pour le moment, sans s'occuper des moteurs et en se concentrant sur les capteurs à ultrasons (le // désactive la fonction dans le loop), rien ne s'affiche. Je demande donc votre aide :-°

    Voici le code, réparti en 6 fichiers :

    ProgrammeSuiveur.ino (fichier principal) :

    /*
    ORGANISATION DU CODE
    
    Fichier variables :
    - Commence par les ports assignés aux capteurs
    - Contient toutes les variables globales
    
    Fichier Setup :
    - Fonctions d'initialisation void setup()
    - Rapport aux ports et à la fréquence d'horloge
    
    Fichier Programme_Loop :
    - Boucle principale void loop()
    - Intègre les sous programmes en faisant appel au header.h*
    
    Fichier variables :
    - Contient la définition des sous programmes codés dans SousProgrammes
    
    Fichier SousProgrammes :
    - Contient tous les sous programmes relatifs à la gestion des capteurs, de la sécurité et de la gestion des moteurs
    
    
    NOTES SUR LES CAPTEURS / MOTEURS :
    
    ULTRASON :
    
    - CM1 : distance captée par le capteur à ultrason le plus à droite
    - CM2 : distance captée par le capteur à ultrason central-droit
    - CM3 : distance captée par le capteur à ultrason central
    - CM4 : distance captée par le capteur à ultrason central-gauche
    - CM5 : distance captée par le capteur à ultrason le plus à gauche
    
    - Ports sig : ports de réception du signal ultrasonique
    
    MOTEURS :
    
    - Moteur 0 : moteur droit, OUT 1 & 2
    - Moteur 1 : moteur gauche, OUT 3 & 4
    
    
    A FAIRE :
    
    - ledbar pour autonomie -> erreur dans la librairie
    
    */


    __0__Variables.ino :

    #include "Arduino.h"
    #include "MotorDriver.h"
    //ports :
    
    int ledBarDI = 2, ledBarDCKI = 3; // Erreur de bibliothèque à revoir
    
    int buzzer = 4;
    
    int bouttonStart = 6;
    
    int sig1 = 23;
    long cm1;
    
    int sig2 = 25;
    long cm2;
    
    int sig3 = 27;
    long cm3;
    
    int sig4 = 29;
    long cm4;
    
    int sig5 = 31;
    long cm5;
    
    int sig6 = 33;
    long cm6;
     
    int sig7 = 35;
    long cm7;
    
    int sig8 = 37;
    long cm8;
    
    int sig9 = 39;
    long cm9;
    
    int sig10 = 41;
    long cm10;
     
    int sig11 = 43;
    long cm11;
    
    int ledRouge = 44;
    
    
    // Lecture ultrason :
    
    long duration;
    
    // Variables de gestion :
    
    long placementUtilisateur;
    
    long distancesLaterales[6];
    
    int tailleTableauLaterales = 6;
    
    int lecture_Bouton = 0; // 0: non enclenché, 1: enclenché
    
    // Variables de sécurité :
    
    int autorisation = 1; // etat 1 : fonctionnement autorisé | etat 0 : fonctionnement non autorisé
    
    // Variable de motorisation :
    
    MotorDriver motor;
    


    __1__SousProgrammes.ino :

    #include "header.h"
    #include "Arduino.h"
    #include "MotorDriver.h"
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void LirePositionUtilisateur() // On lit les valeurs des 5 capteurs à ultrasons du module suiveur et on les met dans un tableau
    { 
    
      // Morceau de code permettant de réinitialiser le capteur pour l’envoie d’une nouvelle onde
      pinMode(sig1, OUTPUT);
      digitalWrite(sig1, LOW);
      delayMicroseconds(2);
      digitalWrite(sig1, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig1, LOW);
      pinMode(sig1, INPUT);
      duration = pulseIn(sig1, HIGH);
      cm1 = microsecondsToCentimeters(duration);
      Serial.print(cm1);
      Serial.print("cm1");
      Serial.println();
      
      delay(100);
      
      pinMode(sig2, OUTPUT);
      digitalWrite(sig2, LOW);
      delayMicroseconds(2);
      digitalWrite(sig2, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig2, LOW);
      pinMode(sig2, INPUT);
      duration = pulseIn(sig2, HIGH);
      cm2 = microsecondsToCentimeters(duration);
      Serial.print(cm2);
      Serial.print("cm2");
      Serial.println();
      
      delay(100);
      
      pinMode(sig3, OUTPUT);
      digitalWrite(sig3, LOW);
      delayMicroseconds(2);
      digitalWrite(sig3, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig3, LOW);
      pinMode(sig3, INPUT);
      duration = pulseIn(sig3, HIGH);
      cm3 = microsecondsToCentimeters(duration);
      Serial.print(cm3);
      Serial.print("cm3");
      Serial.println();
      
      delay(100);
      
      pinMode(sig4, OUTPUT);
      digitalWrite(sig4, LOW);
      delayMicroseconds(2);
      digitalWrite(sig4, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig4, LOW);
      pinMode(sig4, INPUT);
      duration = pulseIn(sig4, HIGH);
      cm4 = microsecondsToCentimeters(duration);
      Serial.print(cm4);
      Serial.print("cm4");
      Serial.println();
      
      delay(100);
      
      pinMode(sig5, OUTPUT);
      digitalWrite(sig5, LOW);
      delayMicroseconds(2);
      digitalWrite(sig5, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig5, LOW);
      pinMode(sig5, INPUT);
      duration = pulseIn(sig5, HIGH);
      cm5 = microsecondsToCentimeters(duration);
      Serial.print(cm5);
      Serial.print("cm5");
      Serial.println();
      
      delay(100);
    
      
      OrientationUtilisateur();  
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    long microsecondsToCentimeters(long microseconds)
    {
      // Comme expliqué auparavant nous divisons la durée par la vitesse et par 2 pour avoir la distance d’un aller simple.
      return microseconds / 29 / 2;
    }
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    void OrientationUtilisateur() // On cherche le capteur captant la distance la plus petite enregistrées dans le tableau
    {
      long DistancesCapteur[5] = {cm1 , cm2 , cm3 , cm4 , cm5};
      int tailleTableau = 5;
      
      long i, retenirNombre;
     
        for(i = 0 ; i < tailleTableau ; i++)
        {
            if (DistancesCapteur[i - 1] > DistancesCapteur[i + 1])
            {
                retenirNombre = DistancesCapteur[i - 1];
                DistancesCapteur[i - 1] = DistancesCapteur[i];
                DistancesCapteur[i] = retenirNombre;
            }
        }
      
      placementUtilisateur = DistancesCapteur[1];
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void ListerDistances() // On liste dans un tableau les distances latérales captées
    {
      long DistancesCote[6] = {cm6, cm7,cm8, cm9, cm10, cm11};
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void LireDistancesLaterales() // On lit les distances latérales, et on enregistre dans un tableau
    {
      pinMode(sig6, OUTPUT);
      digitalWrite(sig6, LOW);
      delayMicroseconds(2);
      digitalWrite(sig6, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig6, LOW);
      pinMode(sig6, INPUT);
      duration = pulseIn(sig6, HIGH);
      cm6 = microsecondsToCentimeters(duration);
      Serial.print(cm6);
      Serial.print("cm6");
      Serial.println();
      
      delay(100);
      
      pinMode(sig7, OUTPUT);
      digitalWrite(sig7, LOW);
      delayMicroseconds(2);
      digitalWrite(sig7, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig7, LOW);
      pinMode(sig7, INPUT);
      duration = pulseIn(sig7, HIGH);
      cm7 = microsecondsToCentimeters(duration);
      Serial.print(cm7);
      Serial.print("cm7");
      Serial.println();
      
      delay(100);
      
      pinMode(sig8, OUTPUT);
      digitalWrite(sig8, LOW);
      delayMicroseconds(2);
      digitalWrite(sig8, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig8, LOW);
      pinMode(sig8, INPUT);
      duration = pulseIn(sig8, HIGH);
      cm8 = microsecondsToCentimeters(duration);
      Serial.print(cm8);
      Serial.print("cm8");
      Serial.println();
      
      delay(100);
      
      pinMode(sig9, OUTPUT);
      digitalWrite(sig9, LOW);
      delayMicroseconds(2);
      digitalWrite(sig9, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig9, LOW);
      pinMode(sig9, INPUT);
      duration = pulseIn(sig9, HIGH);
      cm9 = microsecondsToCentimeters(duration);
      Serial.print(cm9);
      Serial.print("cm9");
      Serial.println();
      
      delay(100);
      
      pinMode(sig10, OUTPUT);
      digitalWrite(sig10, LOW);
      delayMicroseconds(2);
      digitalWrite(sig10, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig10, LOW);
      pinMode(sig10, INPUT);
      duration = pulseIn(sig10, HIGH);
      cm10 = microsecondsToCentimeters(duration);
      Serial.print(cm10);
      Serial.print("cm10");
      Serial.println();
      
      delay(100);
      
      pinMode(sig11, OUTPUT);
      digitalWrite(sig11, LOW);
      delayMicroseconds(2);
      digitalWrite(sig11, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig11, LOW);
      pinMode(sig11, INPUT);
      duration = pulseIn(sig11, HIGH);
      cm11 = microsecondsToCentimeters(duration);
      Serial.print(cm11);
      Serial.print("cm11");
      Serial.println();
      
      delay(100);
      
      ListerDistances();
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void securite() //Gestion de la sécurité en modifiant la variable de sécurité
    {
      // On commence par les distances latérales
      int i = 1;
      
      for(i = 0 ; i < tailleTableauLaterales ; i++)
        {
            if (distancesLaterales[i] < 10)
            {
              autorisation = 0;
            }
        }
      
      // On s'occupe maintenant de la distance Module Suiveur - Utilisateur
      
      if (i = 1 && placementUtilisateur < 20 && placementUtilisateur > 50)
        {
          autorisation = 0;
        }  
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void avertir() // Avertir en cas de non sécurité
    {
      if(autorisation = 0)
      {
        digitalWrite(buzzer, HIGH); //On allume le buzzer
        digitalWrite(ledRouge, HIGH); // On allume la Led                                    // gérer extinction avec un IF (en fonction de variable d'entrée en binaire)
      }
      
      else
      {
        digitalWrite(buzzer, LOW); //On éteint le buzzer
        digitalWrite(ledRouge, LOW); // On éteint la Led
      }
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void allumage() //Gere l'allumage et l'extinction du mode de suivage
    {
      lecture_Bouton = digitalRead(bouttonStart);
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void deplacement() // Gere le déplacement en fonction de la position de l'utilisateur guideur
    {
      if(autorisation = 1)
      {
        
       if(placementUtilisateur = cm1) // se réferer à la page d'explication pour l'orientation des capteurs
       {
         motor.speed(0, 60);
         motor.speed(1, 100);
       }
       else if(placementUtilisateur = cm2)
       {
         motor.speed(0, 80);
         motor.speed(1, 100);
       }
       else if(placementUtilisateur = cm3) 
       {
         motor.speed(0, 100);
         motor.speed(1, 100);
       }
       else if(placementUtilisateur = cm4)
       {
         motor.speed(0, 100);
         motor.speed(1, 80);
       }
       else if(placementUtilisateur = cm5)
       {
         motor.speed(0, 100);
         motor.speed(1, 60);
       }
    
      }
      else
      {
        motor.stop(0);
        motor.stop(1);
      }
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    /* pour le ledbar :
    #include <Grove_LED_Bar.h>
    
    LED_Bar bar(ledBar1, ledBar2);
    
    Allumer un certain niveau :
    
    bar.setLevel(i) // avec i le niveau sur 10 des leds allumées
    
    */
    
    
    /* pour le buzzer :
    
    en setup :
    
    pinMode(buzzer, OUTPUT);
    
    en loop :
    
    digitalWrite(buzzer, HIGH);
    delay(analogRead(0));
    digitalWrite(buzzer, LOW);
    delay(analogRead(0));
    
    */
    
    
    /* pour le boutton :
    
    dans le setup :
    
    pinMode(bouttonStart, INPUT);
    
    dans le loop :
    
    lecture_Bouton = digitalRead(bouttonStart);
    
    */
    
    
    /* pour la LED rouge :
    
    dans setup :
    
    pinMode(ledRouge, OUTPUT);
    
    dans loop :
    
    digitalWrite(ledRouge, HIGH); // etat allumé avec HIGH et éteint avec LOW
    
    */
    
    
    /* Infos gestion moteurs :
    
    http://wiki.seeed.cc/Motor_Shield_V2.0/
    */

    __2__Setup.ino :

    #include "header.h"
    #include "Arduino.h"
    #include "MotorDriver.h"
    
    void setup()
    {
      pinMode(buzzer, OUTPUT);
      
      pinMode(ledRouge, OUTPUT);
      
      pinMode(bouttonStart, INPUT);
      
      motor.begin();
      
      Serial.begin(9600);
    }
    


    __3__Programme_Loop.ino :

    #include "header.h"
    #include "Arduino.h"
    #include "MotorDriver.h"
    
    void loop()
    {
      //allumage();
      
      lecture_Bouton = HIGH;
      
      if(lecture_Bouton = HIGH)
      {
        delay(1000);
        //allumage();
        lecture_Bouton = LOW;
          while(lecture_Bouton = LOW)
          {
            LirePositionUtilisateur();
      
            LireDistancesLaterales();
    
            securite();
            
            avertir();
            
            //deplacement();
            
            
            
            //allumage();
          }
        
      }
      
    }

    header.h :

    #include "Arduino.h"
    
    //En rapport avec l'utilisateur :
    void LirePositionUtilisateur();
    
    void OrientationUtilisateur();
    
    long microsecondsToCentimeters(long microseconds);
    
    
    //En rapport avec les distances latérales :
    void ListerDistances();
    
    void LireDistancesLaterales();
    
    //En rapport avec la sécurité
    void securite();
    
    void avertir();
    
    //En rapport avec l'allumage :
    void allumage();
    
    // En rapport avec la gestion des moteurs
    void deplacement();


    Je tiens à préciser que je me suis aidé des bibliothèques et de quelques forums, mais le code viens de moi. N'hésitez pas à me faire part de vos remarques :D

    Le shield grove n'ayant pas assez de ports à 4 pins digital, j'ai branché les capteurs ultrasonores aux ports digital de la Mega (en impairs, allez savoir pourquoi ...). Les capteurs fonctionnent, car je les ai testé en faisant un montage avec un seul qui affiche la distance sur le moniteur série.

    Enfin, sur la fin du fichier de fonctions, j'ai mis mes annotations, j'espère que cela ne vous dérangera pas :p

    PS : les delay(100) sont juste présents pour les tests, et faciliter la lecture lors de l'affichage sur le moniteur série. J'ai compilé sans eux sur la Mega.

    Merci par avance !

    Elias.

    EDIT : J'ai refais le fichier de fonctions en .cpp et en appelant ces fonctions. Cela ne fonctionne toujours pas. Voila les fichiers qui changent :

    __1__SousProgrammes.cpp :

    #include "header.h"
    #include "Arduino.h"
    #include "MotorDriver.h"
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void LirePositionUtilisateur(int sig1, int sig2, int sig3, int sig4, int sig5, int cm1, int cm2, int cm3, int cm4, int cm5, long duration, int placementUtilisateur) // On lit les valeurs des 5 capteurs à ultrasons du module suiveur et on les met dans un tableau
    { 
    
      // Morceau de code permettant de réinitialiser le capteur pour l’envoie d’une nouvelle onde
      pinMode(sig1, OUTPUT);
      digitalWrite(sig1, LOW);
      delayMicroseconds(2);
      digitalWrite(sig1, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig1, LOW);
      pinMode(sig1, INPUT);
      duration = pulseIn(sig1, HIGH);
      cm1 = microsecondsToCentimeters(duration);
      Serial.print(cm1);
      Serial.print("cm1");
      Serial.println();
      
      pinMode(sig2, OUTPUT);
      digitalWrite(sig2, LOW);
      delayMicroseconds(2);
      digitalWrite(sig2, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig2, LOW);
      pinMode(sig2, INPUT);
      duration = pulseIn(sig2, HIGH);
      cm2 = microsecondsToCentimeters(duration);
      Serial.print(cm2);
      Serial.print("cm2");
      Serial.println();
      
      pinMode(sig3, OUTPUT);
      digitalWrite(sig3, LOW);
      delayMicroseconds(2);
      digitalWrite(sig3, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig3, LOW);
      pinMode(sig3, INPUT);
      duration = pulseIn(sig3, HIGH);
      cm3 = microsecondsToCentimeters(duration);
      Serial.print(cm3);
      Serial.print("cm3");
      Serial.println();
      
      pinMode(sig4, OUTPUT);
      digitalWrite(sig4, LOW);
      delayMicroseconds(2);
      digitalWrite(sig4, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig4, LOW);
      pinMode(sig4, INPUT);
      duration = pulseIn(sig4, HIGH);
      cm4 = microsecondsToCentimeters(duration);
      Serial.print(cm4);
      Serial.print("cm4");
      Serial.println();
      
      pinMode(sig5, OUTPUT);
      digitalWrite(sig5, LOW);
      delayMicroseconds(2);
      digitalWrite(sig5, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig5, LOW);
      pinMode(sig5, INPUT);
      duration = pulseIn(sig5, HIGH);
      cm5 = microsecondsToCentimeters(duration);
      Serial.print(cm5);
      Serial.print("cm5");
      Serial.println();
    
      
      OrientationUtilisateur(cm1, cm2, cm3, cm4, cm5, placementUtilisateur);
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    long microsecondsToCentimeters(long microseconds)
    {
      // Comme expliqué auparavant nous divisons la durée par la vitesse et par 2 pour avoir la distance d’un aller simple.
      return microseconds / 29 / 2;
    }
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    void OrientationUtilisateur(int cm1, int cm2, int cm3, int cm4, int cm5, int placementUtilisateur) // On cherche le capteur captant la distance la plus petite enregistrées dans le tableau
    {
      long DistancesCapteur[5] = {cm1 , cm2 , cm3 , cm4 , cm5};
      int tailleTableau = 5;
      
      long i, retenirNombre;
     
        for(i = 0 ; i < tailleTableau ; i++)
        {
            if (DistancesCapteur[i - 1] > DistancesCapteur[i + 1])
            {
                retenirNombre = DistancesCapteur[i - 1];
                DistancesCapteur[i - 1] = DistancesCapteur[i];
                DistancesCapteur[i] = retenirNombre;
            }
        }
      
      placementUtilisateur = DistancesCapteur[1];
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void LireDistancesLaterales(int sig6, int sig7, int sig8, int sig9, int sig10, int sig11, int cm6, int cm7, int cm8, int cm9, int cm10, int cm11, long duration) // On lit les distances latérales, et on enregistre dans un tableau
    {
      pinMode(sig6, OUTPUT);
      digitalWrite(sig6, LOW);
      delayMicroseconds(2);
      digitalWrite(sig6, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig6, LOW);
      pinMode(sig6, INPUT);
      duration = pulseIn(sig6, HIGH);
      cm6 = microsecondsToCentimeters(duration);
      Serial.print(cm6);
      Serial.print("cm6");
      Serial.println();
      
      pinMode(sig7, OUTPUT);
      digitalWrite(sig7, LOW);
      delayMicroseconds(2);
      digitalWrite(sig7, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig7, LOW);
      pinMode(sig7, INPUT);
      duration = pulseIn(sig7, HIGH);
      cm7 = microsecondsToCentimeters(duration);
      Serial.print(cm7);
      Serial.print("cm7");
      Serial.println();
      
      pinMode(sig8, OUTPUT);
      digitalWrite(sig8, LOW);
      delayMicroseconds(2);
      digitalWrite(sig8, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig8, LOW);
      pinMode(sig8, INPUT);
      duration = pulseIn(sig8, HIGH);
      cm8 = microsecondsToCentimeters(duration);
      Serial.print(cm8);
      Serial.print("cm8");
      Serial.println();
      
      pinMode(sig9, OUTPUT);
      digitalWrite(sig9, LOW);
      delayMicroseconds(2);
      digitalWrite(sig9, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig9, LOW);
      pinMode(sig9, INPUT);
      duration = pulseIn(sig9, HIGH);
      cm9 = microsecondsToCentimeters(duration);
      Serial.print(cm9);
      Serial.print("cm9");
      Serial.println();
      
      pinMode(sig10, OUTPUT);
      digitalWrite(sig10, LOW);
      delayMicroseconds(2);
      digitalWrite(sig10, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig10, LOW);
      pinMode(sig10, INPUT);
      duration = pulseIn(sig10, HIGH);
      cm10 = microsecondsToCentimeters(duration);
      Serial.print(cm10);
      Serial.print("cm10");
      Serial.println();  
      
      pinMode(sig11, OUTPUT);
      digitalWrite(sig11, LOW);
      delayMicroseconds(2);
      digitalWrite(sig11, HIGH);
      delayMicroseconds(5);
      digitalWrite(sig11, LOW);
      pinMode(sig11, INPUT);
      duration = pulseIn(sig11, HIGH);
      cm11 = microsecondsToCentimeters(duration);
      Serial.print(cm11);
      Serial.print("cm11");
      Serial.println();
      
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void securite(int placementUtilisateur, int autorisation, int cm6, int cm7, int cm8, int cm9, int cm10, int cm11) //Gestion de la sécurité en modifiant la variable de sécurité
    {
      // On commence par les distances latérales
      int i = 1;
     
       if (cm6 < 10)
       {
              autorisation = 0;
       }
       if (cm7 < 10)
       {
              autorisation = 0;
       }
       if (cm8 < 10)
       {
              autorisation = 0;
       }
       if (cm9 < 10)
       {
              autorisation = 0;
       }
       if (cm10 < 10)
       {
              autorisation = 0;
       }
       if (cm11 < 10)
       {
              autorisation = 0;
       }
      
      // On s'occupe maintenant de la distance Module Suiveur - Utilisateur
      
      if (autorisation == 1 && placementUtilisateur < 20 || autorisation == 1 && placementUtilisateur > 50)
        {
          autorisation = 0;
        }  
      
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void avertir(int buzzer, int ledRouge, int autorisation) // Avertir en cas de non sécurité
    {
      if(autorisation = 0)
      {
        digitalWrite(buzzer, HIGH); //On allume le buzzer
        digitalWrite(ledRouge, HIGH); // On allume la Led                                    // gérer extinction avec un IF (en fonction de variable d'entrée en binaire)
      }
      
      else
      {
        digitalWrite(buzzer, LOW); //On éteint le buzzer
        digitalWrite(ledRouge, LOW); // On éteint la Led
      }
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    void allumage(int bouttonStart, int lecture_Bouton) //Gere l'allumage et l'extinction du mode de suivage
    {
      lecture_Bouton = digitalRead(bouttonStart);
    }
    
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    /*void deplacement(int autorisation, int placementUtilisateur,int cm1, int cm2, int cm3, int cm4, int cm5) // Gere le déplacement en fonction de la position de l'utilisateur guideur
    {
      if(autorisation = 1)
      {
        
       if(placementUtilisateur = cm1) // se réferer à la page d'explication pour l'orientation des capteurs
       {
         motor.speed(0, 60);
         motor.speed(1, 100);
       }
       else if(placementUtilisateur = cm2)
       {
         motor.speed(0, 80);
         motor.speed(1, 100);
       }
       else if(placementUtilisateur = cm3) 
       {
         motor.speed(0, 100);
         motor.speed(1, 100);
       }
       else if(placementUtilisateur = cm4)
       {
         motor.speed(0, 100);
         motor.speed(1, 80);
       }
       else if(placementUtilisateur = cm5)
       {
         motor.speed(0, 100);
         motor.speed(1, 60);
       }
    
      }
      else
      {
        motor.stop(0);
        motor.stop(1);
      }
    }
    */
    
    //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
    
    
    /* pour le ledbar :
    #include <Grove_LED_Bar.h>
    
    LED_Bar bar(ledBar1, ledBar2);
    
    Allumer un certain niveau :
    
    bar.setLevel(i) // avec i le niveau sur 10 des leds allumées
    
    */
    
    
    /* pour le buzzer :
    
    en setup :
    
    pinMode(buzzer, OUTPUT);
    
    en loop :
    
    digitalWrite(buzzer, HIGH);
    delay(analogRead(0));
    digitalWrite(buzzer, LOW);
    delay(analogRead(0));
    
    */
    
    
    /* pour le boutton :
    
    dans le setup :
    
    pinMode(bouttonStart, INPUT);
    
    dans le loop :
    
    lecture_Bouton = digitalRead(bouttonStart);
    
    */
    
    
    /* pour la LED rouge :
    
    dans setup :
    
    pinMode(ledRouge, OUTPUT);
    
    dans loop :
    
    digitalWrite(ledRouge, HIGH); // etat allumé avec HIGH et éteint avec LOW
    
    */
    
    
    /* Infos gestion moteurs :
    
    http://wiki.seeed.cc/Motor_Shield_V2.0/
    */

    __3__Programme_Loop.ino :

    #include "header.h"
    #include "Arduino.h"
    #include "MotorDriver.h"
    
    void loop()
    {
      allumage(bouttonStart, lecture_Bouton);
      
      lecture_Bouton = HIGH;
      
      if(lecture_Bouton = HIGH)
      {
        delay(1000);
        allumage(bouttonStart, lecture_Bouton);
        lecture_Bouton = LOW;
          while(lecture_Bouton = LOW)
          {
            LirePositionUtilisateur( sig1, sig2, sig3, sig4, sig5, cm1, cm2, cm3, cm4, cm5, duration, placementUtilisateur);
            
            LireDistancesLaterales(sig6, sig7, sig8, sig9, sig10, sig11, cm6, cm7, cm8, cm9, cm10, cm11, duration);
    
            securite(placementUtilisateur, autorisation, cm6, cm7, cm8, cm9, cm10, cm11);
            
            avertir(buzzer, ledRouge, autorisation);
            
            //deplacement();
            
            
            
            allumage(bouttonStart, lecture_Bouton);
          }
        
      }
      
    }


    __3__header.h :

    #include "Arduino.h"
    #include "MotorDriver.h"
    
    //En rapport avec l'utilisateur :
    void LirePositionUtilisateur(int sig1, int sig2, int sig3, int sig4, int sig5, int cm1, int cm2, int cm3, int cm4, int cm5, long duration, int placementUtilisateur);
    
    long microsecondsToCentimeters(long microseconds);
    
    void OrientationUtilisateur(int cm1, int cm2, int cm3, int cm4, int cm5, int placementUtilisateur);
    
    
    //En rapport avec les distances latérales :
    void ListerDistances(int cm1, int cm2, int cm3, int cm4, int cm5, long distancesLaterales[6]);
    
    void LireDistancesLaterales(int sig6, int sig7, int sig8, int sig9, int sig10, int sig11, int cm6, int cm7, int cm8, int cm9, int cm10, int cm11, long duration);
    
    //En rapport avec la sécurité
    void securite(int placementUtilisateur, int autorisation, int cm6, int cm7, int cm8, int cm9, int cm10, int cm11);
    
    void avertir(int buzzer, int ledRouge, int autorisation);
    
    //En rapport avec l'allumage :
    void allumage(int bouttonStart, int lecture_Bouton);
    
    // En rapport avec la gestion des moteurs
    void deplacement(int autorisation, int placementUtilisateur,int cm1, int cm2, int cm3, int cm4, int cm5);

    Voilou voilou, bonne lecture pour ceux qui voudront bien me sauver :p (soyez courageux :ninja:).


    -
    Edité par Eliaccess 24 avril 2017 à 20:06:37

    • Partager sur Facebook
    • Partager sur Twitter
      24 avril 2017 à 21:26:16

      Attention à ne pas confondre l'affectation (un seule signe égal) et la comparaison (2 signes égal).

      Il est très rare de devoir utiliser une affectation dans un test if ou une boucle while.

      Ligne 16 de ton loop, si tu remplaces while(lecture_Bouton = LOW) par while(lecture_Bouton == LOW), tu devrais voir apparaitre quelque chose.

      Je t'invite à relire tout ton programme car il y a plusieurs endroits où tu as mis un simple signe égal au lieux d'en mettre 2.

      • Partager sur Facebook
      • Partager sur Twitter
        25 avril 2017 à 0:31:41

        Salut ! Merci pour ta réponse.

        J'ai trouvé aussi d'autres soucis, et le code marche jusqu'à l'assignation d'une valeur binaire à la variable "autorisation". En fait, vu que je codé en plusieurs fichiers, les variables globales ne passent pas pour le .cpp, qui ne peut pas les modifier (valeurs de distances). Je dois donc passer par d'autres variables. Ca avance :p

        Je laisse le poste ouvert, et une fois le projet terminé, je posterais tout le code fonctionnel, au cas ou quelqu'un en ai besoin.

        Voilou. Et encore merci @lorrio :magicien:

        Elias.

        • Partager sur Facebook
        • Partager sur Twitter

        Erreur Arduino Mega

        × 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