Horloge avec affichage LCD




Ce programme permettra d'avoir l'une heure et la date sur un afficheur LCD.

Pour cela il vous faut:

Une carte Arduino Uno.

Un module DCF77.

Un afficheur LCD 2*16 caractéres.


Le montage:

Montage LCD identique avec un déplacement de connexion 14 en 6 au lieu de 2 sur Arduino fil jaune.



Installation de la librairie: voir chapitre ici.


Télécharger mon programme DCF77_LCD1



#include "DCF77.h"                // Librairie DCF77

#include "Time.h"                 // Librairie Time

#include <LiquidCrystal.h>        // Librairie LCD


// Initialisation des connexions de l'afficheur LCD

// et définit les broches utilisées RS=12, E=11, D4=5, D5=4, D6=3, D7=6.

LiquidCrystal lcd(12, 11, 5, 4, 3, 6);


// Initialisation du récepteur DCF77 réception pin2 Interruption 0

DCF77 DCF(2,0);


time_t time;


char cara=' ';   // caractère de séparation

int compteur=0; // déclaration compteur et mise à zero


// Création du caractère :-)

byte smiley1[8] = { // déclaration d'un tableau de 8 octets

 B11011,  // 1 pour pixel affiché - 0 pour pixel éteint

 B00000, // définition de chaque octet au format binaire

 B00100, // les 3 bits de poids forts ne sont pas écrits car inutiles

 B00100,

 B00000,

 B10001,

 B01110,

};


// Création du caractère :-(

byte smiley2[8] = { // déclaration d'un tableau de 8 octets

 B11011,  // 1 pour pixel affiché - 0 pour pixel éteint

 B00000, // définition de chaque octet au format binaire

 B00100, // les 3 bits de poids forts ne sont pas écrits car inutiles

 B00100,

 B00000,

 B01110,

 B10001,

};


void setup() {

 lcd.createChar(1, smiley1); // création du caractère personnalisé numéro 1 :-)

 lcd.createChar(2, smiley2); // création du caractère personnalisé numéro 2 :-(

 lcd.begin(16, 2);           // Initialisation de l'afficheur

 lcd.setCursor(0, 0);        // Positionnement du curseur en position 1 er ligne 1 er caractère

 DCF.Start();                // Mise en marche du décodage DCF

 lcd.print("Attendre ");     // Message Attendre

 lcd.setCursor(0, 1);        // Positionnement sur la deuxième ligne

 lcd.print("signal DCF77");  // Message signale DCF77

 delay(3000);                // Tempo de 3 secondes

 lcd.setCursor(0, 1);        // Positionnement sur la deuxième ligne

 lcd.print("2 minutes      ");  // Message 2 minutes

 delay(3000);                // Tempo de 3 secondes

}


void loop() {

 ++compteur;                         // ajout +1 au compteur

 if (compteur>32000) {compteur=1;}   //Si compteur >32000 mise à 1 du compteur

 delay(1000);                        // Temporisation de 1 seconde

 time_t DCFtime = DCF.getTime();     // contrôle si signale disponible

 if (DCFtime!=0)                     // si différent de 0

 {

   lcd.setCursor(15, 0);              // Position du curseur sur ligne 1 caractère 15

   lcd.write(1);                      // Signal bon affiche sur le LCD :-)

   setTime(DCFtime);                  // Lecture des données

   compteur=0;                        // Mise à zéro du compteur

 }

 else

 {

   if (compteur>240) {                // Si compteur >3 minutes

   lcd.setCursor(15, 0);              // Position du curseur sur ligne 1 caractère 15

   lcd.write(2);                      // Signal mauvais affiche sur le LCD :-(

   }

 }        

 digitalClockDisplay();              // Routine Affichage de l'heure et date

}


void digitalClockDisplay(){

 // affichage de l'heure et de la date

 lcd.setCursor(0, 0);              // Curseur 1 er ligne et 1 er caractère

 printDigits(hour());              //Affichage heure

 cara=':';                         // caractère de séparation

 printDigits(minute());            //Affichage minute

 printDigits(second());            //Affichage seconde

 lcd.setCursor(0, 1);              // Curseur 2 ieme ligne et 1 er caractère

 cara=' ';                         // caractère de séparation

 printDigits(day());               //Affichage jour

 printDigits(month());             //Affichage mois

 printDigits(year());              //Affichage année

}


//Routine pour ajouter caractère de séparation et 0 si chiffre <10

void printDigits(int digits){

 lcd.print(cara);                  //Affichage du caractère de séparation

 if(digits < 10)                   // Si valeur <10

   lcd.print('0');                 // affichage 0

 lcd.print(digits);               // Affichage valeur

}


Une fois votre montage effectué bien sur hors tension. Brancher votre carte en USB sur votre ordinateur. Ouvrir le logiciel Arduino et ouvrir le fichier.

Après faire un clique sur l’icône pour faire le transfert vers la carte Arduino Uno.


Faire un reset de la carte.


Voici le résultat:




Mise à jour 25/07/2013

Créé avec HelpNDoc Personal Edition: Générateur de documentation d'aide HTML gratuit