// Ce programme est un signal de B.A.L lie a un canton
// Il utilise deux detecteurs d'occupation signal LOW si occupe
// Christian BEZANGER - Juillet 2022 - Domaine public
// Signal a cathodes communes mais signal a anodes communes possible
//

#define vert 0
#define rouge 1
#define orange 2
#define detecteurCanton 3
#define detecteurCantonSuivant 4
#define ledON HIGH  // LOW si signal a anodes communes
#define ledOFF LOW  // HIGH si signal a anodes communes

boolean etatCanton=false;
boolean etatCantonSuivant=false;

void setup()
{
  pinMode(vert, OUTPUT);
  pinMode(rouge, OUTPUT);
  pinMode(orange, OUTPUT);
  pinMode(detecteurCanton, INPUT_PULLUP);
  pinMode(detecteurCantonSuivant, INPUT_PULLUP);
  digitalWrite(vert, ledOFF);
  digitalWrite(rouge, ledOFF);
  digitalWrite(orange, ledOFF);
}

void loop()
{
  // Lecture des detecteurs
  if(digitalRead(detecteurCanton)==HIGH) {
    etatCanton = false;
  }
  if(digitalRead(detecteurCanton)==LOW) {
    etatCanton = true;
  }
  if(digitalRead(detecteurCantonSuivant)==HIGH) {
    etatCantonSuivant = false;
  }
  if(digitalRead(detecteurCantonSuivant)==LOW) {
    etatCantonSuivant = true;
  }
     
  // Traitement des données
     if(!etatCanton && !etatCantonSuivant) {
       digitalWrite(orange, ledOFF);
       digitalWrite(rouge, ledOFF);
       digitalWrite(vert, ledON);
     }
     if(etatCanton && !etatCantonSuivant) {
       digitalWrite(vert, ledOFF);
       digitalWrite(orange, ledOFF);
       digitalWrite(rouge, ledON);
     }
     if(etatCanton && etatCantonSuivant) {
       digitalWrite(vert, ledOFF);
       digitalWrite(orange, ledOFF);
       digitalWrite(rouge, ledON);
     }
     if(!etatCanton && etatCantonSuivant) {
       digitalWrite(vert, ledOFF);
       digitalWrite(rouge, ledOFF);
       digitalWrite(orange, ledON);
     }
  // Fin de programme   
}
ATTINY8520PU
tiny:PB5
tiny:PB3
tiny:PB4
tiny:GND
tiny:PB0
tiny:PB1
tiny:PB2
tiny:VCC
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
r1:1
r1:2
sw1:1
sw1:2
sw1:3
sw2:1
sw2:2
sw2:3