/*arduino voies Kato V4
25/11/2024
Dominique Hudry
commande d'aiguillages Kato pour sélectionner une voie parmis trois.
option: sélection voie3 dès la mise sous tension
lien:
aig1
---o---------------voie3
\ aig2
\---o---------voie2
\
\-------voie1
L293D
+5V--Enable1 =|1 U 16|= +5V
CdeInput1--Input1 =|2 15|= Input4
Output1 =|3 14|= Output4
GND =|4 13|= GND
GND =|5 12|= GND
Output2 =|6 11|= Output3
CdeInput2--Input2 =|7 10|= Input3
+V aiguilles--VS =|8 9|= Enable2--+5V
voie aig1 aig2 CdeInput1 CdeInput2 CdeInput3 CdeInput4 led allumée
1 dévié droit LOw pulse HIGH pulse HIGH LOW LedVoie1
2 dévié dévié LOw pulse HIGH LOw pulse HIGH LedVoie2
3 droit X pulse HIGH LOW LOW LOW LedVoie3
*/
#include "simpleBouton.h"
// Définition des broches
const byte BPvoie[3] = {11, 12, 13};
const byte LedVoie[3] = {2, 3, 4};
const byte CdeInput[4] = {5, 6, 7, 8};
const byte OptionSelectVoie3 = 9;
const byte dureeImpulsion = 20;
// 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 pour 500ms lors de l'initialisation
}
delay(500);
for (int i = 0; i < 3; i++) {
digitalWrite(LedVoie[i], LOW); // Éteindre les LEDs après l'initialisation
}
pinMode(OptionSelectVoie3, INPUT_PULLUP);
if (digitalRead(OptionSelectVoie3) == LOW ) {
selectionnerVoie(3); // La voie3 est sélectionnée
}
}
void loop() {
for (byte i = 0; i < 3; i++) {
bouton[i].actualiser();
}
if (bouton[0].vientDEtreEnfonce()) {
selectionnerVoie(1);
} else if (bouton[1].vientDEtreEnfonce()) {
selectionnerVoie(2);
} else if (bouton[2].vientDEtreEnfonce()) {
selectionnerVoie(3);
}
}
void selectionnerVoie(byte voie) {
eteindreToutesLesLeds();
resetInputs();
switch (voie) {
case 1:
envoyerImpulsion(CdeInput[1]);
envoyerImpulsion(CdeInput[2]);
digitalWrite(LedVoie[0], HIGH);
break;
case 2:
envoyerImpulsion(CdeInput[1]);
envoyerImpulsion(CdeInput[3]);
digitalWrite(LedVoie[1], HIGH);
break;
case 3:
envoyerImpulsion(CdeInput[0]);
digitalWrite(LedVoie[2], HIGH);
break;
default:
break;
}
}
void eteindreToutesLesLeds() {
for (byte i = 0; i < 3; i++) {
digitalWrite(LedVoie[i], LOW);
}
}
void resetInputs() {
for (byte i = 0; i < 4; i++) {
digitalWrite(CdeInput[i], LOW);
}
}
void envoyerImpulsion(byte pin) {
digitalWrite(pin, HIGH);
delay(dureeImpulsion);
digitalWrite(pin, LOW);
}