const int sur_Vabc = A0; // Lecture - Sert à intialisation - Un autorail est sur les voies Va Vb Vc const int sur_Vbcd = A1; // Lecture - Sert à intialisation - Un autorail est sur Vb Vc Vd const int sur_Vabd = A2; // Lecture - Sert à intialisation - Un autorail est sur Va Vb Vd const int sur_Vacd = A3; // Lecture - Sert à intialisation - Un autorail est sur Va Vc Vd const int detect_ab = A4; // Lecture - Traite la détection d'un autorail qui arrive sur une les voies Va ou Vb, c'est un contact fournit par le détecteur IR_ab const int detect_cd = A5; // Lecture - Traite la détection d'un autorail qui arrive sur une les voies Vc ou Vd, c'est un contact fournit par le détecteur IR_cd const int aig_ab = 1; // Relais qui commande le mouvement de l'aiguillage pour aller sur la voie Va ou la voie Vb - HIGH = PAS DEVIE - LOW = DEVIE const int aig_cd = 2; // Relais qui commande le mouvement de l'aiguillage pour aller sur la voie Vc ou la voie Vd - HIGH = PAS DEVIE - LOW = DEVIE const int Va = 3; // Relais qui isole ou non la voie Va - HIGH = ISOLEE - LOW = ACTIVE const int Vb = 4; // Relais qui isole ou non la voie Vb - HIGH = ISOLEE - LOW = ACTIVE const int Vc = 5; // Relais qui isole ou non la voie Vc - HIGH = ISOLEE - LOW = ACTIVE const int Vd = 6; // Relais qui isole ou non la voie Vd - HIGH = ISOLEE - LOW = ACTIVE const int choix_detect_ab = 7; //Choix du detecteur lorsque l'autorail se dirige vers Va ou Vb - HIGH = ISOLE - LOW = ACTIF const int choix_detect_cd = 8; //Choix du detecteur lorsque l'autorail se dirige vers Vc ou Vd - HIGH = ISOLE - LOW = ACTIF const int signal_Va= 9; // Relais qui commande le signal de départ de la voie Va - HIGH = CARRE - LOW = VOIE LIBRE const int signal_Vb= 10; // Relais qui commande le signal de départ de la voie Vb - HIGH = CARRE - LOW = VOIE LIBRE const int signal_Vc= 11; // Relais qui commande le signal de départ de la voie Vc - HIGH = CARRE - LOW = VOIE LIBRE const int signal_Vd= 12; // Relais qui commande le signal de départ de la voie Vd - HIGH = CARRE - LOW = VOIE LIBRE int etat1; int etat2; int etat3; int etat4; int etat5; int etat6; void setup() { pinMode (sur_Vabc, INPUT); pinMode (sur_Vbcd, INPUT); pinMode (sur_Vabd, INPUT); pinMode (sur_Vacd, INPUT); pinMode (detect_ab, INPUT); pinMode (detect_cd, INPUT); pinMode (aig_ab, OUTPUT); pinMode (aig_cd, OUTPUT); pinMode (Va, OUTPUT); pinMode (Vb, OUTPUT); pinMode (Vc, OUTPUT); pinMode (Vd, OUTPUT); pinMode (choix_detect_ab, OUTPUT); pinMode (choix_detect_cd, OUTPUT); pinMode (signal_Va, OUTPUT); pinMode (signal_Vb, OUTPUT); pinMode (signal_Vc, OUTPUT); pinMode (signal_Vd, OUTPUT); digitalWrite (aig_ab, HIGH); digitalWrite (aig_cd, HIGH); digitalWrite (Va, HIGH); digitalWrite (Vb, HIGH); digitalWrite (Vc, HIGH); digitalWrite (Vd, HIGH); digitalWrite (choix_detect_ab, HIGH); digitalWrite (choix_detect_cd, HIGH); digitalWrite (signal_Va, HIGH); digitalWrite (signal_Vb, HIGH); digitalWrite (signal_Vc, HIGH); digitalWrite (signal_Vd, HIGH); etat1 == HIGH; etat2 == HIGH; etat3 == HIGH; etat4 == HIGH; etat5 == HIGH; etat6 == HIGH; } void loop() { etat1 = digitalRead (sur_Vabc); etat2 = digitalRead (sur_Vbcd); etat3 = digitalRead (sur_Vabd); etat4 = digitalRead (sur_Vacd); etat5 = digitalRead (detect_ab); etat6 = digitalRead (detect_cd); test(); } void test() { etat1 = digitalRead (sur_Vabc); if (etat1 == HIGH) { } else { Va_vers_Vd(); } etat2 = digitalRead (sur_Vbcd); if (etat2 == HIGH) { } else { Vc_vers_Va(); } etat3 = digitalRead (sur_Vabd); if (etat3 == HIGH) { } else { Vb_vers_Vc(); } etat4 = digitalRead (sur_Vacd); if (etat4 == HIGH) { } else { Vd_vers_Vb(); } test(); } void Va_vers_Vd() // SEQUENCE 1 OU DEBUT DE LA BOUCLE APRES LA SEQUENCE 4 { delay (8000); // Temps pour que l'autorail entre en gare - ralentisse - s'arrete - prise en compte inversion de sens par le décodeur digitalWrite (Vb, HIGH); //Isole la voie Vb digitalWrite (aig_ab, HIGH); // Pas dévié - Dirige vers Va digitalWrite (aig_cd, HIGH); // Pas dévié - Dirige vers Vd digitalWrite (choix_detect_cd, LOW); // Activation du détecteur en entrée de la gare CD digitalWrite (choix_detect_ab, HIGH); // Isolation du détecteur en entrée de la gare AB delay (2000); // Attente entre début mouvement de l'aiguillage et la présentation du signal digitalWrite (signal_Va, LOW); // Voie libre pour Va digitalWrite (signal_Vb, HIGH); digitalWrite (signal_Vc, HIGH); digitalWrite (signal_Vd, HIGH); delay (3000); // Attente entre début bascule du signal mécanique et départ de l'autorail digitalWrite (Va, LOW); // Mise en tension de Va - Départ autorail vers Vd digitalWrite (Vb, HIGH); digitalWrite (Vc, HIGH); digitalWrite (Vd, LOW); // Mise en tension de Vd - Attente arrivée autorail de Va delay (3000); // Attendre que l'autorail soit passé au pied du signal digitalWrite (signal_Va, HIGH); // Remise au carré etat5 == HIGH; etat6 == HIGH; test_etat6_Va_vers_Vd(); // détection du passage avant d'entrer dans la gare CD } void test_etat6_Va_vers_Vd() // ATTENTE SIGNAL DE DETECTION DU DETECTEUR CD { etat6 = digitalRead (detect_cd); if (etat6 == HIGH) { test_etat6_Va_vers_Vd(); } // Tant que pas passé else { Vc_vers_Va(); } // Est passé } void Vc_vers_Va() // SEQUENCE 2 { delay (8000); // Temps pour que l'autorail entre en gare - ralentisse - s'arrete - prise en compte inversion de sens par le décodeur digitalWrite (Vd, HIGH); //Isole la voie Vd digitalWrite (aig_ab, HIGH); // Pas dévié - Dirige vers Va digitalWrite (aig_cd, LOW); // Dévié - Dirige vers Vc digitalWrite (choix_detect_ab, LOW); // Activation du détecteur en entrée de la gare AB digitalWrite (choix_detect_cd, HIGH); // Isolation du détecteur en entrée de la gare CD delay (2000); // Attente entre début mouvement de l'aiguillage et la présentation du signal digitalWrite (signal_Va, HIGH); digitalWrite (signal_Vb, HIGH); digitalWrite (signal_Vc, LOW); // Voie libre pour Vc digitalWrite (signal_Vd, HIGH); delay (2000); // Attente entre début bascule du signal lumineux et départ de l'autorail digitalWrite (Va, LOW); // Mise en tension de Va - Attente arrivée autorail de Vc digitalWrite (Vb, HIGH); digitalWrite (Vc, LOW); digitalWrite (Vd, HIGH); // Mise en tension de Va - Départ autorail vers Va delay (3000); // Attendre que l'autorail soit passé au pied du signal digitalWrite (signal_Vc, HIGH); // Remise au carré etat5 == HIGH; etat6 == HIGH; test_etat5_Vc_vers_Va(); // détection du passage avant d'entrer dans la gare AB } void test_etat5_Vc_vers_Va() // ATTENTE SIGNAL DE DETECTION DU DETECTEUR AB { etat5 = digitalRead (detect_ab); if (etat5 == HIGH) { test_etat5_Vc_vers_Va(); } // Tant que pas passé else { Vb_vers_Vc(); } // Est passé } void Vb_vers_Vc() // SEQUENCE 3 { delay (8000); // Temps pour que l'autorail entre en gare - ralentisse - s'arrete - prise en compte inversion de sens par le décodeur digitalWrite (Va, HIGH); //Isole la voie Va digitalWrite (aig_ab, LOW); // Dévié - Dirige vers Vb digitalWrite (aig_cd, LOW); // Dévié - Dirige vers Vc digitalWrite (choix_detect_ab, HIGH); // Isolation du détecteur en entrée de la gare AB digitalWrite (choix_detect_cd, LOW); // Activation du détecteur en entrée de la gare CD delay (2000); // Attente entre début mouvement de l'aiguillage et la présentation du signal digitalWrite (signal_Va, HIGH); digitalWrite (signal_Vb, LOW); // Voie libre pour Vb digitalWrite (signal_Vc, HIGH); digitalWrite (signal_Vd, HIGH); delay (3000); // Attente entre début bascule du signal mécanique et départ de l'autorail digitalWrite (Va, HIGH); digitalWrite (Vb, LOW); // Mise en tension de Vb - Départ autorail vers Vc digitalWrite (Vc, LOW); // Mise en tension de Vc- Attente arrivée autorail de Vb digitalWrite (Vd, HIGH); delay (3000); // Attendre que l'autorail soit passé au pied du signal digitalWrite (signal_Vb, HIGH); // Remise au carré etat5 == HIGH; etat6 == HIGH; test_etat6_Vb_vers_Vc(); // détection du passage avant d'entrer dans la gare CD } void test_etat6_Vb_vers_Vc() // ATTENTE SIGNAL DE DETECTION DU DETECTEUR CD { etat6 = digitalRead (detect_cd); if (etat6 == HIGH) { test_etat6_Vb_vers_Vc(); } // Tant que pas passé else { Vd_vers_Vb(); } // Est passé } void Vd_vers_Vb() // SEQUENCE 4 { delay (8000); // Temps pour que l'autorail entre en gare - ralentisse - s'arrete - prise en compte inversion de sens par le décodeur digitalWrite (Vc, HIGH); //Isole la voie Vc digitalWrite (aig_ab, LOW); // Dévié - Dirige vers Vb digitalWrite (aig_cd, HIGH); // Pas dévié - Dirige vers Vd digitalWrite (choix_detect_ab, LOW); // Activation du détecteur en entrée de la gare AB digitalWrite (choix_detect_cd, HIGH); // Isolation du détecteur en entrée de la gare CD delay (2000); // Attente entre début bascule du signal lumineux et départ de l'autorail digitalWrite (signal_Va, HIGH); digitalWrite (signal_Vb, HIGH); digitalWrite (signal_Vc, HIGH); digitalWrite (signal_Vd, LOW); // Voie libre pour Vb delay (2000); // Attente entre début bascule du signal lumineux et départ de l'autorail digitalWrite (Va, HIGH); digitalWrite (Vb, LOW); // Mise en tension de Vb- Attente arrivée autorail de Vd digitalWrite (Vc, HIGH); digitalWrite (Vd, LOW); // Mise en tension de Vd - Départ autorail vers Vb delay (3000); // Attendre que l'autorail soit passé au pied du signal digitalWrite (signal_Vd, HIGH); // Remise au carré etat5 == HIGH; etat6 == HIGH; test_etat5_Vd_vers_Vb(); // détection du passage avant d'entrer dans la gare CD } void test_etat5_Vd_vers_Vb() // ATTENTE SIGNAL DE DETECTION DU DETECTEUR AB { etat5 = digitalRead (detect_ab); if (etat5 == HIGH) { test_etat5_Vd_vers_Vb(); } // Tant que pas passé else { Va_vers_Vd(); } // Est passé // RETOUR DEBUT DE LA BOUCLE }