control zumo robot with HC-06 compilation error message

Hi everybody!

I need your help, I have a HC-06 bluetooth module and a zumo 32U4 robot, I would like to be able to control my robot from my smartphone with the HC-06 however when I try to compile the program including the library SoftwareSerial it puts me an error message and I don’t see where there may be an error.
Thank you for your help

Error message:

C:\Users\Amin\AppData\Local\Temp\arduino_build_168799\libraries\Zumo32U4\Zumo32U4Encoders.cpp.o (symbol from plugin): In function `__vector_9':

(.text+0x0): multiple definition of `__vector_9'

C:\Users\Amin\AppData\Local\Temp\arduino_build_168799\libraries\SoftwareSerial\SoftwareSerial.cpp.o (symbol from plugin):(.text+0x0): first defined here

collect2.exe: error: ld returned 1 exit status

Using library SoftwareSerial at version 1.0 in folder: C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2\libraries\SoftwareSerial 
Using library Wire at version 1.0 in folder: C:\Users\Amin\AppData\Local\Arduino15\packages\arduino\hardware\avr\1.8.2\libraries\Wire 
Using library Zumo32U4 at version 1.1.4 in folder: C:\Users\Amin\Documents\Arduino\libraries\Zumo32U4 
exit status 1
Error compiling for board Pololu A-Star 32U4.

My code:

#include <SoftwareSerial.h>
#include <Wire.h>
#include <Zumo32U4.h>
#include "TurnSensor.h"

// déclaration des objets :
LSM303 ACCELERO;
Zumo32U4ProximitySensors CAPTEUR_OBS ;
Zumo32U4LineSensors CAPTEUR_SOL;
Zumo32U4Encoders CODEURS;
Zumo32U4LCD LCD;
Zumo32U4ButtonA BPA;
Zumo32U4ButtonB BPB;
Zumo32U4Motors MOTEUR;
L3G gyro;

// déclaration des constantes
#define NB_CAPTEUR_L 3
#define KP 0
#define KI 0
#define KD 0
#define KCAP 1.0
#define TE 0.01
#define K 20 
#define VAL_CONTACT 100.0



//déclaration des variables utilisées :

 int CODEUR_G, CODEUR_D ;
int VIT ;
unsigned int CAPTEURS_SOL[NB_CAPTEUR_L];

int CAPTEUR_SD, CAPTEUR_SG, CAPTEUR_SC ;

int CAPTEUR_GG, CAPTEUR_GD, CAPTEUR_CG, CAPTEUR_CD, CAPTEUR_DG, CAPTEUR_DD ;

int16_t Y_ACCEL, X_ACCEL ;
int32_t NORME_ACCEL ;
String NORME_ACCEL_ST ;

long T ;
float ERREUR_D, ERREUR_G, ERREUR_DP, ERREUR_GP, ERREUR_DINT, ERREUR_GINT ;

// DECLARATION DES FONCTIONS UTILISEES PAR STI2D :
//-----------------------------------------------------

//DETECTION CONTACT AVEC OBSTACLE OU ROBOT :
int detec_contact(int32_t SEUIL_CONTACT)
{
  int CONTACT ;
  
  ACCELERO.read();
  X_ACCEL = ACCELERO.a.x;
  Y_ACCEL = ACCELERO.a.y;
  NORME_ACCEL = (int32_t)X_ACCEL * X_ACCEL + (int32_t)Y_ACCEL * Y_ACCEL ;
  
  if(NORME_ACCEL > SEUIL_CONTACT)
  {
    CONTACT = 1 ;
  }
  else
  {
    CONTACT = 0 ;
  }
  return(CONTACT) ;
}

// DETECTION DU CHANGEMENT DE COULEUR SOL
void detec_sol()
{
  CAPTEUR_SOL.read(CAPTEURS_SOL);
  CAPTEUR_SD = CAPTEURS_SOL[1] ;
  CAPTEUR_SG = CAPTEURS_SOL[0] ;
  CAPTEUR_SC = CAPTEURS_SOL[2] ;
}

//DETECTION DES OBSTACLES
void detec_obst()
{ 
  CAPTEUR_OBS.read() ;
  CAPTEUR_GG = CAPTEUR_OBS.countsLeftWithLeftLeds() ;
  CAPTEUR_GD = CAPTEUR_OBS.countsLeftWithRightLeds() ;
  CAPTEUR_CG = CAPTEUR_OBS.countsFrontWithLeftLeds() ;
  CAPTEUR_CD = CAPTEUR_OBS.countsFrontWithRightLeds();
  CAPTEUR_DG = CAPTEUR_OBS.countsRightWithLeftLeds() ;
  CAPTEUR_DD = CAPTEUR_OBS.countsRightWithRightLeds() ;
}

//DEPLACEMENT EN LIGNE DROITE
// vitesse entre 0 et 400
// sens : 1:  sens rot à vérifier          , 0:    
// distance en nombre d'impulsions : 1m = 7500 imp modele 1(a vérifier en faisant des essais)
// distance en nombre d'impulsions : 1m = 5300 imp modele 1(a vérifier en faisant des essais)
void avancer(int VITESSE, int SENS, int DISTANCE)
{
  double  D ;
//  int CODEUR_G, CODEUR_D ;
  int VITESSE_D, ER ;
  D = 0 ;
  // 1m correspond à peu près à 7500
  if(SENS == 1) 
  {
   CODEUR_G = CODEURS.getCountsAndResetLeft();
   CODEUR_D = CODEURS.getCountsAndResetRight();
   VITESSE_D = VITESSE ;
   MOTEUR.setSpeeds(VITESSE,VITESSE);
   CODEUR_G = CODEURS.getCountsLeft();
   CODEUR_D = CODEURS.getCountsRight();
   D = (CODEUR_G + CODEUR_D)/2 ;
   ER = CODEUR_G - CODEUR_D  ;
   while(D < DISTANCE) 
     {
       CODEUR_G = CODEURS.getCountsLeft();
       CODEUR_D = CODEURS.getCountsRight();
       D = (CODEUR_G + CODEUR_D)/2 ;
       ER = CODEUR_G - CODEUR_D  ;
       VITESSE_D = VITESSE + ER*K ; 
       MOTEUR.setSpeeds(VITESSE,VITESSE_D);
     } 
   MOTEUR.setSpeeds(0,0);  
  }
  else
  {
   CODEUR_G = CODEURS.getCountsAndResetLeft();
   CODEUR_D = CODEURS.getCountsAndResetRight();
   VITESSE_D = VITESSE ;
   MOTEUR.setSpeeds(-VITESSE,-VITESSE);
   CODEUR_G = CODEURS.getCountsLeft();
   CODEUR_D = CODEURS.getCountsRight();
   D = (CODEUR_G + CODEUR_D)/2 ;
   ER = CODEUR_D - CODEUR_G  ;
   while(D > -DISTANCE) 
     {
       CODEUR_G = CODEURS.getCountsLeft();
       CODEUR_D = CODEURS.getCountsRight();
       D = (CODEUR_G + CODEUR_D)/2 ;
       ER = CODEUR_D - CODEUR_G  ;
       VITESSE_D = VITESSE + ER*K ; 
       MOTEUR.setSpeeds(-VITESSE,-VITESSE_D) ;
     }
   MOTEUR.setSpeeds(0,0); 
  }
}


// ROTATION D'UN CERTAIN ANGLE
//
void init_rot()
 {
  turnSensorSetup();
  delay(500);
  turnSensorReset();
  delay(500);
 }
 
void tourner(int ANGLE, int VITESSE)
{
  int ANGLE_M ;
  
  turnSensorReset();
  turnSensorUpdate();
  ANGLE_M = (((int32_t)turnAngle >> 16) * 360) >> 16 ;
  if(ANGLE >= 0)
  {
    MOTEUR.setSpeeds(-VITESSE,VITESSE);
    while(ANGLE_M < ANGLE )
    {
      turnSensorUpdate();
      ANGLE_M = (((int32_t)turnAngle >> 16) * 360) >> 16 ;
    }
    MOTEUR.setSpeeds(0,0); 
  }
  else
  {
    MOTEUR.setSpeeds(VITESSE,-VITESSE);
    while(ANGLE_M > ANGLE )
    {
      turnSensorUpdate();   
      ANGLE_M = (((int32_t)turnAngle >> 16) * 360) >> 16 ;
    }
    MOTEUR.setSpeeds(0,0); 
  }
  
}

//ASSERVISSEMENT VITESSE MOTEURS AVEC CORRECTEUR
// commande entre 0 et 400
//// 1m correspond à peu près à 5300 pour zumo modele 2 (a vérifier)
// 1m correspond à peu près à 7500 pour zumo modele 1 (a vérifier)
void asserv_mot(int VCONS_D, int VCONS_G)
 {
   float CODEUR_G, CODEUR_D, VCOMD, VCOMG ;
   
   if( millis() >= T )
   {
     T =  millis() + TE ;
     
     
  
     CODEUR_G = float(CODEURS.getCountsAndResetLeft())/KCAP ;
     CODEUR_D = float(CODEURS.getCountsAndResetRight())/KCAP ;
     
     ERREUR_GP = ERREUR_G ;
     ERREUR_DP = ERREUR_D ;
     ERREUR_G = CODEUR_G - VCONS_G ;
     ERREUR_D = CODEUR_D - VCONS_D ;
     ERREUR_GINT = ERREUR_GINT + ERREUR_G ;
     ERREUR_DINT = ERREUR_DINT + ERREUR_D ;
     
     VCOMG = KP*ERREUR_G + KD*(ERREUR_G - ERREUR_GP) + KI*ERREUR_GINT ;
     VCOMD = KP*ERREUR_D + KD*(ERREUR_D - ERREUR_DP) + KI*ERREUR_DINT ;
     MOTEUR.setSpeeds(int(VCOMG),int(VCOMD));  
   }
 }




//------------------------------------------------------------------
//--------------------------------------------------------------------
void setup() 
{  
  //initialisation des objets
  CAPTEUR_SOL.initThreeSensors();
  CAPTEUR_OBS.initThreeSensors();
  init_rot() ;
  // init LCD ;
  LCD.clear() ;
  // initialisation des variables
  VIT = 200 ;
  T =  millis() + TE ;
  
  ERREUR_DINT = 0 ;
  ERREUR_GINT = 0 ; 
	
}

void loop() 
{
  while(!BPB.isPressed());
   {
  delay(1000);  
  avancer(150,1,1000);
  tourner(60,200);
  avancer(150,1,1000);
   }
}
multiple definition of `__vector_9'

Such errors are usually an indication that two or more libraries are trying to use the same interrupt

What is an interruption? and how can i fix it please? Sorry i'm still a beginner

I'm guessing that both Zumo32U4Encoders and SoftwareSerial want to use Pin Change Interrupt 0. Why have you included SoftwareSerial.h? You're not even instantiating a SoftwareSerial object.

Oh yes sorry I forgot to put this in my code: SoftwareSerial HC06 (11,12); But even with I end up with the same error, how do I fix it?

It appears those two libraries are incompatible. I'm pretty sure there are other software serial libraries available, but have never used them. Maybe one of those would work. Try Google.

Better would be to use a hardware serial port. What board are you using? Does it have an extra hardware serial port available?

I use this board:

https://imgur.com/a/RKpCjCz

I have already spent 3 hours doing research on Google but I can't find any solution

Pins 0 and 1 of that board are for the hardware USART. It should be available in the Arduino IDE as Serial1.

So I should replace pins 11 and 12 by 1 and 0 is it ok?

No, you need to use Serial1 instead of the SoftwareSerial instance.