// COMPTEUR DE VITESSE POUR LE MODÉLISME FERROVIAIRE - TEST DU MONTAGE ET DU CHOIX ECHELLE ET DISTANCE - MAJ : 24_02_2023

// LES ÉCHELLES TRAITEES : N (1/160), TT (1/120), HO (1/87), 0 et 1/35.
// LA DISTANCE DE MESURE PEUT SE FAIRE SUR 20cm, 40cm, 60cm, 80cm ou 100cm

// LE CHOIX DES ÉCHELLES ET DISTANCES SE FAIT PAR BASCULE DE MICRO-SWITCHES.
// CHOIX DE L'ÉCHELLE : 5 MICRO-SWITCHES (BASCULE ON/OFF) ; DE 1/160 A 1/35 - DE GAUCHE A DROITE.
// CHOIX DE LA DISTANCE : 5 MICRO-SWITCHES (BASCULE ON/OFF) POUR LES DISTANCES - DE GAUCHE A DROITE.

// DECLARATION DES VARIABLES

#include <LiquidCrystal.h>
const uint8_t rs = 2, en = 3, d4 = 4, d5 = 5, d6 = 6, d7 = 7; // Broches pour NANO et UNO
LiquidCrystal lcd (rs, en, d4, d5, d6, d7);

const int Echelle_160 = 8;
const int Echelle_120 = 9;
const int Echelle_87 = 10;
const int Echelle_45 = 11;
const int Echelle_32 = 12;
int Echelle_Choisie;

const int Distance_20cm = 18;
const int Distance_40cm = 17;
const int Distance_60cm = 16;
const int Distance_80cm = 15;
const int Distance_100cm = 14;
int Distance_Choisie;

void setup()
{
  pinMode (Echelle_160, INPUT);
  pinMode (Echelle_120, INPUT);
  pinMode (Echelle_87, INPUT);
  pinMode (Echelle_45, INPUT);
  pinMode (Echelle_32, INPUT);

  digitalWrite (Echelle_160, LOW);
  digitalWrite (Echelle_120, LOW);
  digitalWrite (Echelle_87, LOW);
  digitalWrite (Echelle_45, LOW);
  digitalWrite (Echelle_32, LOW);

  pinMode (Distance_20cm, INPUT);
  pinMode (Distance_40cm, INPUT);
  pinMode (Distance_60cm, INPUT);
  pinMode (Distance_80cm, INPUT);
  pinMode (Distance_100cm, INPUT);

  digitalWrite (Distance_20cm, LOW);
  digitalWrite (Distance_40cm, LOW);
  digitalWrite (Distance_60cm, LOW);
  digitalWrite (Distance_80cm, LOW);
  digitalWrite (Distance_100cm, LOW);

  lcd.begin (16,2);
  lcd.clear();
}

void loop()
{
  Test_Choix_Echelle();
}


void Test_Choix_Echelle()
{

  Echelle_Choisie = digitalRead (Echelle_160);
  if ( Echelle_Choisie == HIGH )  { lcd.clear(); lcd.setCursor (0,0);  lcd.print ("ECHELLE : 1/160");}

  Echelle_Choisie = digitalRead (Echelle_120);
  if ( Echelle_Choisie == HIGH )  { lcd.clear(); lcd.setCursor (0,0);  lcd.print ("ECHELLE : 1/120"); }

  Echelle_Choisie = digitalRead (Echelle_87);
  if ( Echelle_Choisie == HIGH )  { lcd.clear(); lcd.setCursor (0,0);  lcd.print ("ECHELLE : 1/87"); }

  Echelle_Choisie = digitalRead (Echelle_45);
  if ( Echelle_Choisie == HIGH )  { lcd.clear(); lcd.setCursor (0,0);  lcd.print ("ECHELLE : 1/45"); }

  Echelle_Choisie = digitalRead (Echelle_32);
  if ( Echelle_Choisie == HIGH )  { lcd.clear(); lcd.setCursor (0,0);  lcd.print ("ECHELLE : 1/32"); }

  Test_Distance_De_Mesure();
}
  
void Test_Distance_De_Mesure()
{
  Distance_Choisie = digitalRead (Distance_20cm);
  if ( Distance_Choisie == HIGH )  { lcd.setCursor (0,1);  lcd.print ("DISTANCE : 20cm"); }
  
  Distance_Choisie = digitalRead (Distance_40cm);
  if ( Distance_Choisie == HIGH )  { lcd.setCursor (0,1);  lcd.print ("DISTANCE : 40cm"); }
  
  Distance_Choisie = digitalRead (Distance_60cm);
  if ( Distance_Choisie == HIGH )  { lcd.setCursor (0,1);  lcd.print ("DISTANCE : 60cm"); }
  
  Distance_Choisie = digitalRead (Distance_80cm);
  if ( Distance_Choisie == HIGH )  { lcd.setCursor (0,1);  lcd.print ("DISTANCE : 80cm"); }
  
  Distance_Choisie = digitalRead (Distance_100cm);
  if ( Distance_Choisie == HIGH )  { lcd.setCursor (0,1);  lcd.print ("DISTANCE : 100cm"); }

  delay (1000);
  Test_Choix_Echelle();
}
