AmineCHIALI
Published © GPL3+

CSMA CAR v3.2.13

"CSMA CAR" is a miniaturized mobile platform that combines three modes of operation. Manual mode, automatic mode and motion mode

AdvancedShowcase (no instructions)466
CSMA CAR v3.2.13

Things used in this project

Hardware components

Arduino Mega 2560
Arduino Mega 2560
×1
Arduino USB Host Shield
Arduino USB Host Shield
×1
Itead L298 Dual H-Bridge Motor Driver
×1
DC Motor, 12 V
DC Motor, 12 V
×4
MG996R High Torque Metal Gear Servo 180°
×1
SG90 Micro-servo motor
SG90 Micro-servo motor
×2
Ultrasonic Sensor - HC-SR04 (Generic)
Ultrasonic Sensor - HC-SR04 (Generic)
×3
High Brightness LED, White
High Brightness LED, White
×4
Buzzer
Buzzer
×1
Resistor 330 ohm
Resistor 330 ohm
×4
Male/Female Jumper Wires
Male/Female Jumper Wires
×2
Battery Holder, 18650 x 2
Battery Holder, 18650 x 2
×2
Bluetooth to USB Dongle
mbientLab Bluetooth to USB Dongle
×1
Sony PS3 Joystick Dual Shock 3
×1

Hand tools and fabrication machines

dremel
Soldering iron (generic)
Soldering iron (generic)
Solder Wire, Lead Free
Solder Wire, Lead Free

Story

Read more

Schematics

CSMA CAR CIRCUIT

Project circuit

Code

CSMA_CAR_CODE

C/C++
The code of this project
/*              CSMA   :  CHIALI  Sidi  Mohammed  El  Amine

 
                   *  *        * * * * * * * * * * * * * * *       * * * * * * * *      
                *            *          *      *      *      *
              *               *         *      *      *       *
             *                  *       *      *      *       *
             *                     *    *      *      * * * * *    * * * *        
              *                      *  *      *      *       *
                *                    *  *      *      *       *
                   *  *  *  *  *   *    *      *      *       *    * * 
*/

/*
Note :
- The attached program is not optimal and the comments are written in French !!
*/

 #include <PS3BT.h>
 #include <usbhub.h>
 #include <Servo.h>
 // Satisfaire l'IDE, qui doit voir l'instruction include dans l'introduction
 #ifdef dobogusinclude
 #include <spi4teensy3.h>
 #endif
 #include <SPI.h>
 #include <NewPing.h>

 #define SONAR_NUM     3             // Nombre de capteurs
 #define MAX_DISTANCE  50            // Distance maximale (en cm) à ping.
 #define PING_INTERVAL 10            // Millisecondes entre les pings du capteur (29 ms correspond à peu près au minimum pour éviter l'écho de capteurs croisés).
 unsigned long pingTimer[SONAR_NUM]; // Indique le moment où le prochain ping devrait se produire pour chaque capteur.
 unsigned int cm[SONAR_NUM];         // Où les distances de ping sont stockées.
 uint8_t currentSensor = 0;          // Garde la trace du capteur actif.

 // Tableau d'objets capteurs            US DROIT                        US MILIEU                       US GAUCHE
 NewPing sonar[SONAR_NUM] = { NewPing(28, 29, MAX_DISTANCE) , NewPing(30, 31, MAX_DISTANCE) , NewPing(32, 33, MAX_DISTANCE) } ; //  NewPing( La broche TRIG , la broche Echo , la distance maximale par ping de chaque capteur)
 
 USB Usb;
 
 //USBHub HUB1 (& USB); Certains dongles ont un hub à l'intérieur

 BTD Btd(&Usb); // You have to create the Bluetooth Dongle instance like so
 /* Vous pouvez créer l'instance de la classe de deux façons */
 //PS3BT PS3(&Btd); // This will just create the instance
 PS3BT PS3(&Btd, 0x00, 0x15, 0x83, 0x3D, 0x0A, 0x57); // This will also store the bluetooth address - this can be obtained from the dongle when running the sketch

 int K = 0 ; 
 bool state = 0 ;

 
 bool ETAT = 0 ;
 
 bool POWER = 0 ;
 bool Triangle = 0 ,Cercle = 0 , Croix = 0 , Carre = 0 ;
 bool r1 = 0 , l1 = 0 ;
 bool Haut = 0 , Bas = 0 , Droite = 0 , Gauche = 0 ;

 int pinDirA = 22;             //  MOTEUR A
 int pinBrkA = 23;             //  MOTEUR A
 int pinPwmA = 2;              //  MOTEUR A
 
 int pinDirB = 24;             //  MOTEUR B
 int pinBrkB = 25;             //  MOTEUR B
 int pinPwmB = 3;              //  MOTEUR B

 int JoygaucheX,JoygaucheY,JoydroitX,JoydroitY;
 int Avant,Arriere;
 float TANGAGE , ROULIS ;

 
 int Vitesse ;             // Mode AUTO
 int Cmd_Vitesse = 175 ;   // Mode AUTO
 int WARNING = 10 ;        // Distance maximale qui stop les moteurs
 
 int pos1 = 100  ;
 int pos2 = 180 ;
 int posG = 0   ;      //   position servo GAUCHE
 int posD = 0   ;      //   position servo DROIT

 unsigned long previous_time_servo = 0 ;
 unsigned long delay_servo = 5000 ;


 Servo Direction   ;
 Servo servodroit  ;
 Servo servogauche ;

 
 int ANGLE;

 const int buzzer = 36 ;
 


 const int Led1 = 18 ;
 const int Led2 = 19 ;
 const int Led3 = 20 ; 
 const int Led4 = 21 ;


 
 unsigned long previous_time_blink = 0 ;    // Temps précédent         
 unsigned long delay_blink = 300 ;          // Intervalle entre les clignotements des LEDS  300 ms 


 void setup() {

 pingTimer[0] = millis() + 75;                         // Le premier ping commence à 75 ms, donne le temps à l’Arduino de refroidir avant de commencer.
 for (uint8_t i = 1; i < SONAR_NUM; i++)               // Définissez l'heure de démarrage pour chaque capteur.
      pingTimer[i] = pingTimer[i - 1] + PING_INTERVAL;


 pinMode(buzzer, OUTPUT);
 
 pinMode(Led1,OUTPUT);
 pinMode(Led2,OUTPUT);
 pinMode(Led3,OUTPUT);
 pinMode(Led4,OUTPUT);


 
  
 Direction.attach(45)  ;
 servodroit.attach(6)  ;
 servogauche.attach(5) ;
 
 servodroit.write(100);      // Position initiale du servo Droit
 servogauche.write(80);      // Position initiale du servo Gauche




 pinMode(pinDirA, OUTPUT);
 pinMode(pinBrkA, OUTPUT);
 pinMode(pinPwmA, OUTPUT);
 pinMode(pinDirB, OUTPUT);
 pinMode(pinBrkB, OUTPUT);
 pinMode(pinPwmB, OUTPUT);  

  Serial.begin(115200);
  #if !defined(__MIPSEL__)
  while (!Serial); // Attendez que le port série se connecte-utilisé sur Leonardo, teensy et d'autres conseils avec construit en USB CDC connexion série
  #endif
  if (Usb.Init() == -1) {
    Serial.print(F("\r\nOSC did not start"));
  while (1);  //Arrêter
  }
  Serial.print(F("\r\nPS3 Bluetooth Library Started"));
 }


 void loop() {
 
                 
Usb.Task();
  
if (PS3.PS3Connected || PS3.PS3NavigationConnected) {


if ( PS3.getAnalogButton(L2) > 100 && PS3.getButtonClick(R1)){             // Si je touche les boutons Analog (L2) et (R1) en même temps, la variable "POWER" s'incrémente         
    POWER = ! POWER ;
    STOP (); 
    K = 0 ;
    REINITIALISER_TOUS_LES_MODES () ;                       
    while ( K < 2 ) {
           ANIMATION_AU_DEMARRAGE ( HIGH ) ;
           delay (125);
           ANIMATION_AU_DEMARRAGE ( LOW ) ;
           delay (125);
           K++; 
    }
    
    digitalWrite(buzzer, LOW );
    ETEINDRE_LES_LEDS ();                                   }

if (PS3.getButtonClick(L1))                                 {             //  Si je Touche le bouton ( L1 ) , La variable "l1" s'incrémente           
    l1 = ! l1 ;                                             }

if (PS3.getButtonClick(R1))                                 {             //  Si je Touche le bouton ( R1 ) , La variable "r1" s'incrémente           
    r1 = ! r1 ;                                             }
     
if (PS3.getButtonClick(UP))                                 {             //  Si je Touche le bouton ( HAUT ) , La variable "Haut" s'incrémente           
    Haut = ! Haut ;                                         }

if (PS3.getButtonClick(RIGHT))                              {             //  Si je Touche le bouton ( DROITE ) , La variable "Droite" s'incrémente           
    Droite = ! Droite ;                                     }

if (PS3.getButtonClick(DOWN))                               {             //  Si je Touche le bouton ( BAS ) , La variable "Bas" s'incrémente           
    Bas = ! Bas ;                                           }

if (PS3.getButtonClick(LEFT))                               {             //  Si je Touche le bouton ( GAUCHE ) , La variable "Gauche" s'incrémente           
    Gauche = ! Gauche ;                                     }
    
if (PS3.getButtonClick(SQUARE))                             {             //  Si je Touche le bouton ( CARRE ) , La variable "Carre" s'incrémente           
    Carre = ! Carre ;                                       }
    
if (PS3.getButtonClick(CROSS))                              {             //  Si je Touche le bouton ( CROIX) , La variable "Croix" s'incrémente           
    Croix = ! Croix ;
    Cercle   = 0 ;
    Triangle = 0 ;                                          }
    
if (PS3.getButtonClick(CIRCLE))                             {             //  Si je Touche le bouton ( CERCLE) , La variable "Cercle" s'incrémente           
    Cercle = ! Cercle ;      
    Croix    = 0 ;
    Triangle = 0 ;                                          }
    
if (PS3.getButtonClick(TRIANGLE))                           {             //  Si je Touche le bouton ( TRIANGLE) , La variable "Triangle" s'incrémente           
    Triangle = ! Triangle ;                     
    Croix  = 0 ;
    Cercle = 0 ;                                            }                 



//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//


if ( POWER == 0 ) {                          //      !!!   STOP   !!!
   
    STOP ();                                 // Arrêter les Moteurs
    ETEINDRE_LES_LEDS ();                    // Eteindre les LEDS
    Direction.write(96);                     // Position initiale de la Direction
    servodroit.write(100);                   // Position initiale du Servo Droit
    servogauche.write(80);                   // Position initiale du Servo Gauche
    Serial.println("   ");
}

if ( POWER == 1 ) {                          //      !!!   START   !!!

  if ( Croix == 1 ) {                        //      !!!   Mode   " MOUVEMENT "   Activé   !!!
   
   TIMER ();
   TANGAGE = PS3.getAngle(Pitch) ;         // AVANCER / RECULER
   ROULIS  = PS3.getAngle(Roll)  ;         // TOURNER A DROITE / TOURNER A GAUCHE
   
   if ( PS3.getAngle(Pitch) > 190 ) {      // Balancer la manette vers l'avant pour Avancer
      CLIGNOTEMENT_EN_AVANT ();
      Vitesse = map(TANGAGE, 190 , 240 , 50 , 255 ) ;
      AVANCEZ ( Vitesse ) ;
                                    }
      
   else if (PS3.getAngle(Pitch) < 170 ) {  // Balancer la manette vers l'arrière pour RECULER
      CLIGNOTEMENT_EN_ARRIERE ();
      Vitesse = map(TANGAGE, 170 , 120 , 50, 255 ) ;
      RECULEZ ( Vitesse ) ;
                                        } 

   else{                                   // Maintenir la manette équilibrée pour STOPPER les moteurs
      STOP ();
      ETEINDRE_LES_LEDS ();}

   if (PS3.getAngle(Roll) < 170){         // Balancer la manette vers la gauche pour tourner à GAUCHE
      CLIGNOTEMENT_A_GAUCHE ();
      ANGLE = map( ROULIS , 120 , 170 , 70 , 95 );   
      Direction.write(ANGLE);
                                }                     
   else if (PS3.getAngle(Roll) > 190){    // Balancer la manette vers la droite pour tourner à DROITE                        
      CLIGNOTEMENT_A_DROITE ();
      ANGLE = map( ROULIS , 190 ,240 , 97 , 122 );   
      Direction.write(ANGLE);
                                     }        
   else {
      ETEINDRE_LES_LEDS ();
      Direction.write(96);                // Maintenir la manette équilibrée pour Centrer la direction
        }
        
   Serial.print(F("\r\nTANGAGE: "));
   Serial.print(PS3.getAngle(Pitch));
   Serial.print(F("\tROULIS: "));
   Serial.print(PS3.getAngle(Roll));   
   }

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

  if ( Triangle == 0 ) {            //      !!!   Mode   " AUTO "   Désactivé   !!!
   
    servodroit.write(100);                   // Position initiale du Servo Droit
    servogauche.write(80);                   // Position initiale du Servo Gauche
    if( Croix  == 0 && Cercle == 0) {
    STOP ();
    }
  }
  
  if ( Triangle == 1 ) {            //      !!!   Mode   " AUTO "   Activé   !!!

    for (uint8_t i = 0; i < SONAR_NUM; i++) {                                       // Boucle à travers tous les capteurs.
         if (millis() >= pingTimer[i]) {                                            // Est-ce que c'est l'heure de ce capteur?
             pingTimer[i] += PING_INTERVAL * SONAR_NUM;                             // Défini la prochaine fois que ce capteur sera envoyé.
             if (i == 0 && currentSensor == SONAR_NUM - 1) oneSensorCycle();        // Le cycle de ping du capteur est terminé, faites quelque chose avec les résultats.
                 sonar[currentSensor].timer_stop();                                 // Assurez-vous que la minuterie précédente est annulée avant de commencer un nouveau ping (assurance).
                 currentSensor = i;                                                 // Capteur en cours d'accès.
                 cm[currentSensor] = 0;                                             // Définissez la distance zéro au cas où il n’y aurait pas d’écho de ping pour ce capteur.
                 sonar[currentSensor].ping_timer(echoCheck);                        // Faites le ping (le traitement continue, interruption appellera echoCheck pour rechercher un écho).
                                       }
                                            }
                     }
                     
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

  
  if ( Cercle == 1 ) {              //      !!!   Mode   " Manuel "   Activé   !!!    

   TIMER ();
   STOP ();
   JoygaucheX =   PS3.getAnalogHat(LeftHatX)    ;
   JoygaucheY =   PS3.getAnalogHat(LeftHatY)    ;
   JoydroitX  =   PS3.getAnalogHat(RightHatX)   ;
   JoydroitY  =   PS3.getAnalogHat(RightHatY)   ;
   Avant      =   PS3.getAnalogButton(R2)       ;
   Arriere    =   PS3.getAnalogButton(L2)       ;
   
   if (JoygaucheX < 117){
      CLIGNOTEMENT_A_GAUCHE ();
      ANGLE = map(JoygaucheX,0,117,70,96);   
      Direction.write(ANGLE);
                        }
   else if (JoygaucheX > 137){                           
      CLIGNOTEMENT_A_DROITE ();
      ANGLE = map(JoygaucheX,137,255,96,122); 
      Direction.write(ANGLE);
                             }
   else {
      ETEINDRE_LES_LEDS ();
      Direction.write(96); 
        }

   if ( PS3.getAnalogHat(RightHatX) > 137 ){                             //           Direction char (TOURNEZ A DROITE)
      FEUX_DE_DETRESSE ();
      Vitesse = map(JoydroitX, 137,255,50,255) ;
      TOURNEZ_A_DROITE ( Vitesse ) ;
                                           }
   else if (PS3.getAnalogHat(RightHatX) < 117) {                         //           Direction char (TOURNEZ A GAUCHE)
      FEUX_DE_DETRESSE ();
      Vitesse =  map(JoydroitX, 117,0,50,255) ;
      TOURNEZ_A_GAUCHE ( Vitesse ) ;
                                               } 
                               
   if ( PS3.getAnalogButton(R2)) {                                       //           AVANCEZ
      Vitesse = map(Avant, 0, 255, 50, 255 ) ;
      AVANCEZ ( Vitesse ) ;      }
      
   else if (PS3.getAnalogButton(L2)) {
      Vitesse = map(Arriere, 0, 255, 50, 180 ) ;                         //           RECULEZ
      RECULEZ ( Vitesse ) ;          } 
     


           
   Serial.print   (" Angle : ");
   Serial.print   (ANGLE);
   Serial.print   ("°");
   Serial.print   ("   Vitesse AVANT/ARRIERE : ");
   Serial.print   (Avant);
   Serial.print   ("/");
   Serial.println   (Arriere);
   } 

//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//
//-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------//

}    
  if (PS3.getButtonClick(PS)) {            //     Éteindre la manette
      Serial.print(F("\r\nPS"));
      PS3.disconnect();                              
                              }
                              


//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//
//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//

} 
}
 
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
 
  void echoCheck() {                        // Si la commande ping a été reçue, définissez la distance du capteur sur Array.
  if (sonar[currentSensor].check_timer())
      cm[currentSensor] = sonar[currentSensor].ping_result / US_ROUNDTRIP_CM;
  }

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
  
  void oneSensorCycle() {                   //Le cycle de ping du capteur est terminé, faites quelque chose avec les résultats.

  for (uint8_t i = 0; i < SONAR_NUM; i++) {
    Serial.print(i)    ;
    Serial.print("=")  ;
    Serial.print(cm[i]);
    Serial.print("cm ");                  }
  Serial.println();
  // stocker les résultats dans des variables   

  int DROIT  = cm[0];
  int MILIEU = cm[1];
  int GAUCHE = cm[2];

if( DROIT == 0 && MILIEU == 0 && GAUCHE == 0 ){  // Si aucun des Capteurs ne détectent la distance souhaité
  if ( micros() - previous_time_servo > delay_servo ) { 
          STOP ();    // Fonction qui permet de STOPER les moteurs
          if( pos1 <= 180 ){                                                                          
             posD = 180 - pos1 ;
             posG = pos1 ;
             servodroit .write( posD );
             servogauche.write( posG );
             pos1 = pos1 + 10 ;
                            }
          if( pos1 > 180 ){
             posD = 180 - pos2 ;
             posG = pos2 ;
             servodroit .write( posD );
             servogauche.write( posG ); 
             pos2 = pos2 - 10 ;
             if( pos2 == -10 ){ pos2 = 180 ; pos1 = 100 ;}}
      previous_time_servo = micros()  ;                   }
}




if( DROIT > 0 && MILIEU > 0 && GAUCHE > 0 ){  // Si tous les Capteurs détectent la distance souhaité
  
   if( DROIT < MILIEU &&  DROIT < GAUCHE  ){      // si la Distance du Capteur droit est la plus inférieur 
      Vitesse = Cmd_Vitesse ;
      TOURNEZ_A_DROITE ( Vitesse ) ;                      // Fonction qui permet de Tourner a droite avec une Vitesse réglable
   }

   if( MILIEU < DROIT &&  MILIEU < GAUCHE ){      // si la Distance du Capteur milieu est la plus inférieur
      if ( MILIEU < WARNING ){
          STOP ();                                // Fonction qui permet de STOPER les moteurs
                             }
      else {
      Vitesse = Cmd_Vitesse ;
      AVANCEZ          ( Vitesse ) ;   }                   // Fonction qui permet d'Avancer tout droit avec une Vitesse réglable 
   }

   if( GAUCHE < DROIT &&  GAUCHE < MILIEU ){      // si la Distance du Capteur gauche est la plus inférieur
      Vitesse = Cmd_Vitesse ;
      TOURNEZ_A_GAUCHE ( Vitesse ) ;                      // Fonction qui permet de Tourner a gauche avec une Vitesse réglable
   }}




if( DROIT > 0 && MILIEU == 0 && GAUCHE > 0 ){  // Si le Capteur gauche et le Capteur droit détectent la distance souhaité

   if( DROIT < GAUCHE ){    // si la Distance du Capteur droit est la plus inférieur
      Vitesse = Cmd_Vitesse ;
      TOURNEZ_A_DROITE ( Vitesse ) ;                      // Fonction qui permet de Tourner a droite avec une Vitesse réglable 
   }

   if( GAUCHE < DROIT ){    // si la Distance du Capteur gauche est la plus inférieur
      Vitesse = Cmd_Vitesse ;
      TOURNEZ_A_GAUCHE ( Vitesse ) ;                      // Fonction qui permet de Tourner a gauche avec une Vitesse réglable 
   }}




if( DROIT == 0 && MILIEU > 0 && GAUCHE > 0 ){  // Si le Capteur gauche et le Capteur milieu détectent la distance souhaité

   if( MILIEU < GAUCHE ){    // si la Distance du Capteur milieu est la plus inférieur
      if ( MILIEU < WARNING ){
          STOP ();                                // Fonction qui permet de STOPER les moteurs
                             }
      else {
      Vitesse = Cmd_Vitesse ;
      AVANCEZ          ( Vitesse ) ;  }                   // Fonction qui permet d'Avancer tout droit avec une Vitesse réglable  
   }

   if( GAUCHE < MILIEU ){    // si la Distance du Capteur gauche est la plus inférieur
      Vitesse = Cmd_Vitesse ;
      TOURNEZ_A_GAUCHE ( Vitesse ) ;                      // Fonction qui permet de Tourner a gauche avec une Vitesse réglable 
   }}




if( DROIT > 0 && MILIEU > 0 && GAUCHE == 0 ){  // Si le Capteur droit et le Capteur milieu détectent la distance souhaité

   if( DROIT < MILIEU ){    // si la Distance du Capteur droit est la plus inférieur
      Vitesse = Cmd_Vitesse ;
      TOURNEZ_A_DROITE ( Vitesse ) ;                      // Fonction qui permet de Tourner a droite avec une Vitesse réglable  
   }

   if( MILIEU < DROIT ){    // si la Distance du Capteur milieu est la plus inférieur
      if ( MILIEU < WARNING ){
          STOP ();                                // Fonction qui permet de STOPER les moteurs
                             }
      else {
      Vitesse = Cmd_Vitesse ;
      AVANCEZ          ( Vitesse ) ;   }                  // Fonction qui permet d'Avancer tout droit avec une Vitesse réglable  
   }}




if( DROIT > 0 && MILIEU == 0 && GAUCHE == 0 ){  // Si seulement le Capteur droit qui détecte la distance souhaité
   Vitesse = Cmd_Vitesse ;
   TOURNEZ_A_DROITE ( Vitesse ) ;                      // Fonction qui permet de Tourner a droite avec une Vitesse réglable 
}




if( DROIT == 0 && MILIEU > 0 && GAUCHE == 0 ){  // Si seulement le Capteur milieu qui détecte la distance souhaité
   if ( MILIEU < WARNING ){
          STOP ();                                // Fonction qui permet de STOPER les moteurs
                             }
      else {
   Vitesse = Cmd_Vitesse ;
   AVANCEZ          ( Vitesse ) ;  }                   // Fonction qui permet d'Avancer tout droit avec une Vitesse réglable 
}




if( DROIT == 0 && MILIEU == 0 && GAUCHE > 0 ){  // Si seulement le Capteur gauche qui détecte la distance souhaité
   Vitesse = Cmd_Vitesse ;
   TOURNEZ_A_GAUCHE ( Vitesse ) ;                      // Fonction qui permet de Tourner a gauche avec une Vitesse réglable
}

}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void AVANCEZ ( int Vitesse ) {
     digitalWrite(pinDirA,HIGH)      ;
     digitalWrite(pinBrkA,LOW )      ;
     digitalWrite(pinDirB,HIGH)      ;
     digitalWrite(pinBrkB,LOW )      ;
     analogWrite (pinPwmA, Vitesse ) ;
     analogWrite (pinPwmB, Vitesse ) ;   
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void RECULEZ ( int Vitesse ) {
     digitalWrite(pinDirA,LOW )      ;
     digitalWrite(pinBrkA,HIGH)      ;
     digitalWrite(pinDirB,LOW )      ;
     digitalWrite(pinBrkB,HIGH)      ;
     analogWrite (pinPwmA, Vitesse ) ;
     analogWrite (pinPwmB, Vitesse ) ;   
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void TOURNEZ_A_DROITE ( int Vitesse ) {
     digitalWrite(pinDirA,HIGH)      ;
     digitalWrite(pinBrkA,LOW )      ;
     digitalWrite(pinDirB,LOW )      ;
     digitalWrite(pinBrkB,HIGH)      ;                                                             
     analogWrite (pinPwmA, Vitesse ) ;
     analogWrite (pinPwmB, Vitesse ) ;
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void TOURNEZ_A_GAUCHE ( int Vitesse ) {
     digitalWrite(pinDirA,LOW )      ;
     digitalWrite(pinBrkA,HIGH)      ;
     digitalWrite(pinDirB,HIGH)      ;
     digitalWrite(pinBrkB,LOW )      ;                                                             
     analogWrite (pinPwmA, Vitesse ) ;
     analogWrite (pinPwmB, Vitesse ) ;      
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void STOP (){
     digitalWrite(pinDirA,LOW ) ;
     digitalWrite(pinBrkA,LOW)  ;
     digitalWrite(pinDirB,LOW)  ;
     digitalWrite(pinBrkB,LOW ) ;  
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
 
void TIMER (){                              // TIMER : Fonction qui permet de faire une incrémentation sans délai
     if ( millis() - previous_time_blink > delay_blink ) {
         ETAT = !ETAT ;
         previous_time_blink = millis();                 }   
}
  
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void FEUX_DE_DETRESSE (){                   // FEUX DE DETRESSE
     digitalWrite(Led1 , ETAT );  
     digitalWrite(Led2 , ETAT ); 
     digitalWrite(Led3 , ETAT );
     digitalWrite(Led4 , ETAT );
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void CLIGNOTEMENT_A_DROITE (){              // CLIGNOTEMENT A DROITE
     digitalWrite(Led1 , LOW  );  
     digitalWrite(Led2 , ETAT ); 
     digitalWrite(Led3 , LOW  );
     digitalWrite(Led4 , ETAT );
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void CLIGNOTEMENT_A_GAUCHE (){              // CLIGNOTEMENT A GAUCHE
     digitalWrite(Led1 , ETAT );  
     digitalWrite(Led2 , LOW  ); 
     digitalWrite(Led3 , ETAT );
     digitalWrite(Led4 , LOW  );
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void CLIGNOTEMENT_EN_AVANT (){              // CLIGNOTEMENT EN AVANT
     digitalWrite(Led1 , ETAT );  
     digitalWrite(Led2 , ETAT ); 
     digitalWrite(Led3 , LOW  );
     digitalWrite(Led4 , LOW  );
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void CLIGNOTEMENT_EN_ARRIERE (){            // CLIGNOTEMENT EN ARRIERE
     digitalWrite(Led1 , LOW  );  
     digitalWrite(Led2 , LOW  ); 
     digitalWrite(Led3 , ETAT );
     digitalWrite(Led4 , ETAT );
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void ETEINDRE_LES_LEDS (){                  // ETEINDRE LES LEDS
     digitalWrite(Led1 , LOW  );  
     digitalWrite(Led2 , LOW  ); 
     digitalWrite(Led3 , LOW  );
     digitalWrite(Led4 , LOW  );
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//

void ANIMATION_AU_DEMARRAGE ( bool state ) {            // BIP + CLIGNOTEMENTS AU DÉMARRAGE
     
     digitalWrite(buzzer, state );
     digitalWrite(Led1  , state );  
     digitalWrite(Led2  , state ); 
     digitalWrite(Led3  , state );
     digitalWrite(Led4  , state );    
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
  
void REINITIALISER_TOUS_LES_MODES (){       // REINITIALISER TOUS LES MODES
     Croix    = 0 ;
     Cercle   = 0 ;
     Triangle = 0 ;   
     PS3.setRumbleOn(RumbleLow); 
}

//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
  

Credits

AmineCHIALI
1 project • 0 followers
Contact

Comments

Please log in or sign up to comment.