// VERSION NUMÉRIQUE V2
// MAJ 28-03-2022
// Utilisation d'un BM1 -  ATtiny85 - Internal 8MHz

// ATTINY85
// BROCHE N° 1 > RESET - A LAISSER LIBRE
// BROCHE N° 2 > POTENTIOMÈTRE 1 - TEMPS DE STATIONNEMENT   	> VALEUR A3 POUR LE CODE
// BROCHE N° 3 > POTENTIOMÈTRE 2 - DÉLAIS APRES CONTACT ILS 	> VALEUR A2 POUR LE CODE
// BROCHE N° 4 > GND
// BROCHE N° 5 > COMMANDE MA/AT (MA SI +5V, AT SI GND)		> VALEUR 0 POUR LE CODE
// BROCHE N° 6 > SORTIE COMMANDE DU RELAIS VIA 2N2222       	> VALEUR 1 POUR LE CODE
// BROCHE N° 7 > CONTACT ILS - ACTIF SI À GND               	> VALEUR 2 POUR LE CODE
// BROCHE N° 8 > PLUS ALIMENTATION

// Lorsque la broche 6 est "HIGH", le transistor 2N2222 est passant et le relais "colle" et fait "shunt" les bornes du BM1 ;  le train repart.

// DÉCLARATION DES VARIABLES / BROCHES
// INTERRUPTEUR MARCHE/ARRÊT
const int Inter_Marche_Arret = 0; // BROCHE 5 - Arrêt de l'animation si au moins
int Etat_Inter_Marche_Arret;

// DÉTECTION PAR ILS
const int ILS = 2; // BROCHE 7 - Détection si au moins
long Etat_ILS;

// CONTROLE DISTANCE DE RÉACTION AVEC ILS
const int Potentiometre_Temps_Depuis_ILS = A2; // BROCHE 3
long Valeur_Temps_Depuis_ILS = 0;

// CONTROLE TEMPS DE STATIONNEMENT -  "unsigned long" pour la valeur du temps de stationnement (120 000 ms)
const int Potentiometre_Temps_Stationnement = A3; // BROCHE 2
unsigned long Valeur_Temps_Stationnement;

// RELAIS SHUNT DU BM1
const int Relais_Shunt_BM1 = 1; // BROCHE 6

void setup()
{
	pinMode (Inter_Marche_Arret, INPUT);
	pinMode (ILS, INPUT);
	pinMode (Potentiometre_Temps_Depuis_ILS, INPUT)
	pinMode (Potentiometre_Temps_Stationnement, INPUT);
 	pinMode(Relais_Shunt_BM1, OUTPUT);
  	digitalWrite(Relais_Shunt_BM1, LOW);
}

void loop()
{
// SHUNT DU BM1 – LE TRAIN ROULE NORMALEMENT
	digitalWrite(Relais_Shunt_BM1, LOW);

  // TEST SUR LA POSITION DE L'INVERSEUR MA/AT
	do { Etat_Inter_Marche_Arret = digitalRead (Inter_Marche_Arret); }
	while (Etat_Inter_Marche_Arret == HIGH);

  // TEST SUR L'ACTIVATION OU NON DE L'ILS
	do { Etat_ILS = digitalRead (ILS); }
	while (Etat_ILS == HIGH);

  // TEMPS AVANT ACTIVATION DU BM1 POUR ARRÊT (RÉGLABLE ENTRE 0s ET 20s)
	Valeur_Temps_Depuis_ILS = analogRead (Potentiometre_Temps_Depuis_ILS);
	Valeur_Temps_Depuis_ILS = (20 * Valeur_Temps_Depuis_ILS);
	delay (Valeur_Temps_Depuis_ILS);
  
// LE BM1 EST LIBERE – LE TRAIN S’ARRETE  
	digitalWrite(Relais_Shunt_BM1, HIGH);

  // TEMPS DE STATIONNEMENT (RÉGLABLE ENTRE 5s ET 120s)
	Valeur_Temps_Stationnement = analogRead (Potentiometre_Temps_Stationnement);
	Valeur_Temps_Stationnement = (120 * Valeur_Temps_Stationnement);
	delay (Valeur_Temps_Stationnement);

  // Temps d'arrêt mini si le potentiomètre est lui-même au mini
	delay (5000);
}
