// --------------------------------------------------------------------------------------------------------
// Christian BEZANGER - FEVRIER 2019
// Ce programme est dans le domaine public. Il reproduit les sequences d allumage d'un immeuble le soir
// et d extinction le matin de facon aleatoire.
//---------------------------------------------------------------------------------------------------------
// Affiche la valeur de luminosite ambiante (pour aider au choix du seuil) et affiche les donnees random
// (Appartement et duree jusqu au prochain evenement (allumage ou extinction))
// Declaration des variables
// **************************
// Variables a la main de l utilisateur
byte nbreLed = 12; // a changer si le nombre de LED est different
long dureeMinMatin = 2000; // en millisecondes, plus proche de zero accelere le rythme
long dureeMaxMatin = 5000; // en millisecondes, plus proche de dureeMinMatin accelere le rythme
long dureeMinSoir = 5000; // en millisecondes, plus proche de zero accelere le rythme
long dureeMaxSoir = 10000; // en millisecondes, plus proche de dureeMinSoir accelere le rythme
int seuilLuminos = 512; // valeur a changer en fonction photoresistance (mettre 512 si interrupteur)
// Autres variables utilisees dans le programme
int lumAmbiante = 1000; // variable de la luminosite ambiante mesuree par photoresistance
// plus faible est la valeur, plus faible est la luminosite
long numSortie = 0; // numero de la sortie tiree au sort, comprise entre 2 et nbreLed + 1
long duree = 0; // duree tiree au sort entre deux evenements, comprise entre dureeMin et dureeMax
void setup() {
// Initialisation
Serial.begin(9600);
randomSeed(analogRead(A5)); // initialise les fonctions aleatoires
for(byte i = 0; i < nbreLed; i++)
{
pinMode(i + 2, OUTPUT); // initialise les broches en sortie
digitalWrite(i + 2, LOW); // eteint la LED branchee sur la sortie
} // Fin de boucle for
} // Fin de setup
void loop() {
// Lecture de la luminosite ambiante et determination du jour ou de la nuit
lumAmbiante = analogRead(A4);
if (lumAmbiante >= seuilLuminos)
{
// MATIN : la luminosite est forte -> eteindre les appartements, ordre et rythme aleatoire
numSortie = random (2, nbreLed + 2); // on tire au sort la fenetre concernee
duree = random (dureeMinMatin, dureeMaxMatin + 1); // on tire au sort la duree jusqu a evenement suivant
digitalWrite(numSortie, LOW); // eteint la LED ; si deja eteinte, reste eteinte
} // Fin du premier if
if (lumAmbiante < seuilLuminos)
{
// SOIR : la luminosite est faible -> allumer les appartements, ordre et rythme aleatoire
numSortie = random (2, nbreLed + 2); // on tire au sort la fenetre concernee
duree = random (dureeMinSoir, dureeMaxSoir + 1); // on tire au sort la duree jusqu a evenement suivant
digitalWrite(numSortie, HIGH); // allume la LED ; si deja allumee, reste allumee
} // Fin du deuxieme if
// Affichage des donnees
Serial.print ("Luminosite : ");
Serial.print ("\t");
Serial.print (lumAmbiante);
Serial.print ("\t");
Serial.print ("Appartement : ");
Serial.print ("\t");
Serial.print (numSortie - 1);
Serial.print ("\t");
Serial.println (duree);
delay(duree); // on attend la duree tiree au sort pour recommencer le prochain evenement
// on peut recommencer la boucle loop
} // Fin de loop