//#include <Servo.h>
// Déclaration de constantes et variables
const int Detect1 = A0; // Détection 1 branchée sur l'entée A0
const int Detect2 = A1; // Détection 2 branchée sur l'entée A1
const int feu_droit = 8; // Première paire de feux
const int feu_gauche = 9; // Deuxième paire de feux
//const int pulse_dfplayer = 11;
//const int barriere1 = 4; // Fil signal servo1
//const int barriere2 = 5; // Fil signal Servo2
//int tempo_fermeture = 4000; // temps clignotement avant fermeture barrières
int tempo_led = 500; // tempo cligno
//int angle_fermeture = 0; // angle servo position fermée
//int angle_ouverture = 80; // angle servo position ouverte
//int vitesse_barriere = 70; // temps entre 2 degrés
int inhibition = 10000; // Pendant cette durée le PN ne peut pas se redéclencher
//int angle_barriere;
//Servo servo1;
//Servo servo2;
unsigned long compteur_temps;
boolean etat_feux = false; // Variable 0 si leds éteintes et 1 si allumées
int valeur_Detect1 = 1023; // Détecteur 1 ( + de 512 pas de détection. - de 512 détection.)
int valeur_Detect2 = 1023; // Détecteur 2
int premiere_detection = 0; // 1 si détecteur1 en premier, 2 si détecteur2 en premier.
boolean detection = false; // 0 si pas de détection. 1 si train détecté.
//boolean barriere_ouverte; // 1 si barrières ouvertes.
void setup() {
pinMode(feu_droit,OUTPUT);
pinMode(feu_gauche,OUTPUT);
//pinMode(pulse_dfplayer,OUTPUT);
//digitalWrite(pulse_dfplayer,HIGH);
pinMode(Detect1, INPUT);
pinMode(Detect2, INPUT);
//servo1.attach(barriere1,500,2500);
//servo2.attach(barriere2,500,2500);
//servo1.write(angle_ouverture); //ouverture au début
//servo2.write(angle_ouverture);
//barriere_ouverte = true;
}
void loop() {
valeur_Detect1 = analogRead(Detect1);
valeur_Detect2 = analogRead(Detect2);
if (detection == 1 && premiere_detection == 0) {
if (valeur_Detect1 > 512 && valeur_Detect2 > 512) {
digitalWrite(feu_droit,LOW);
digitalWrite(feu_gauche,LOW);
//for (int angle_barriere=angle_fermeture; angle_barriere<=angle_ouverture; angle_barriere+=1){ //OUVERTURE BARRIERES
//servo1.write(angle_barriere);
//servo2.write(angle_barriere);
//delay(vitesse_barriere);
//}
//barriere_ouverte = true;
detection = 0;
//digitalWrite(feu_droit,LOW);
//digitalWrite(feu_gauche,LOW);
delay(inhibition);
}
}
// Permet de savoir quel détecteur est passé à l'état bas en premier
if (detection == false) {
// détection d'un train
if (valeur_Detect1 < 512 || valeur_Detect2 < 512) {
detection = true;
//digitalWrite(pulse_dfplayer,LOW);
delay(100);
//digitalWrite(pulse_dfplayer,HIGH);
// Mise en mémoire du détecteur.
if (valeur_Detect1 < 512) {
premiere_detection = 1;
}
else {
premiere_detection = 2;
}
}
}
// Un train est détecté.
else {
Fonction_feux(); // Appel de la fonction qui gère les feux
//if (barriere_ouverte == true) {
//for (int tempo = 0; tempo <= tempo_fermeture; tempo +=1){ // Temporisation avant fermeture
//Fonction_feux(); // Appel de la fonction qui gère les feux
//delay(1);
//}
//for (int angle_barriere=angle_ouverture; angle_barriere>=angle_fermeture; angle_barriere-=1){ //FERMETURE BARRIERES
//servo1.write(angle_barriere);
//servo2.write(angle_barriere);
//Fonction_feux(); // Appel de la fonction qui gère les feux
//delay(vitesse_barriere); // Vitesse angle barrière
//}
//barriere_ouverte = false;
//}
if (premiere_detection == 1) {
if (valeur_Detect2 < 512) {
premiere_detection = 0;;
}
}
if (premiere_detection == 2) { // Si non c'est que c'est le 2eme capteur
if (valeur_Detect1 < 512) {
premiere_detection = 0;
}
}
}
delay(50);
}
void Fonction_feux() {
if (millis() > compteur_temps + tempo_led) {
compteur_temps = millis();
if (etat_feux == false) {
etat_feux = true;
digitalWrite(feu_droit,HIGH);
digitalWrite(feu_gauche,HIGH);
}
else {
etat_feux = false;
digitalWrite(feu_droit,LOW);
digitalWrite(feu_gauche,LOW);
}
}
}