Re: Réseau Nord 70/80
Posté : 21 mars 2024, 13:39
Et voilà...
Le signal Haxo Modèles est maintenant opérationnel.
J'ai ajouté dans le programme Arduino une option RR clignotant, histoire de pouvoir profiter de toutes les configurations. De plus, afin de tester le signal à la mise sous tension, tous les feux s'allument pendant quelques secondes.
Dernière étape à réaliser avant la mise en place définitive, le repérage des différents fils.
Le panneau finalisé ainsi que la carte incluant l'Arduino Nano La mise à jour du programme
// Name
#define NAME "Gestion du C45"
#define NAME2 "de la gare du Hable"
// Version & Copyright
#define VERSION "V1.4 (Arduino Nano)"
#define COPYRIGHT "Fabrice Fayolle, March 2024"
#define OEILLETON 12
#define SEMAPHORE 11
#define CARRE 10
#define AVERTISSEMENT 9
#define VOIELIBRE 8
#define RAPPEL2 7
#define RAPPEL1 6
const int SIGNAL[2] = { 6, 13 };
// Prévoir des résistances de 300 à 680 ohms pour alimenter les LED en 5V
#define C45 2
#define OUVERT LOW
#define FERME HIGH
#define ETEINT LOW
#define ALLUME HIGH
#define TEST 2500
#define AIGUILLAGE 4
#define DROIT HIGH
#define DEVIE LOW
void CARRE_FERME(boolean ETAT) {
for (int i = SIGNAL[0]; i < SIGNAL[1]; i++) {
digitalWrite(i, ETEINT);
}
digitalWrite(CARRE, ETAT);
digitalWrite(SEMAPHORE, ETAT);
}
void setup() {
Serial.begin(9600);
Serial.println(NAME);
Serial.println(NAME2);
Serial.println("---------------------------------------------------------------------------");
Serial.print(VERSION);
Serial.print(", ");
Serial.println(COPYRIGHT);
Serial.println("---------------------------------------------------------------------------");
for (int i = SIGNAL[0]; i < SIGNAL[1]; i++) {
pinMode(i, OUTPUT);
}
Serial.println("Test de tous les feux du signal C45");
for (int i = SIGNAL[0]; i < SIGNAL[1]; i++) {
digitalWrite(i, ALLUME);
}
delay(TEST);
CARRE_FERME(ALLUME);
pinMode(C45, INPUT_PULLUP);
pinMode(AIGUILLAGE, INPUT_PULLUP);
Serial.println("Fermeture du C45");
}
void loop() {
if (digitalRead(C45) == OUVERT) {
CARRE_FERME(ETEINT);
digitalWrite(OEILLETON, ALLUME);
switch (digitalRead(AIGUILLAGE)) {
case DROIT:
switch (random(1, 4)) {
case 1:
digitalWrite(SEMAPHORE, ALLUME);
delay(2500);
digitalWrite(SEMAPHORE, ETEINT);
digitalWrite(AVERTISSEMENT, ALLUME);
break;
case 2:
digitalWrite(AVERTISSEMENT, ALLUME);
delay(2500);
digitalWrite(AVERTISSEMENT, ETEINT);
digitalWrite(VOIELIBRE, ALLUME);
break;
case 3:
while (digitalRead(C45) == OUVERT) {
digitalWrite(RAPPEL1, ALLUME);
digitalWrite(RAPPEL2, ALLUME);
delay(600);
digitalWrite(RAPPEL1, ETEINT);
digitalWrite(RAPPEL2, ETEINT);
delay(300);
}
break;
case 4:
digitalWrite(VOIELIBRE, ALLUME);
break;
}
break;
case DEVIE:
digitalWrite(RAPPEL1, ALLUME);
digitalWrite(RAPPEL2, ALLUME);
digitalWrite(AVERTISSEMENT, ALLUME);
break;
}
while (digitalRead(C45) == OUVERT) {
delay(100);
}
CARRE_FERME(ALLUME);
}
}
Le signal Haxo Modèles est maintenant opérationnel.
J'ai ajouté dans le programme Arduino une option RR clignotant, histoire de pouvoir profiter de toutes les configurations. De plus, afin de tester le signal à la mise sous tension, tous les feux s'allument pendant quelques secondes.
Dernière étape à réaliser avant la mise en place définitive, le repérage des différents fils.
Le panneau finalisé ainsi que la carte incluant l'Arduino Nano La mise à jour du programme
// Name
#define NAME "Gestion du C45"
#define NAME2 "de la gare du Hable"
// Version & Copyright
#define VERSION "V1.4 (Arduino Nano)"
#define COPYRIGHT "Fabrice Fayolle, March 2024"
#define OEILLETON 12
#define SEMAPHORE 11
#define CARRE 10
#define AVERTISSEMENT 9
#define VOIELIBRE 8
#define RAPPEL2 7
#define RAPPEL1 6
const int SIGNAL[2] = { 6, 13 };
// Prévoir des résistances de 300 à 680 ohms pour alimenter les LED en 5V
#define C45 2
#define OUVERT LOW
#define FERME HIGH
#define ETEINT LOW
#define ALLUME HIGH
#define TEST 2500
#define AIGUILLAGE 4
#define DROIT HIGH
#define DEVIE LOW
void CARRE_FERME(boolean ETAT) {
for (int i = SIGNAL[0]; i < SIGNAL[1]; i++) {
digitalWrite(i, ETEINT);
}
digitalWrite(CARRE, ETAT);
digitalWrite(SEMAPHORE, ETAT);
}
void setup() {
Serial.begin(9600);
Serial.println(NAME);
Serial.println(NAME2);
Serial.println("---------------------------------------------------------------------------");
Serial.print(VERSION);
Serial.print(", ");
Serial.println(COPYRIGHT);
Serial.println("---------------------------------------------------------------------------");
for (int i = SIGNAL[0]; i < SIGNAL[1]; i++) {
pinMode(i, OUTPUT);
}
Serial.println("Test de tous les feux du signal C45");
for (int i = SIGNAL[0]; i < SIGNAL[1]; i++) {
digitalWrite(i, ALLUME);
}
delay(TEST);
CARRE_FERME(ALLUME);
pinMode(C45, INPUT_PULLUP);
pinMode(AIGUILLAGE, INPUT_PULLUP);
Serial.println("Fermeture du C45");
}
void loop() {
if (digitalRead(C45) == OUVERT) {
CARRE_FERME(ETEINT);
digitalWrite(OEILLETON, ALLUME);
switch (digitalRead(AIGUILLAGE)) {
case DROIT:
switch (random(1, 4)) {
case 1:
digitalWrite(SEMAPHORE, ALLUME);
delay(2500);
digitalWrite(SEMAPHORE, ETEINT);
digitalWrite(AVERTISSEMENT, ALLUME);
break;
case 2:
digitalWrite(AVERTISSEMENT, ALLUME);
delay(2500);
digitalWrite(AVERTISSEMENT, ETEINT);
digitalWrite(VOIELIBRE, ALLUME);
break;
case 3:
while (digitalRead(C45) == OUVERT) {
digitalWrite(RAPPEL1, ALLUME);
digitalWrite(RAPPEL2, ALLUME);
delay(600);
digitalWrite(RAPPEL1, ETEINT);
digitalWrite(RAPPEL2, ETEINT);
delay(300);
}
break;
case 4:
digitalWrite(VOIELIBRE, ALLUME);
break;
}
break;
case DEVIE:
digitalWrite(RAPPEL1, ALLUME);
digitalWrite(RAPPEL2, ALLUME);
digitalWrite(AVERTISSEMENT, ALLUME);
break;
}
while (digitalRead(C45) == OUVERT) {
delay(100);
}
CARRE_FERME(ALLUME);
}
}