Bonjour, nous sommes des étudiants en première année de GEII et on est pas très bon en Arduino, on a fait un programme mais il y a plein d'erreurs qu'on arrive pas à régler, donc on vous demande votre aide
const int Capteurs_SW = 0; //Entrée des 4 switchs en face avant
const int Capt_Sol = A1; // Capteur sol sous le robot
const int Capteurs_IR1 = A2 ; //Entrée analogique capteur SHARP Gauche
const int Capteurs_IR2 = 2; //Entrée analogique capteur SHARP Centre
const int Capteurs_IR3 = A3; //Entrée analogique capteur SHARP Droit
const int ledpin = 13; //Led sur la carte YUN
const int PWMG = 10; // Signal PWM Gauche vers le pont en H
const int PWMD = 9 ; // Signal PWM Droit vers le pont en H
const int SENSG = 12; // Signal SENS Gauche vers le pont en H
const int SENSD = 11; // Signal SENS Droit vers le pont en H
const int jack = 4; // Entrer du Jack de démarrage du robot
unsigned char state; //Détermine l'état de la machine à états
#define State_1 1
#define State_2 2
#define State_3 3
#define State_4 4
unsigned char Jack_retire();
unsigned char Detect_obstacle_Devant();
void Arret_Moteur();
void Robot_Avance();
unsigned char A();
//=========================== Initialisation =========================
void setup()
{
pinMode (ledpin, OUTPUT);
pinMode (Capteurs_SW , INPUT );
pinMode (Capteurs_IR1, INPUT);
pinMode (Capteurs_IR2 , INPUT );
pinMode (Capteurs_IR3 , INPUT );
pinMode (jack , INPUT );
pinMode (SENSG, OUTPUT);
pinMode (PWMG , OUTPUT );
pinMode (SENSD, OUTPUT);
pinMode (PWMD , OUTPUT );
state = State_1;
}
//================= programme principal ===================
void loop()
{
switch(state) // Evolution de la machine à états en fonction des transitions
{
case State_1: { if (Jack_retire()==HIGH) state=State_2; break; }
case State_2: { if (Detect_obstacle_Devant()==HIGH) state=State_3; break; }
case State_3: { state=State_3; break; }
}
switch(state) // Commande des actions en fonction des états
{
case State_1: { Arret_Moteur(); break; } // arrêt des 2 moteurs
case State_2: { Robot_Avance(); break; } // Robot avance droit
case State_3: { Arret_Moteur(); break; } // arrêt des 2 moteurs
}
}
//================= Fonction Arret_Moteur ( Action) ===================
void Arret_Moteur(void)
{
analogWrite (PWMD, 0);
analogWrite (PWMD, 0);
}
//================= Fonction Robot_Avance ( Action) ===================
void Robot_Avance(void){
analogWrite (PWMD , 92 );
analogWrite (PWMG , 90 );
digitalWrite (SENSG, LOW) ; //Moteur Gauche en avant
digitalWrite (SENSD, HIGH) ; //Moteur Droit en avant
}
void droite(void){
analogWrite (PWMD , 20 );
analogWrite (PWMG , 90 );
digitalWrite (SENSG, LOW) ; //Moteur Gauche en avant
digitalWrite (SENSD, HIGH) ; //Moteur Droit en avant
}
void gauche(void){
analogWrite (PWMD , 92 );
analogWrite (PWMG , 20 );
digitalWrite (SENSG, LOW) ; //Moteur Gauche en avant
digitalWrite (SENSD, HIGH) ; //Moteur Droit en avant
}
void edroite(void){
analogWrite (PWMD , 20 );
analogWrite (PWMG , 130 );
digitalWrite (SENSG, LOW) ; //Moteur Gauche en avant
digitalWrite (SENSD, HIGH) ; //Moteur Droit en avant
}
void egauche(void){
analogWrite (PWMD , 130 );
analogWrite (PWMG , 20 );
digitalWrite (SENSG, LOW) ; //Moteur Gauche en avant
digitalWrite (SENSD, HIGH) ; //Moteur Droit en avant
}
void recule(void){
analogWrite (PWMD , 77 );
analogWrite (PWMG , 75 );
digitalWrite (SENSG, LOW) ; //Moteur Gauche en avant
digitalWrite (SENSD, HIGH) ; //Moteur Droit en avant
}
//==========================================================================
unsigned char A(void){
if (digitalRead(A2)==HIGH){
droite();
if (digitalRead(A3)==HIGH){
edroite();
delay(300);
Robot_Avance();
}
}
if (digitalRead(A3)==HIGH){
gauche();
if (digitalRead(A2)==HIGH){
recule();
delay(300);
egauche();
delay(300);
Robot_Avance();
}
}
if ((digitalRead(A2)==HIGH)&&(digitalRead(A3)==HIGH)&&(digitalRead(A4)==HIGH)){
recule();
delay(300);
egauche();
}
if((digitalRead(A2)==HIGH)&&(digitalRead(A3)==HIGH)){
edroite();
}
if((digitalRead(A4)==HIGH)&&(digitalRead(A3)==HIGH)){
egauche();
}
if (digitalRead(A4)==HIGH){
gauche();
if (digitalRead(A3)==HIGH){
egauche();
delay(300);
Robot_Avance();
}
}
if (digitalRead(A2)==HIGH){
edroite();
delay(300);
Robot_Avance();
}
if (digitalRead(A3)==HIGH){
recule();
delay(300);
egauche();
delay(300);
Robot_Avance();
}
if (digitalRead(A4)==HIGH){
egauche();
delay(300);
Robot_Avance();
}
if ((digitalRead(A4)==HIGH)&& (digitalRead(A3)==HIGH)) {
recule();
delay(300);
egauche();
delay(300);
Robot_Avance();
}
if ((digitalRead(A2)==HIGH) && (digitalRead(A3)==HIGH)){
recule();
delay(300);
edroite();
delay(300);
Robot_Avance();
}
if ((digitalRead(A3)==HIGH)&& (digitalRead(A2)==HIGH) && (digitalRead(A4)==HIGH)) {
recule();
delay(300);
egauche();
delay(300);
Robot_Avance();
}
}
//==============Fonction Jack_Retiré (Transition)====================
unsigned char Jack_retire(void) //retourne 1 si le jack est retiré
{
if(jack==LOW)return 0;
else return 1;
}
//==========================================================================//
{
if ( analogRead (Capteurs_IR2) > 100 ) return 1;
else return 0;
if (analogRead (Capteurs_IR1) > 100 ) return 1;
else return 0;
if ( analogRead (Capteurs_IR3) > 100 ) return 1;
else return 0;}