/*arduino voies Kato V5
05/03/2025
Dominique Hudry
commande d'aiguillages Kato pour sélectionner une voie parmis trois.
lien: https://wokwi.com/projects/400791357235664897
aig1
---o---------------voie1 vert
\ aig2
\---o---------voie2 bleu
\
\---.---voie3 jaune
L293D
+5V--Enable1 =|1 U 16|= +5V
CdeInput1--> Input1 =|2 15|= Input4 <--CdeInput4
Output1 =|3 14|= Output4
GND =|4 13|= GND
GND =|5 12|= GND
Output2 =|6 11|= Output3
CdeInput2--> Input2 =|7 10|= Input3 <--CdeInput3
+V aiguilles--VS =|8 9|= Enable2--+5V
Output1 et Output2 sont branchées sur la bobine de l'aiguillage1
Output3 et Output4 sont branchées sur la bobine de l'aiguillage2
voie aig1 aig2 CdeInput1 CdeInput2 CdeInput3 CdeInput4 led allumée
1 droit X pulse HIGH LOW LOW LOW LedVoie1 vert
2 dévié dévié LOw pulse HIGH LOw pulse HIGH LedVoie2 bleu
3 dévié droit LOw pulse HIGH pulse HIGH LOW LedVoie3 jaune
*/
#include "simpleBouton.h"
// Définition des broches
const byte BPvoie[3] = {10, 11, 12};
const byte LedVoie[3] = {2, 3, 4};
const byte CdeInput[4] = {5, 6, 7, 8};
const byte DureeImpulsion = 20;
// Constantes pour les voies
const byte Voie1 = 1;
const byte Voie2 = 2;
const byte Voie3 = 3;
#include "simpleBouton.h"
// Initialisation des boutons
simpleBouton bouton[3] = {simpleBouton(BPvoie[0]), simpleBouton(BPvoie[1]), simpleBouton(BPvoie[2])};
void setup() {
// Configuration des broches en sortie pour les commandes et les LEDs
for (byte i = 0; i < 4; i++) {
pinMode(CdeInput[i], OUTPUT);
digitalWrite(CdeInput[i], LOW); // Initialisation des broches en LOW
}
for (byte i = 0; i < 3; i++) {
pinMode(LedVoie[i], OUTPUT);
digitalWrite(LedVoie[i], HIGH); // Allumage des LEDs pdt 500ms pour test
}
delay(500);
eteindreToutesLesLeds(); // Éteindre les LEDs après l'initialisation
selectionnerVoie(Voie1); // La voie1 est sélectionnée
}
void loop() {
for (byte i = 0; i < 3; i++) {
bouton[i].actualiser();
if (bouton[i].vientDEtreEnfonce()) {
selectionnerVoie(i + 1); // i + 1 pour correspondre aux voies 1, 2, 3
}
}
}
void selectionnerVoie(byte voie) {
eteindreToutesLesLeds();
resetCdeInputs();
switch (voie) {
case Voie1:
envoyerImpulsion(CdeInput[0]);
digitalWrite(LedVoie[0], HIGH);
break;
case Voie2:
envoyerImpulsion(CdeInput[1]);
envoyerImpulsion(CdeInput[3]);
digitalWrite(LedVoie[1], HIGH);
break;
case Voie3:
envoyerImpulsion(CdeInput[1]);
envoyerImpulsion(CdeInput[2]);
digitalWrite(LedVoie[2], HIGH);
break;
default:
break;
}
}
void eteindreToutesLesLeds() {
for (byte i = 0; i < 3; i++) {
digitalWrite(LedVoie[i], LOW);
}
}
void resetCdeInputs() {
for (byte i = 0; i < 4; i++) {
digitalWrite(CdeInput[i], LOW);
}
}
void envoyerImpulsion(byte pin) {
digitalWrite(pin, HIGH);
delay(DureeImpulsion);
digitalWrite(pin, LOW);
}