/* 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;
  }
}
ATTINY8520PU