/* attiny_bloc_auto_lumineux_Florent-V2
20/01/2024
Dominique Hudry
simplification du code "attiny_bloc_auto_lumineux_Florent"
liens : http://ptitrain.cd1.free.fr/liens/faq/faq_balbid.htm
https://wokwi.com/projects/387626206249997313
animation des feux (masse commune) lors du passage d'un train.
-utilise un capteur produisant un niveau HIGH quand détection et LOW au repos.
- le temps d'allumage des feux jaune et rouge est ajustable.
Brochage Attiny85
5 =| 1 U 8 |= VCC
CapteurPin -->3 =| 2 7 |= 2--> LedVerte
PotPin -->A2 =| 3 6 |= 1--> LedJaune
GND =| 4 5 |= 0--> LedRouge
*/
const byte CapteurPin = 3; // Broche utilisée avec le capteur
const byte PotPin = A2; // Broche pour le potentiomètre
const byte LedVerte = 2; // Broche pour la LED verte
const byte LedJaune = 1; // Broche pour la LED jaune
const byte LedRouge = 0; // Broche pour la LED rouge
const int TemporisationMin = 5000; // Temporisation minimale (5 secondes)
const int TemporisationMax = 20000; // Temporisation maximale (20 secondes)
enum { Vert, Jaune, Rouge };
void setup() {
pinMode(CapteurPin, INPUT_PULLUP);
pinMode(LedVerte, OUTPUT);
pinMode(LedJaune, OUTPUT);
pinMode(LedRouge, OUTPUT);
}
void loop() {
int temporisation = map(analogRead(PotPin), 0, 1023, TemporisationMin, TemporisationMax);
// pas de détection, LED verte allumée
while (digitalRead(CapteurPin) == LOW) {
allumeFeu(Vert);
}
// détection, le feu passe au rouge puis au jaune puis revient au vert
allumeFeu(Rouge);
delay(temporisation);
allumeFeu(Jaune);
delay(temporisation);
}
void allumeFeu(const byte couleur) {
// Éteindre toutes les LEDs
digitalWrite(LedVerte, LOW);
digitalWrite(LedJaune, LOW);
digitalWrite(LedRouge, LOW);
// Allumer la LED nécessaire
switch (couleur) {
case Vert:
digitalWrite(LedVerte, HIGH);
break;
case Jaune:
digitalWrite(LedJaune, HIGH);
break;
case Rouge:
digitalWrite(LedRouge, HIGH);
break;
}
}