/*attiny aiguillage KATO BP V3
24/01/2024
Dominique Hudry
Commande d'un aiguillage KATO par un BP avec affichage de la voie sélectionnée.
Le BP de commande peut être remplacé par tout capteur délivrant une masse lorsqu'il y a détection,
au repos sa sortie doit être au niveau +5V.
l'étage de puissance est un L293D, La bobine de l'aiguillage KATO est branchée entre Output1 et Output2.
Le changement de position se produit uniquement lors du front descendant de la sortie du capteur.
A la mise sous tension le montage positionne l'aiguillage dans la position Directe.
liens: https://wokwi.com/projects/387800596253418497
https://wiki.mchobby.be/index.php?title=Pont-H_L293D
https://forum.arduino.cc/t/partage-boutons-poussoirs/361656
compatible avec ATtiny25
Brochage Attiny85
=|1 U 8|= VCC
CdeInput2 <--3 =|2 7|= 2--> LedVoieDeviee
CdeInput1 <--4 =|3 6|= 1--> LedVoieDirecte
GND =|4 5|= 0<-- BPcommande--GND
Brochage 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
La bobine de l'aiguillage KATO est branchée entre Output1 et Output2
input1 input2 action
LOW LOW aucun changement
HIGH LOW position Directe
LOW HIGH position Déviée
HIGH HIGH aucun changement
*/
#include "simpleBouton.h"
const byte BPcommande = 0;
const byte LedVoieDirecte = 1;
const byte LedVoieDeviee = 2;
const byte CdeInput1 = 4;
const byte CdeInput2 = 3;
bool variableEtat;
int dureeImpulsion = 20;
simpleBouton bouton(BPcommande);
void setup() {
pinMode(CdeInput1, OUTPUT);
pinMode(CdeInput2, OUTPUT);
digitalWrite(CdeInput2, LOW);
pinMode(LedVoieDirecte, OUTPUT);
pinMode(LedVoieDeviee, OUTPUT);
commandePositionDirecte();// commande de l'aiguillage en position Directe
variableEtat = true;
} // fin setup
void loop() {
bouton.actualiser();
if (bouton.vientDEtreEnfonce()) {
variableEtat = !variableEtat; // inversion de la variable
if (variableEtat) {
commandePositionDirecte(); // commande de l'aiguillage en position Directe
} // fin if
else {
commandePositionDeviee(); // commande en position Déviée
} // fin else
} // fin if
} // fin loop
void commandePositionDirecte() {
digitalWrite(LedVoieDeviee, LOW); // effacement de la position précédente
digitalWrite(CdeInput1, HIGH); // impulsion envoyée au L293D sur Input1
delay(dureeImpulsion);
digitalWrite(CdeInput1, LOW);
digitalWrite(LedVoieDirecte, HIGH); // la nouvelle position de l'aiguillage est visualisée
}
void commandePositionDeviee() {
digitalWrite(LedVoieDirecte, LOW); // effacement de la position précédente
digitalWrite(CdeInput2, HIGH); // impulsion envoyée au L293D sur Input2
delay(dureeImpulsion);
digitalWrite(CdeInput2, LOW);
digitalWrite(LedVoieDeviee, HIGH); // la nouvelle position de l'aiguillage est visualisée
}