Dernière version du code avec le compteur :
const int SEUILMINNOIR = 270;
const int SEUILMAXBLANC = 70;
uint8_t stateSensor[5];
int value;
int angle;
int sensorValueMillieu = 0; // the sensor value
int sensorMinMillieu = 1023; // minimum sensor value (min seuil noir)
int sensorValueDroite2 = 0; // the sensor value
int sensorMaxDroite2 = 0; // maximum sensor value (max seuil blanc)
int CapteurDroite2 = A5;
int CapteurMillieu = A3;
int Compteur = A0;
int etat;
int nombreDeTour = 0;
int memoire_plus = HIGH;
#include <Servo.h>
Servo Direction;
#include <AFMotor.h>
AF_DCMotor motor(2, MOTOR12_64KHZ);
void setup()
{
// Ajout du compteur
pinMode(Compteur, INPUT);
Serial.begin(115200);
//Servos moteur de direction
Direction.attach(10, 1230, 1500);
// Moteur voiture
motor.setSpeed(255); // vitesse 255 max
while (millis() < 5000) {
sensorValueDroite2 = analogRead(CapteurDroite2);
sensorValueMillieu = analogRead(CapteurMillieu);
if (sensorValueMillieu < sensorMinMillieu) {
sensorMinMillieu = SEUILMINNOIR;
}
if (sensorValueDroite2 > sensorMaxDroite2) {
sensorMaxDroite2 = SEUILMAXBLANC; }
}
motor.run(FORWARD);
}
/****************Fonction readState**********************/////
void readState() {
for (uint8_t i=1; i<6; i++) // i de 1 à 5 pour les capteurs de 1 à 5 capteur 1 mis sur A1 capteur 5 sur A5
{
value = analogRead(i);
if ( value< SEUILMINNOIR ) // dans ce cas on est sur du noir
{
stateSensor[i-1]=0; // i-1 car on commence un tableau à l'index 0 ... et ici i entre 1 et 5
}
else if ( value>SEUILMAXBLANC ) // dans ce cas on est sur du blanc
{
stateSensor[i-1]=1; // à voir si il faut échanger 0 et 1 entre les deux lignes stateSensor en fonction de si on cherche du blanc ou du noir
}
else
{
// Do nothing : on est entre 70 et 270 on ne sait pas sur quel couleur on est on garde l'état précédent
}
}
}
/****************Fonction computeInput**********************/////
int8_t computeInput() {
int8_t result=0;
readState(); // appel de la fonction readState
for (int8_t i=0; i <5; i++ )
{
result = result +(i-2)*stateSensor[i];
}
return result;
}
// focntion principale
void loop() {
int8_t essai = 0;
int8_t essai2 = 0;
essai2 = abs(essai) ;
essai = computeInput();
int angle = map(essai, -3, 3, 1230, 1500);
Direction.write(angle);
int vitesse = map(essai2, 0, 3, 150, 100);
motor.setSpeed(vitesse);
etat = digitalRead(Compteur);
if((etat != memoire_plus) && (etat == LOW ))
{
nombreDeTour++;
}
memoire_plus = etat;
if(nombreDeTour >= 3)
{
motor.run(RELEASE);
}
}
il ne manquera plus qu'un essai