Horloge digitale

De Les Fabriques du Ponant
Aller à : navigation, rechercher
/////////////////////////////////
//                             //
//      Afficher des Pictos    //
//  Sur une matrice de LED 8X8 //
//                             //
/////////////////////////////////
///////////////////////////////////////////////////////////////////
//                           BROCHAGE                            //
//                      _________________                        //
//                     /     D1 mini     \                       //
//                 -  |[ ]RST        TX[ ]| -                    //
//                 -  |[ ]A0         RX[ ]| -                    //
//                 -  |[ ]D0         D1[ ]| -                    //
//             Din -  |[X]D5         D2[ ]| -                    //
//             CLK -  |[X]D6         D3[ ]| -                    //
//              CS -  |[X]D7         D4[ ]| LED_BUILTIN          //
//                 -  |[ ]D8        GND[X]| -                    //
//                 -  |[X]3V3 .      5V[ ]| -                    //
//                    |       +---+       |                      //
//                    |_______|USB|_______|                      //
///////////////////////////////////////////////////////////////////      
/*

Matériel

- un Wemos - une matrice de LED MAX7219. - Quelques câbles dupont tutoriel disponible sur : http://wikidebrouillard.dokit.io/wiki/Afficher_des_pictos_sur_une_matrice_de_led_8X8


Code Arduino

  1. include "LedControl.h"
  2. include <ESP8266WiFi.h>
  3. include <ESP8266WebServer.h>
  4. include <Time.h>
  1. define CS_broche D7
  2. define CLK_broche D6
  3. define DIN_broche D5

// Identifiant WIFI à inscrire en dur const char* ssid = "G6_7499"; // Identifiant WiFi const char* password = "gabriell"; // Mot de passe WiFi

int timezone = 3; int dst = 0;

ESP8266WebServer server(80);

LedControl lc=LedControl(DIN_broche,CLK_broche,CS_broche,4); // On défini un ensemble de matrice de led "lc". // Dans l'ordre, on branche les broches Din sur la broche D5, CLK sur D6, CS sur D7. // le dernier chiffre indique le nombre de matrice de LED (il peut y en avoir jusqu'à 8). // ici on n'en a qu'une.

// Pour créer une image, il faut allumer ou éteindre certaines led // Les valeurs qui gèrent l'allumage de chaque LED sont dans un tableau (0 = led éteinte, 1 = Led Allulmée). byte zero[]={ B00111110, B00100010, B00100010, B00100010, B00100010, B00100010, B00111110, B00000000 };


byte un[]={ B00010000, B00110000, B01010000, B10010000, B00010000, B00010000, B00010000, B00000000 };

byte deux[]={ B01110000, B10001000, B00001000, B00010000, B00100000, B01000000, B11111000, B00000000 };

byte trois[]={ B11111000, //3 B00010000, B00100000, B00010000, B00001000, B10001000, B01110000, B00000000 };

byte quatre[]={ B00010000, //4 B00110000, B01010000, B10010000, B11111000, B00010000, B00010000, B00000000 };

byte cinq[]={ B11111000, //5 B10000000, B11110000, B00001000, B00001000, B10001000, B01110000, B00000000 };

byte six[]={ B00110000, //6 B01000000, B10000000, B11110000, B10001000, B10001000, B01110000, B00000000 };

byte sept[]={ B11111000, //7 B10001000, B00001000, B00010000, B00100000, B00100000, B00100000, B00000000 };

byte huit[]={ B01110000, //8 B10001000, B10001000, B01110000, B10001000, B10001000, B01110000, B00000000 };


byte neuf[]={ B01110000, //9 B10001000, B10001000, B01111000, B00001000, B00010000, B01100000, B00000000 }; void setup() {

 Serial.begin(115200);
 lc.shutdown(0,false);  // Allule la matrice de led
 lc.setIntensity(0,1);  // règle la luminosité (de 1 à 10)
 lc.clearDisplay(0);    // efface la matrice (éteint toute les les led).
 lc.shutdown(1,false);  // Allule la matrice de led
 lc.setIntensity(0,1);  // règle la luminosité (de 1 à 10)
 lc.clearDisplay(0);    // efface la matrice (éteint toute les les led).
 lc.clearDisplay(1);    // efface la matrice (éteint toute les les led).
 lc.shutdown(2,false);  // Allule la matrice de led
 lc.setIntensity(0,1);  // règle la luminosité (de 1 à 10)
 lc.clearDisplay(0);    // efface la matrice (éteint toute les les led).
 lc.shutdown(3,false);  // Allule la matrice de led
 lc.setIntensity(0,1);  // règle la luminosité (de 1 à 10)
 lc.clearDisplay(0);    // efface la matrice (éteint toute les les led).
 // On démarre le moniteur série , afin d'avoir des infos sur l’état du serveur et récupérer l'adresse IP de la carte.

// Démarrage de la connection WIFI

 WiFi.begin(ssid, password);

// debug - affichage dans moniteur série

 Serial.println("");
 // on attend d’être connecté  au WiFi avant de continuer
 while (WiFi.status() != WL_CONNECTED) {
   delay(500);
   Serial.print(".");
 }
  configTime(timezone * 3600, dst * 0, "pool.ntp.org", "time.nist.gov");
 Serial.println("\nWaiting for time");
 while (!time(nullptr)) {
   Serial.print(".");
   delay(1000);
 }
 Serial.println("");
 // on affiche l'adresse IP attribuée pour le serveur WEB
 Serial.println("");
 Serial.print("IP address: ");
 Serial.println(WiFi.localIP());
 
 // on definit les points d’entrée (les URL à saisir dans le navigateur web) et on affiche un simple texte 
 server.on("/", [](){
   server.send(200, "text/plain", "Bienvenue sur le serveur de temps");
 });


 // on démarre le serveur web 
 server.begin();

}


// Prendre les valeurs dans les tableaux et les afficher void fonction0(int j) {

 for (int i = 0; i < 8; i++)  
 {
   lc.setRow(j,i,zero[i]);
 }

}

void fonction1(int j) {

 for (int i = 0; i < 8; i++)  
 {
   lc.setRow(j,i,un[i]);
 }

}

void fonction2(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,deux[i]);
 }

}

void fonction3(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,trois[i]);
 }

} void fonction4(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,quatre[i]);
 }

} void fonction5(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,cinq[i]);
 }

}

void fonction6(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,six[i]);
 }

} void fonction7(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,sept[i]);
 }

} void fonction8(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,huit[i]);
 }

} void fonction9(int j) {

 for (int i = 0; i < 8; i++)  
 {
 
   lc.setRow(j,i,neuf[i]);
 }

}


void loop() { server.handleClient();

 time_t now;
 struct tm * timeinfo;
 time(&now);
 timeinfo = localtime(&now);  
 Serial.println(timeinfo->tm_hour);
 Serial.println(timeinfo->tm_min);
 int minutes=timeinfo->tm_min;
 int uniteminute = minutes % 10;
 int dizaineminute = minutes / 10 % 10;
 int heures=timeinfo->tm_hour;
 int uniteheure = (heures % 10)-2;   //car heure anglaise
 int dizaineheure = heures / 10 % 10;
 /*Serial.println(dizaineheure);
 Serial.println(dizaineminute);
 Serial.println(uniteheure);
 Serial.println(uniteminute);*/
 switch(dizaineheure) {
 case 0 :
   fonction0(0);
   break;
 case 1 :
   fonction1(0);
   break;
 case 2 :
   fonction2(0);
   break;
 }
switch(uniteheure) {
 case 0 :
   fonction0(0);
   break;
 case 1 :
   fonction1(1);
   break;
 case 2 :
   fonction2(1);
   break;
 case 3 :
   fonction3(1);
   break;
 case 4 :
   fonction4(1);
   break;
 case 5 :
   fonction5(1);
   break;
 case 6 :
   fonction6(1);
   break;
 case 7 :
   fonction7(1);
   break;
 case 8 :
   fonction8(1);
   break;
 case 9 :
   fonction9(1);
   break;
 }
  switch(dizaineminute) {
 case 0 :
   fonction0(2);
   break;
 case 1 :
   fonction1(2);
   break;
 case 2 :
   fonction2(2);
   break;
 case 3 :
   fonction3(2);
   break;
 case 4 :
   fonction4(2);
   break;
 case 5 :
   fonction5(2);
   break;
 }
switch(uniteminute) {
 case 0 :
   fonction0(3);
   break;
 case 1 :
   fonction1(3);
   break;
 case 2 :
   fonction2(3);
   break;
 case 3 :
   fonction3(3);
   break;
 case 4 :
   fonction4(3);
   break;
 case 5 :
   fonction5(3);
   break;
 case 6 :
   fonction6(3);
   break;
 case 7 :
   fonction7(3);
   break;
 case 8 :
   fonction8(3);
   break;
 case 9 :
   fonction9(3);
   break;
 }
 
 delay(1000);

} Horloge.jpg