Projet

Général

Profil

Robot agricole de désherbage » robot_désherbage_programme.ino

Jean-Baptiste Bonnemaison, 26/03/2020 15:15

 
#include <Servo.h>
int pinLum[3] = {A0, A1, A2}; //Entrée capteur de luminosité
int reaction[3] = {0, 0, 0}; //Entrée réponse capteur de luminosité

const unsigned long BLINK_INTERVAL_ROUE = 1000;
const unsigned long BLINK_INTERVAL_CAPTEUR = 1;

void setup()
{
Serial.begin(9600);
}

void loop()
{
if (activation() == 1)//condition activation du programme principale
{
for (int i = 0; i == 0; i)
{
Marche_avant_roue();
Capteur_securite();
if (Distance() == 1)
{
Marche_arriere_roue();
Tourne_bitch();
if (extinction() == 1)
{
Arret_roue();
i++;
}
}
else if(extinction() == 1)
{
Arret_roue();
i++;
}
}
}
}

int activation()
{
int nb1;
int pinTactil1 = 12;//pin ENTREE PAVE TACTILE
pinMode(pinTactil1, INPUT);//Entée pavé Tactile 1

nb1 = digitalRead(pinTactil1);
return (nb1);
}

int extinction()
{
int pinTactil4 = 9;
int arret;

pinMode(pinTactil4, INPUT);
arret = digitalRead(pinTactil4);
return arret;
}

void Marche_avant_roue()
{
static unsigned long previousMillisLed1 = 0;
static byte sensMoteur = LOW;

unsigned long currentMillis = millis();

int ENA = 5;//pin Sortie ENA
int IN1 = 2;//pin Sortie IN1
int IN2 = 3;//pin Sortie IN2
int ENB = 6;//pin Sortie ENB
int IN3 = 4;//pin Sortie IN3
int IN4 = 7;//pin Sortie IN4

int puissanceMax=255;

int puissanceMoteur = puissanceMax;

//Sortie driver
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

if (currentMillis - previousMillisLed1 >= BLINK_INTERVAL_ROUE)
{
previousMillisLed1 = currentMillis;
/*puissanceMoteur = 0;

sensMoteur = !sensMoteur;
puissanceMoteur = puissanceMax;*/
}

//Valeur Sortie driver
digitalWrite(IN1, sensMoteur);
digitalWrite(IN2, !sensMoteur);
digitalWrite(IN3, !sensMoteur);
digitalWrite(IN4, sensMoteur);

analogWrite(ENB, puissanceMoteur);
analogWrite(ENA, puissanceMoteur);
}

void Marche_arriere_roue()
{
static byte sensMoteur = LOW;
int ENA = 5;//pin Sortie ENA
int IN1 = 2;//pin Sortie IN1
int IN2 = 3;//pin Sortie IN2
int ENB = 6;//pin Sortie ENB
int IN3 = 4;//pin Sortie IN3
int IN4 = 7;//pin Sortie IN4

int puissanceMax=255;

int puissanceMoteur = puissanceMax;

//Sortie driver
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

analogWrite(ENB, 0);
analogWrite(ENA, 0);
//Valeur Sortie driver
digitalWrite(IN1, !sensMoteur);
digitalWrite(IN2, sensMoteur);
digitalWrite(IN3, sensMoteur);
digitalWrite(IN4, !sensMoteur);

analogWrite(ENB, puissanceMoteur);
analogWrite(ENA, puissanceMoteur);

delay(1000);
}

void Arret_roue()
{
int ENA = 5;//pin Sortie ENA
int ENB = 6;//pin Sortie ENB

pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);

//Extinction moteur
digitalWrite(ENA, LOW);
digitalWrite(ENB, LOW);
}

int Distance()
{
int pinTrigger = 10;
int pinEcho = 11;
int result;

pinMode(pinTrigger, OUTPUT);
pinMode(pinEcho, INPUT);
digitalWrite(pinTrigger, LOW);

digitalWrite(pinTrigger, HIGH);
delayMicroseconds(10);
digitalWrite(pinTrigger, LOW);
long lectureEcho = pulseIn(pinEcho, HIGH);
long mesure = lectureEcho / 58;
if (mesure < 20)
{
result = 1;
}
else
{
result = 0;
}
return result;
}

int Capteur_securite()
{
int situation;
static unsigned long previousMillis2 = 0;

unsigned long currentMillis = millis();
if (currentMillis - previousMillis2 >= BLINK_INTERVAL_CAPTEUR )
{
previousMillis2 = currentMillis;

if (extinction() == 1 || Distance() == 1)
{
Arret_roue();
situation = 1;
return situation;
}
}
}

void Tourne_bitch()
{
static byte sensMoteur = LOW;

int ENA = 5;//pin Sortie ENA
int IN1 = 2;//pin Sortie IN1
int IN2 = 3;//pin Sortie IN2
int ENB = 6;//pin Sortie ENB
int IN3 = 4;//pin Sortie IN3
int IN4 = 7;//pin Sortie IN4

int puissanceMax=255;

int puissanceMoteur = puissanceMax;

//Sortie driver
pinMode(ENA, OUTPUT);
pinMode(ENB, OUTPUT);
pinMode(IN1, OUTPUT);
pinMode(IN2, OUTPUT);
pinMode(IN3, OUTPUT);
pinMode(IN4, OUTPUT);

//Valeur Sortie driver
digitalWrite(IN1, !sensMoteur);
digitalWrite(IN2, sensMoteur);
digitalWrite(IN3, !sensMoteur);
digitalWrite(IN4, sensMoteur);

analogWrite(ENB, puissanceMoteur);
analogWrite(ENA, puissanceMoteur);
delay(1000);
}
    (1-1/1)