Voici le code actuel utilisé par le robot, je vous rappelle que se sont mes premières lignes de code, alors merci de votre indulgence. Le code est à améliorer, mais pour le moment c'est celui là!
// prog robot IBT 009 007 + parechoc
#include <Servo.h>
#include "Ultrasonic.h"
#include <Time.h>
const int RL_EN=6;
const int PWM1D=5;
const int PWM2D=4;
const int PWM1G=3;
const int PWM2G=2;
const int BRUSHLESS=7;
const int APPUI=0; // constante état du BP - appui sur niveau bas
const int PAS_APPUI=1; // constante état du BP - relâché sur niveau haut
const int BP=1; //declaration constante de broche
int ETAT_BP; // variable d'état du bouton poussoir
int vit_lame=1601; //acceleration lames vitesse max à 2200 et mini à 1600
int dist_lateral=35;
int dist_face=25;
int X=0;
long Temp_Reference_avance;
long Temp_Reference_recul;
long Temp_Reference_droite;
long Temp_Reference_gauche;
long delai_avance=40000; //60000=1minute
long delai_recul=15000;
long delai_droite=15000;
long delai_gauche=15000;
Servo cont_brushless;
#define TRIG_PIN_A 8
#define ECHO_PIN_B 9
Ultrasonic OurModule_G(TRIG_PIN_A, ECHO_PIN_B);
#define TRIG_PIN_C 10
#define ECHO_PIN_D 11
Ultrasonic OurModule_M(TRIG_PIN_C, ECHO_PIN_D);
#define TRIG_PIN_E 12
#define ECHO_PIN_F 13
Ultrasonic OurModule_D(TRIG_PIN_E, ECHO_PIN_F);
void setup()
{
pinMode(BP, INPUT); //met la broche en entree
digitalWrite(BP, HIGH) ; // activation du pullup de la broche en entrée
cont_brushless.attach(BRUSHLESS);
pinMode(BRUSHLESS, OUTPUT);
Temp_Reference_avance=millis();
Temp_Reference_recul=millis();
Temp_Reference_droite=millis();
Temp_Reference_gauche=millis();
//lancement de la coupe
delay (5000);
ROB_CUT_ON();
delay (7000);
pinMode(RL_EN, OUTPUT);
pinMode(PWM1D, OUTPUT);
pinMode(PWM2D, OUTPUT);
pinMode(PWM1G, OUTPUT);
pinMode(PWM2G, OUTPUT);
digitalWrite(RL_EN, HIGH);
AVANCE();
delay (500);
}
void loop()
{
AVANCE();
while ( (OurModule_D.Ranging(CM)) < dist_lateral & (OurModule_D.Ranging(CM)) < (OurModule_G.Ranging(CM)))
{
droite();
delay(100);
while ( (OurModule_M.Ranging(CM)) < dist_face )
{
recul();
delay(100);
}
}
while ( (OurModule_G.Ranging(CM)) < dist_lateral & (OurModule_G.Ranging(CM)) < (OurModule_D.Ranging(CM)))
{
gauche();
delay(100);
while ( (OurModule_M.Ranging(CM)) < dist_face )
{
recul();
delay(100);
}
}
while ( (OurModule_M.Ranging(CM)) < dist_face )
{
recul();
delay(100);
}
}
void AVANCE()
{
analogWrite(PWM1D,255);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,255);
ETAT_BP=digitalRead(BP); // lit l'état du BP et met la valeur 0/1 dans la variable
if (ETAT_BP==APPUI)
{ // si l'état du BP est appuyé (càd si variable état BP = 0)
recul();
delay(100);
}
else
{ // sinon (càd si variable état bp=1)
}
if (millis()>(Temp_Reference_avance+delai_avance))
{
recul();
delay(100);
Temp_Reference_avance=Temp_Reference_avance+delai_avance;
}
}
void droite()
{
analogWrite(PWM1D,200);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,0);
ETAT_BP=digitalRead(BP); // lit l'état du BP et met la valeur 0/1 dans la variable
if (ETAT_BP==APPUI)
{ // si l'état du BP est appuyé (càd si variable état BP = 0)
recul();
delay(100);
}
else
{ // sinon (càd si variable état bp=1)
}
}
void gauche()
{
analogWrite(PWM1D,0);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,200);
ETAT_BP=digitalRead(BP); // lit l'état du BP et met la valeur 0/1 dans la variable
if (ETAT_BP==APPUI)
{ // si l'état du BP est appuyé (càd si variable état BP = 0)
recul();
delay(100);
}
else
{ // sinon (càd si variable état bp=1)
}
}
void recul()
{
if (X==0)
{
analogWrite(PWM1D,0);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,0);
delay(200);
analogWrite(PWM1D,70);
analogWrite(PWM2D,140);
analogWrite(PWM1G,140);
analogWrite(PWM2G,0);
delay(700);
analogWrite(PWM1D,70);
analogWrite(PWM2D,140);
analogWrite(PWM1G,0);
analogWrite(PWM2G,0);
delay(550);
X=1;
}
else
{
analogWrite(PWM1D,0);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,0);
delay(200);
analogWrite(PWM1D,70);
analogWrite(PWM2D,140);
analogWrite(PWM1G,140);
analogWrite(PWM2G,0);
delay(700);
analogWrite(PWM1D,0);
analogWrite(PWM2D,0);
analogWrite(PWM1G,140);
analogWrite(PWM2G,0);
delay(550);
X=0;
}
analogWrite(PWM1D,0);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,0);
delay(150);
if (millis()>(Temp_Reference_recul+delai_recul))
{
analogWrite(PWM1D,0);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,0);
delay(200);
analogWrite(PWM1D,175);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,175);
delay(1050);
analogWrite(PWM1D,0);
analogWrite(PWM2D,0);
analogWrite(PWM1G,0);
analogWrite(PWM2G,0);
delay(50);
Temp_Reference_recul=Temp_Reference_recul+delai_recul;
}
}
void ROB_CUT_ON() //demarrage de la coupe
{
cont_brushless.writeMicroseconds(1470); // génère initialisation du controleur
delay (2000); //attente de 2 secondes pour initialisation du controleur
int robcuton;
for(robcuton = 1470 ; robcuton <= vit_lame; robcuton+=1) //acceleration vitesse max à 2200 et mini à 1600
{
cont_brushless.writeMicroseconds(robcuton);
}
delay(3000);
cont_brushless.writeMicroseconds((robcuton-19)); //-15 pas de changement ** -21 bien **-24 arret moteur
}
enfin un projet avec le code !!!! ;-)