///////////////////// // GUY MAGLI 2016 // //////////////////// #include // Pour la communication avec un périphérique #include // Pour utilisation de l'horloge RTC RTC_DS1307 RTC; // Constante /////////////// // VARIABLES // /////////////// // Carte int iNumPin; // Pour boucle sur les pins (donc, les leds) int iValeurMinutes[7]; // Tableau des valeurs pour programmer individuellement les leds (6 pour les minutes) int iValeurHeures[6]; // Tableau des valeurs pour programmer individuellement les leds (5 pour les heures) // Heures int iHeuresEnCours = 0; // Le nombre d'heures en cours int iAnciennesHeuresEnCours = 0; // Le nombre d'heures déjà affichées int iMinutesEnCours = 0; // Le nombre de minutes en cours int iAnciennesMinutesEnCours = 100; // Le nombre de minutes déjà affichées // Divers int t = 0; // Pour boucles int g = 0; // Pour boucles /////////// // SETUP // /////////// void setup() { // Définition des pins de sortie // Pour les heures for (iNumPin = 3; iNumPin <= 8; iNumPin++) { pinMode(iNumPin, OUTPUT); // 3 indique l'heure 1 et 7 l'heure 16 } // Pour les minutes for (iNumPin = 8; iNumPin <= 13; iNumPin++) // 13 indique la minute 1 et 8 la minute 32 { pinMode(iNumPin, OUTPUT); } // Définition des constantes (valables pour les heures comme pour les minutes) iValeurMinutes[1] = 32; iValeurMinutes[2] = 16; iValeurMinutes[3] = 8; iValeurMinutes[4] = 4; iValeurMinutes[5] = 2; iValeurMinutes[6] = 1; iValeurHeures[1] = 16; iValeurHeures[2] = 8; iValeurHeures[3] = 4; iValeurHeures[4] = 2; iValeurHeures[5] = 1; // Clignote pour tester les leds for (g = 1; g <= 3; g++) // Trois clignotements pour indiquer le bon fonctionnement de toutes les leds { for (t = 3; t <= 13; t++) // Toutes les leds, des minutes et des secondes, s'allument en même temps { digitalWrite(t, HIGH); } delay(150); for (t = 3; t <= 13; t++) // Toutes les leds, des minutes et des secondes, s'éteignent en même temps { digitalWrite(t, LOW); } delay(150); } // Initialisation de l'horloge Serial.begin(9600); Wire.begin(); RTC.begin(); } //////////// //// LOOP // //////////// void loop() { // Lecture de l'heure DateTime now = RTC.now(); // Gestion des heures iHeuresEnCours = now.hour(); if (iHeuresEnCours != iAnciennesHeuresEnCours) { iAnciennesHeuresEnCours = now.hour(); // On examine les cas des six leds au travers d'une boucle for (iNumPin = 3; iNumPin <= 7; iNumPin++) { if (iHeuresEnCours >= iValeurHeures[iNumPin - 2]) { digitalWrite(10 - iNumPin, HIGH); iHeuresEnCours -= iValeurHeures[iNumPin - 2]; } else { digitalWrite(10 - iNumPin, LOW); } } } // Gestion des minutes iMinutesEnCours = now.minute(); if (iMinutesEnCours != iAnciennesMinutesEnCours) { iAnciennesMinutesEnCours = now.minute(); // On examine les cas des six leds au travers d'une boucle for (iNumPin = 8; iNumPin <= 13; iNumPin++) { if (iMinutesEnCours >= iValeurMinutes[iNumPin - 7]) { digitalWrite(21 - iNumPin, HIGH); iMinutesEnCours -= iValeurMinutes[iNumPin - 7]; } else { digitalWrite(21 - iNumPin, LOW); } } } }