//***********************************************************************************************//
// Programme pour Arduino NANO
// Controle des aiguillages avec un L298N
// Un bouton poussoir est branché avec PULLUP sur le broche 2
// Deux LEDS sont montées tête-bêche sur le Pin 12 pour signaler le sens de passage
// La variable boutStae permet de connaitre l'état près appui
// la librairie Bounce2 permet d'élimoiner les rebonds
// Programme écrit par Denis le 23/10.2025 en utilsant tempo
//***********************************************************************************************//
// LIBRAIRIES
#include <Bounce2.h>
// DECLARATION
#define bp1 2
#define bp2 6
int bout1State = LOW ;
int bout2State = LOW ;
// LEDS SIGNALISATION
const int signalisationA = 12 ;
const int signalisationB = 11 ;
const int signalisationABarre = 10 ;
const int signalisationBBarre = 9 ;
// Moteur A aiguille coté extérieur
// le jumper EN1 est en place sur le carter L298N
#define in1 8
#define in2 7
#define in3 5
#define in4 4
int in1 = LOW ;
int in2 = LOW ;
// Moteur B aiguille coté intérieur
// le jumper EN2 est en place sur le carter L298N
int in3 = LOW ;
int in4 = LOW ;
const char Titre [] = "CMDE_Double_Aiguille_KATO_debounce_et_tempo";
const char Version[] = "4";
const char derModif[] = "23/10/2025";
// paramètres <outils.h>
const int nb_tempo = 5 ; // nombre de tempos utilisées + 1
const int nb_FM =1 ; // nombre de FM utilisé + 1
const int nb_visu = 6 ; // nombre de visu utilisées + 1
// INSTANCE BOUTONS POUSSOIRS
Bounce bt1 = Bounce();
Bounce bt2 = Bounce();
enum ModeEtat {ETAT_OFF1,ETAT_DIRECT,ETAT_OFF2,ETAT_TOURNE};
ModeEtat etatAiguille = ETAT_OFF1;
void setup() {
pinMode(signalisationA, OUTPUT);
pinMode(signalisationB, OUTPUT);
pinMode(signalisationABarre, OUTPUT);
pinMode(signalisationBBarre, OUTPUT);
pinMode(in1, OUTPUT);
pinMode(in2, OUTPUT);
pinMode(in3, OUTPUT);
pinMode(in4, OUTPUT);
// put your setup code here, to run once:
digitalWrite(signalisationA, LOW);
digitalWrite(signalisationB, HIGH);
}
void loop() {
switch (etatAiguille) {
case ETAT_OFF1:
digitalWrite(in1 = LOW) ;
digitalWrite(in2 = LOW) ;
break;
case ETAT_DIRECT:
// do something when var equals 2
break;
case ETAT_OFF2:
// if nothing else matches, do the default
// default is optional
break;
case ETAT_TOURNE:
// do something when var equals 2
break;
}
}