/*
******************************************************************************
* Commande d'éclairage jusqu'à 52 LED via un générateur aléatoire basé *
* sur un Arduino Mega. *
* Le nombre de LED connectées est règlé via des interrupteurs DIP. *
* Le programme démarre automatiquement lorsque l'ADRUINO est alimenté. *
* Un état Haut sur l'entrée digitale A8 allume toutes les LED, *
* au retour à l'état BAS, le cycle d'allumage aléatoire reprend. *
* *
* - Crée le 10 juin 2025 - *
* - Modifié le 06 juillet 2025 - *
* *
******************************************************************************
*/
// Configuration des variables
int i,NumeroLed,BoutonPoussoir,Etat,NbreLed,NbreSortie;
int BinaireA,BinaireB,BinaireC,BinaireD,BinaireE,BinaireF;
int AllumeTout = 8; // Port d'entrée pour allumer toutes les LED
int DIP1 = 0; // Port d'entrée binaire 000001
int DIP2 = 1; // Port d'entrée binaire 000010
int DIP3 = 2; // Port d'entrée binaire 000100
int DIP4 = 3; // Port d'entrée binaire 001000
int DIP5 = 4; // Port d'entrée binaire 010000
int DIP6 = 5; // Port d'entrée binaire 100000
unsigned long TempsPause = 5000; // Pause de pause entre chaque cycle
unsigned long TempsRef = 0;
// Initialisation de l'Arduino
void setup() {
//Serial.begin(9600); // Pour débug
// Converti l'entrée A0 du binaire 000001 en décimale 1
BinaireA = analogRead (DIP1); if (BinaireA == 0) {BinaireA = 1;}else{BinaireA = 0;}
// Converti l'entrée A1 du binaire 000010 en décimale 2
BinaireB = analogRead (DIP2); if (BinaireB == 0) {BinaireB = 2;}else{BinaireB = 0;}
// Converti l'entrée A2 du binaire 000100 en décimale 4
BinaireC = analogRead (DIP3); if (BinaireC == 0) {BinaireC = 4;}else{BinaireC = 0;}
// Converti l'entrée A3 du binaire 001000 en décimale 8
BinaireD = analogRead (DIP4); if (BinaireD == 0) {BinaireD = 8;}else{BinaireD = 0;}
// Converti l'entrée A4 du binaire 010000 en décimale 16
BinaireE = analogRead (DIP5); if (BinaireE == 0) {BinaireE = 16;}else{BinaireE = 0;}
// Converti l'entrée A5 du binaire 100000 en décimale 32
BinaireF = analogRead (DIP6); if (BinaireF == 0) {BinaireF = 32;}else{BinaireF = 0;}
// Additionne le résultat décimale
NbreLed = BinaireA + BinaireB + BinaireC + BinaireD + BinaireE + BinaireF + 1;
// Limite le résultat à 52 (Nombre de sortie maximum)
if (NbreLed >= 52) {
NbreLed = 52;
}
// Déclare en masse les ports 2 à NbreLed
for (int i = 2; i <= NbreLed; i++) {
pinMode(i, OUTPUT);
}
}
// Boucle de programmation
void loop() {
NbreSortie = NbreLed + 1;
DebutProg:
// Allumage de certaines LED à l'initialisation
for (int i = 2; i <= NbreSortie; i++) {
Etat = random(2);
if (Etat == 0) {
Etat = LOW;
} else {
Etat = HIGH;
}
digitalWrite (i, Etat);
}
// Allumage ou extenction aléatoire
while (true) { // Boucle infini
NumeroLed = random(2,NbreSortie); // Etats aléatoires entre 2 et NbreLed
Etat = random(2); // Etats aléatoires entre 0 et 1
//Serial.println("Nombre sortie = "+ String(NbreSortie)); // Pour débug
if (Etat == 0) {
digitalWrite (NumeroLed, LOW); // Eteint la LED (NumeroLed)
} else {
digitalWrite (NumeroLed, HIGH);// Allume la LED (NumeroLed)
}
//on arme la tempo en millis pour pouvoir surveiller l'entrée A8
TempsRef = millis();
Pause:
// xxx (TempsPause) ms de pause après l'extinction ou l'activation de la ième sortie
if ((millis() - TempsRef ) <= TempsPause) { // Compare temps référence/durée pause
BoutonPoussoir = analogRead (AllumeTout);
if (BoutonPoussoir > 200) { // Sortie de la boucle si broche A8 état HAUT
goto AllumeToutesLED;
}
goto Pause; //
}
}
// Allumage de toutes les LED (si A8 = HAUT)
AllumeToutesLED:
// Allume toutes les LED
for (int i = 2; i <= NbreLed; i++) {
digitalWrite (i, HIGH);
}
while (true) {
// Boucle infini (Attente état BAS sur broche A8)
//Serial.println("Poussoir = "+ String(BoutonPoussoir)); // Pour débug
BoutonPoussoir = analogRead (AllumeTout);
if ( BoutonPoussoir < 200 ) { // Sortie de la boucle si broche A8 état BAS
goto DebutProg; // Retour au début du programme
}
}
}
Réglage nombre de LED