|
#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);
|
|
}
|