/* attiny bloc auto lumineux8
28/04/2024
Dominique Hudry
Simulation d'un BAL fictif pour réseau de train
liens: http://ptitrain.cd1.free.fr/liens/faq/faq_balbid.htm
https://forum.arduino.cc/index.php?topic=257939.0
https://wokwi.com/projects/396413306686529537
Brochage ATiny85
=|1 U 8|= VCC
Capteur -->3 =|2 7|= 2--> LedVerte
PotPin -->A2 =|3 6|= 1--> LedJaune
GND =|4 5|= 0--> LedRouge
*/
#include "simpleBouton.h"
const byte LedVerte = 2;
const byte LedJaune = 1;
const byte LedRouge = 0;
const byte PotPin = A2; // Broche pour le potentiomètre
const unsigned int TemporisationMin = 10000; // Temporisation minimale en ms
const unsigned int TemporisationMax = 40000; // Temporisation maximale en ms
unsigned long debut_tempo;
simpleBouton Capteur(3);
void setup() {
pinMode(LedVerte, OUTPUT); // Leds en sortie
pinMode(LedJaune, OUTPUT);
pinMode(LedRouge, OUTPUT);
digitalWrite(LedVerte, HIGH); // seule la Led verte est allumée
delay(1000);
} // fin setup
void loop() {
unsigned int temporisation = map(analogRead(PotPin), 0, 1023, TemporisationMin, TemporisationMax);
unsigned int tempo1 = temporisation;
unsigned int tempo2 = temporisation * 2;
Capteur.actualiser();
if (Capteur.vientDEtreRelache()) {
digitalWrite(LedVerte, LOW);
digitalWrite(LedJaune, LOW);
digitalWrite(LedRouge, HIGH); // alors Led rouge allumée
debut_tempo = millis(); // et on initialise debut_tempo
}
if (digitalRead(LedRouge) || digitalRead(LedJaune)) { // si la Led rouge ou jaune est allumée
if (millis() - debut_tempo >= tempo1) { // et si l'écart est > ou = à la tempo1
digitalWrite(LedRouge, LOW); // alors la Led rouge s'éteint
digitalWrite(LedJaune, HIGH); // et la Led jaune s'allume
}
if (millis() - debut_tempo >= tempo2) { // et si l'écart est > ou = à la tempo2
digitalWrite(LedJaune, LOW); // alors la Led jaune s'éteint
digitalWrite(LedVerte, HIGH); // et la Led verte s'allume
}
}
} // fin loop