Bonjour,
J'ai retrouvé ça, je pense que tu pourrais t'en inspirer.
Jean-Paul
/*arduino gestion gare cachée 2 voies
Si un train arrive sur une voie,l'autre train sur l'autre voie part
Chaque voie est alimentée par un relais
la détection du train coupe l'alimentation de la voie et la détection de consommation de courant
Capteur1 et Capteur2 si actifs ils envoient une masse aux pins où ils sont reliés
les voies 1 et 2 sont alimentées respectivement via les contacts travail des relais CdeAlimVoie1 et CdeAlimVoie2
Par convention train1 circule sur la voie1, train2 sur voie2
*/
// configuration
const byte Capteur1 = 2; // déclarations des PINs
const byte Capteur2 = 3;
const byte CdeAlim1 = 4;
const byte CdeAlim2 = 5;
bool etatAlim1;
bool etatAlim2;
enum {aucunTrain, voie1Occup, voie2Occup} etatCourant; // on précise les différents états possibles
void setup() { // réglage des entrées et des sorties
pinMode(CdeAlim1, OUTPUT);
pinMode(CdeAlim2, OUTPUT);
pinMode(Capteur1, INPUT_PULLUP);
pinMode(Capteur2, INPUT_PULLUP);
etatCourant = aucunTrain; // on indique l'état initial
} // fin setup
void loop() {
bool etatCapteur1 = digitalRead(Capteur1); //lecture des différents capteurs
bool etatCapteur2 = digitalRead(Capteur2);
delay(200);
switch (etatCourant) { //switch case qui gère les différents états
case aucunTrain: // pas de train
alimentationVoies(etatCapteur1, etatCapteur2); //alimentation des deux voies
break;
case voie1Occup: // train1 détecté en voie1
coupureAlimVoie1(etatCapteur2);//coupure voie1 et attente train2 en voie2
break;
case voie2Occup: // train2 détecté en voie2
coupureAlimVoie2(etatCapteur1); //coupure voie2 et attente train1 en voie1
break;
} // fin switch case
} // fin du loop
void alimentationVoies(bool etatCapteur1, bool etatCapteur2) {
digitalWrite(CdeAlim1, HIGH); //les deux voies sont alimentées en l'attente arrivée d'un train
digitalWrite(CdeAlim2, HIGH);
delay(500);
if (etatCapteur1 == LOW) { //si train1 arrive en voie1
etatCourant = voie1Occup;
}
else if (etatCapteur1 == HIGH) { //si train2 arrive en voie2
etatCourant = voie2Occup;
}
}
void coupureAlimVoie1(bool etatCapteur2) {
digitalWrite(CdeAlim1, LOW); // la voie1 est coupée, le train1 est arrêté
digitalWrite(CdeAlim2, HIGH); // la voie2 est alimentée, le train2 peut entrer ou sortir
delay(500);
if (etatCapteur2 == LOW etet etatAlim2 == HIGH) { // détection train2 arrivé en voie2
etatCourant = voie2Occup;
}
}
void coupureAlimVoie2(bool etatCapteur1) {
digitalWrite(CdeAlim1, HIGH); // la voie1 est alimentée le train1 peut entrer ou sortir
digitalWrite(CdeAlim2, LOW); // la voie2 est coupée, le train est arrêté
delay(500);
if (etatCapteur1 == LOW etet etatAlim1 == HIGH) { // détection train1 arrivé en voie1
etatCourant = voie1Occup;
}
}
Retourner vers Électricité, électronique et numérique
Utilisateurs parcourant ce forum : Google [Bot] et 14 invités