/*arduino voies Kato V2
25/11/2024
Dominique Hudry
commande d'aiguillages Kato pour sélectionner une voie parmis trois.
option: sélection de la voie1 dès la mise sous tension
lien: https://wokwi.com/projects/415540187950607361
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 OptionSelectVoie1 = 9;
const byte dureeImpulsion = 20;
// Constantes pour les voies
const byte Voie1 = 1;
const byte Voie2 = 2;
const byte Voie3 = 3;
// 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);
eteindreToutesLesLeds(); // Éteindre les LEDs après l'initialisation
pinMode(OptionSelectVoie1, INPUT_PULLUP);
if (digitalRead(OptionSelectVoie1) == 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 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;
}
}
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);
}
uno:A5.2
uno:A4.2
uno:AREF
uno:GND.1
uno:13
uno:12
uno:11
uno:10
uno:9
uno:8
uno:7
uno:6
uno:5
uno:4
uno:3
uno:2
uno:1
uno:0
uno:IOREF
uno:RESET
uno:3.3V
uno:5V
uno:GND.2
uno:GND.3
uno:VIN
uno:A0
uno:A1
uno:A2
uno:A3
uno:A4
uno:A5
btn1:1.l
btn1:2.l
btn1:1.r
btn1:2.r
btn2:1.l
btn2:2.l
btn2:1.r
btn2:2.r
btn3:1.l
btn3:2.l
btn3:1.r
btn3:2.r
led1:A
led1:C
led2:A
led2:C
led3:A
led3:C
led4:A
led4:C
led5:A
led5:C
led6:A
led6:C
led7:A
led7:C
sw1:1
sw1:2
sw1:3