Histoire d'animer tout cela, un programme Arduino qui permet d'afficher de façon aléatoire un signal plausible durant un temps aléatoire
A noter qu'entre chaque changement, le signal affiche le Carré. Laissons le temps à l'aiguilleur et au système de préparer l'itinéraire...
Code : Tout sélectionner
// Name
#define NAME "Signal lumineux SNCF"
#define NAME2 "Panneau de type G (8 feux)"
#define NAME3 ""
// Version & Copyright
#define VERSION "1.0 (Arduino Mega)"
#define COPYRIGHT "Fabrice Fayolle, April 2020"
// Arduino Mega
// Pin -> Use for -> Connect to
// 0
// 1
// 22 -> Avertissement (A) LED
// 23 -> Sémaphore (S) LED
// 24 -> Voie libre (VL) LED
// 25 -> Carré (C) LED
// 26 -> Ralentissement (R) LED (2)
// 27 -> Rappel de Ralent. (RR) LED (2)
// 28 -> Oeilleton (Oeil) LED
// Global constants and variables
#define ALLUME 1
#define ETEINT 0
#define NORMAL HIGH
#define DEVIE LOW
// Aiguille
//const int Aig_Num = 111;
//boolean Table_Aig[6] = {NORMAL, NORMAL, NORMAL, NORMAL, NORMAL, NORMAL};
//Aig111
//const int Aig111 = 53;
// Panneau G
const int Panneau_G = 8 + 1 - 2;
const boolean Signal[Panneau_G * 7] = {
// A, S, VL, C, R, RR, Oeil
//Carré
ETEINT, ALLUME, ETEINT, ALLUME, ETEINT, ETEINT, ETEINT,
//Sémaphore
ETEINT, ALLUME, ETEINT, ETEINT, ETEINT, ETEINT, ALLUME,
//Avertissement
ALLUME, ETEINT, ETEINT, ETEINT, ETEINT, ETEINT, ETEINT,
//Ralentissement
ETEINT, ETEINT, ETEINT, ETEINT, ALLUME, ETEINT, ETEINT,
// Rappel de Ralentissment
ETEINT, ETEINT, ETEINT, ETEINT, ETEINT, ALLUME, ETEINT,
// Rappel de Ralentissment + Avertissement
ALLUME, ETEINT, ETEINT, ETEINT, ETEINT, ALLUME, ETEINT,
// Voie libre
ETEINT, ETEINT, ALLUME, ETEINT, ETEINT, ETEINT, ETEINT
};
// Signal C43 (Panneau G)
const int First_PIN_C43 = 22;
const int Nb_feux_C43 = Panneau_G;
boolean C43[Nb_feux_C43] = {ETEINT, ALLUME, ETEINT, ALLUME, ETEINT, ETEINT, ETEINT};
boolean Afficher_Signal = true;
void setup()
{
// Initialize Serial Port USB at 9600 baud
Serial.begin(9600);
Serial.println(NAME);
Serial.println(NAME2);
Serial.println(NAME3);
Serial.println("-------------------------------------------------------------------------- -");
Serial.print("Version "); Serial.print(VERSION); Serial.print(", "); Serial.println(COPYRIGHT);
Serial.println("-------------------------------------------------------------------------- -");
// Initialize Output PINs
for (int i = 0; i < Nb_feux_C43; i++)
{
pinMode (i + First_PIN_C43, OUTPUT);
digitalWrite(i + First_PIN_C43, C43[i]);
}
// Initialize ramdom number generator
randomSeed(analogRead(0));
}
void loop()
{
int Afficher_signal;
for (int i = 0; i < Nb_feux_C43; i++)
{
C43[i] = Signal[i];
digitalWrite(i + First_PIN_C43, C43[i]);
Serial.print(C43[i]);
}
Serial.println();
delay(10000);
Afficher_signal = random (0, 6);
for (int i = 0; i < Nb_feux_C43; i++)
{
C43[i] = Signal[i + (Panneau_G * Afficher_signal)];
digitalWrite(i + First_PIN_C43, C43[i]);
Serial.print(C43[i]);
}
Serial.println();
delay(random(7500,15000));
}