Horloge digitale : Différence entre versions

De Les Fabriques du Ponant
Aller à : navigation, rechercher
Ligne 24 : Ligne 24 :
 
- un Wemos
 
- un Wemos
 
- une matrice de LED MAX7219.
 
- une matrice de LED MAX7219.
- Quelques cable dupont
+
- Quelques câbles dupont
 
tutoriel disponible sur : http://wikidebrouillard.dokit.io/wiki/Afficher_des_pictos_sur_une_matrice_de_led_8X8
 
tutoriel disponible sur : http://wikidebrouillard.dokit.io/wiki/Afficher_des_pictos_sur_une_matrice_de_led_8X8
  
Programme inspiré des exemples de la bibliothèque "LedControl.h"
 
  
  ___
+
CODE ARDUINO
/ ___ \
+
 
|_|  | |
 
    /_/
 
    _  ___  _
 
    |_| |___|_| |_
 
        ___|_  _|
 
        |___| |_|
 
Les petits Débrouillards - CC-By-Sa http://creativecommons.org/licenses/by-nc-sa/3.0/
 
Antony Le Goïc-Auffret
 
*/
 
 
#include "LedControl.h"
 
#include "LedControl.h"
 +
#include <ESP8266WiFi.h>
 +
#include <ESP8266WebServer.h>
 +
#include <Time.h>
  
 
#define CS_broche D7
 
#define CS_broche D7
 
#define CLK_broche D6
 
#define CLK_broche D6
 
#define DIN_broche D5
 
#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);   
 
LedControl lc=LedControl(DIN_broche,CLK_broche,CS_broche,4);   
Ligne 51 : Ligne 53 :
 
// le dernier chiffre indique le nombre de matrice de LED (il peut y en avoir jusqu'à 8).  
 
// le dernier chiffre indique le nombre de matrice de LED (il peut y en avoir jusqu'à 8).  
 
// ici on n'en a qu'une.
 
// ici on n'en a qu'une.
 
unsigned long dureeImage=200;  // Durée d'affichage de chaque image
 
  
 
// Pour créer une image, il faut allumer ou éteindre certaines led
 
// 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).
 
// Les valeurs qui gèrent l'allumage de chaque LED sont dans un tableau (0 = led éteinte, 1 = Led Allulmée).
byte coeurPetit[] = //le tableau contient 8 octet (byte), chaque octet code une ligne de la matrice de led
+
byte zero[]={
{
+
B00111110,
B00000000,
+
B00100010,
B00110110,
+
B00100010,
B01111111,
+
B00100010,
B01111111,
+
B00100010,
 +
B00100010,
 
B00111110,
 
B00111110,
B00011100,
+
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,
 
B00001000,
 +
B10001000,
 +
B01110000,
 +
B00000000
 +
};
 +
 +
byte six[]={
 +
B00110000,  //6
 +
B01000000,
 +
B10000000,
 +
B11110000,
 +
B10001000,
 +
B10001000,
 +
B01110000,
 
B00000000
 
B00000000
 
};
 
};
  
byte coeur[] =
+
byte sept[]={
{
+
B11111000, //7
B01100110,
+
B10001000,
B11111111,
+
B00001000,
B11111111,
+
B00010000,
B11111111,
+
B00100000,
B01111110,
+
B00100000,
B00111100,
+
B00100000,
B00011000,
 
 
B00000000
 
B00000000
 
};
 
};
  
byte coeurGros[] =
+
byte huit[]={
{
+
B01110000, //8
B11101110,
+
B10001000,
B11111111,
+
B10001000,
B11111111,
+
B01110000,
B11111111,
+
B10001000,
B11111110,
+
B10001000,
B01111100,
+
B01110000,
B00111000,
+
B00000000
B00010000
 
 
};
 
};
  
 +
 +
byte neuf[]={
 +
B01110000,  //9
 +
B10001000,
 +
B10001000,
 +
B01111000,
 +
B00001000,
 +
B00010000,
 +
B01100000,
 +
B00000000
 +
};
 
void setup()
 
void setup()
 
{
 
{
 +
  Serial.begin(115200);
 
   lc.shutdown(0,false);  // Allule la matrice de led
 
   lc.shutdown(0,false);  // Allule la matrice de led
 
   lc.setIntensity(0,1);  // règle la luminosité (de 1 à 10)
 
   lc.setIntensity(0,1);  // règle la luminosité (de 1 à 10)
 
   lc.clearDisplay(0);    // efface la matrice (éteint toute les les led).
 
   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
 
//  Prendre les valeurs dans les tableaux et les afficher
void battement1()
+
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++)   
 
   for (int i = 0; i < 8; i++)   
 
   {
 
   {
     lc.setRow(0,i,coeurPetit[i]);
+
 
 +
     lc.setRow(j,i,deux[i]);
 
   }
 
   }
 
}
 
}
  
void battement2()
+
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++)
+
   for (int i = 0; i < 8; i++)
 
   {
 
   {
     lc.setRow(0,i,coeur[i]);
+
 
 +
     lc.setRow(j,i,cinq[i]);
 
   }
 
   }
 
}
 
}
  
void battement3()
+
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++)
+
   for (int i = 0; i < 8; i++)
 
   {
 
   {
     lc.setRow(0,i,coeurGros[i]);
+
 
 +
     lc.setRow(j,i,neuf[i]);
 
   }
 
   }
 
}
 
}
 +
 +
  
 
void loop()
 
void loop()
 
{
 
{
battement1();       // on affiche la première image du petit coeur.
+
server.handleClient();
delay(dureeImage); // pendant une durée de dureeImage millisecondes
+
  time_t now;
battement2();       // on affiche la seconde image
+
  struct tm * timeinfo;
delay(dureeImage); // etc...
+
  time(&now);
battement3();
+
  timeinfo = localtime(&now); 
delay(dureeImage);
+
  Serial.println(timeinfo->tm_hour);
battement2();
+
  Serial.println(timeinfo->tm_min);
delay(dureeImage);
+
  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);
 +
 
 
}
 
}
</pre>
 
  
 
[[Catégorie:Enib2019]]
 
[[Catégorie:Enib2019]]
 +
[[horloge.jpg]]

Version du 21 janvier 2019 à 22:52

/////////////////////////////////
//                             //
//      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

#include "LedControl.h"
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Time.h>

#define CS_broche D7
#define CLK_broche D6
#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