Outils pour utilisateurs

Outils du site


wiki:divers:clock_7

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
wiki:divers:clock_7 [2017/03/22 18:30]
Christian Simon [Webographie et composants]
wiki:divers:clock_7 [2017/03/23 08:45] (Version actuelle)
Christian Simon
Ligne 1: Ligne 1:
 ====== Horloge 4x7 segments ====== ====== Horloge 4x7 segments ======
 +
 +===== Le projet =====
 +
 +Contact : C. Simon
  
 Prétexte : les réveils matin vendus de nos jours ignorent superbement que l'affichage nocturne devrait être rouge, pour éviter d'éblouir. Prétexte : les réveils matin vendus de nos jours ignorent superbement que l'affichage nocturne devrait être rouge, pour éviter d'éblouir.
  
-En fait : j'avais envie d'utiliser des afficheurs 7 segments.+En fait : j'avais envie d'utiliser des afficheurs 7 segments, et un module d'horloge (Real Time Clock = RTC).
  
-====== Webographie et composants ======+===== Webographie et composants =====
  
   * [[https://www.elecrow.com/wiki/index.php?title=Tiny_RTC|Tiny RTC I2C, tutoriel et matériel chez Elecrow.]]   * [[https://www.elecrow.com/wiki/index.php?title=Tiny_RTC|Tiny RTC I2C, tutoriel et matériel chez Elecrow.]]
-  * [[https://www.sparkfun.com/products/retired/12098|Afficheur 4x7 segments 05641 A/B]],[[http://www.instructables.com/id/Arduino-4-digit-7-segment-display/|tutoriel sur Instructables]]+  * [[http://www.datasheetarchive.com/dl/7e51528b5a44be578591835da8924b2a72d4f9/P/05641A|Afficheur 4x7 segments 05641 A/B]],[[http://www.instructables.com/id/Arduino-4-digit-7-segment-display/|tutoriel sur Instructables]]
   * Arduino Nano, parce qu'il est petit.   * Arduino Nano, parce qu'il est petit.
  
 +
 +===== Difficultés =====
 +
 +L'afficheur est mal identifié. Il est écrit 05641 A/B... C'est un B (A et B différent par la polarité des LED).
 +
 +Les sorties de l'Arduino (qui dans le code sont nommées GND1, GND2, GND3, GND4 pour chaque chiffre) devraient être renommées COM1, COM2...
 +
 +Après avoir fait des échanges entre niveaux HIGH et LOW pour tenir compte du type A<->B de l'afficheur, on tatonne un peu pour trouver comment insérer l'allumage périodique d'un point décimal clignotant. Aussi des tatonnements pour essayer de régler la luminosité en jouant sur les temps d'allumage/extinction, mais on provoque assez vite un scintillement désagréable. En outre, certains segments ne sont pas franchement éteint mais restent un peu lumineux... Code final ci-dessous.
 +
 +Voici le résultat.
 +
 +===== Reste à faire =====
 +
 +Il reste des entrées analogiques sur l'Arduino Nano. Si on arrive à régler la luminosité, on peut envisager une luminosité variable automatiquement en fonction de l'éclairage ambiant.
 +
 +On peut encore envisager de mettre des boutons (réglage alarme ?).
 +
 +Mais il n'y a plus de sorties pour contrôler autre chose : pas de musique ni d'éclairage progressif.
 +Moche, et ce ne sera pas mieux avec un Uno. Il va falloir trouver un décodeur ou autre chose.
 +
 +===== Code =====
 +
 +
 +<code>
 +#include <Wire.h>
 +#include "RTClib.h"
 +RTC_DS1307 RTC;
 +
 +
 +int aPin = 2;  //                     A
 +int bPin = 3;  //             ________
 +int cPin = 4;  //                             |
 +int dPin = 5;  //        |                    B
 +int ePin = 6;  //                         |
 +int fPin = 7;  //            |________|
 +int gPin = 8;  //                             |
 +int dotPin = 13;
 +int GND1 = 9;  //        |                   |
 +int GND2 = 10; //   E |                     C
 +int GND3 = 11; //       |________|
 +int GND4 = 12; //       
 +int num;       //         D
 +int dig1 = 0;
 +int dig2 = 0;
 +int dig3 = 0;
 +int dig4 = 0;
 +
 +int HTime = 1;
 +int LTime = 1;
 +int OTime = 0;
 +
 +int secondes = 0 ;
 +int minutes = 0 ;
 +int heures = 0;
 +void setup()
 +{
 +  pinMode(aPin, OUTPUT);
 +  pinMode(bPin, OUTPUT);
 +  pinMode(cPin, OUTPUT);
 +  pinMode(dPin, OUTPUT);
 +  pinMode(ePin, OUTPUT); 
 +  pinMode(fPin, OUTPUT);
 +  pinMode(gPin, OUTPUT);
 +  pinMode(dotPin, OUTPUT);
 +  pinMode(GND1, OUTPUT);
 +  pinMode(GND2, OUTPUT);
 +  pinMode(GND3, OUTPUT);
 +  pinMode(GND4, OUTPUT);
 +//  Serial.begin(9600);
 +
 +  Wire.begin();
 +  RTC.begin();
 +  if (! RTC.isrunning()) {
 +//    Serial.println("RTC is NOT running!");
 +    // following line sets the RTC to the date & time this sketch was compiled
 +    RTC.adjust(DateTime(__DATE__, __TIME__));
 +  }
 +}
 +  
 +
 +void loop()
 +{
 +  DateTime now = RTC.now();
 +  secondes = now.second(); 
 +  minutes = now.minute();
 +  heures = now.hour();
 +
 +  dig1 = minutes % 10 ;
 +  dig2 = minutes/10 ;
 +  dig3 = heures % 20 ;
 +  dig4 = heures/10;
 +
 +
 +    
 +  digitalWrite( GND1, LOW);
 +  digitalWrite( GND2, LOW);
 +  digitalWrite( GND3, LOW);
 +  digitalWrite( GND4, LOW);
 +
 +  delay(OTime);
 +  
 +  digitalWrite( GND4, HIGH);    //digit 4
 +  pickNumber(dig4);
 +  delay(HTime);
 +  digitalWrite( GND4, LOW);
 +  delay(LTime);   
 +  
 +  digitalWrite( GND3, HIGH);    //digit 3
 +  if(secondes % 2) { digitalWrite( dotPin, LOW); } 
 +  pickNumber(dig3);
 +  delay(HTime);
 +  digitalWrite( GND3, LOW);
 +  digitalWrite( dotPin, HIGH);
 +  delay(LTime);
 +  
 +  digitalWrite( GND2, HIGH);   //digit 2
 +  pickNumber(dig2);
 +  delay(HTime);
 +  digitalWrite( GND2, LOW);
 +  delay(LTime); 
 +  
 +  digitalWrite( GND1, HIGH);   //digit 1
 +  pickNumber(dig1);
 +  delay(HTime);
 +  digitalWrite( GND1, LOW);
 +  delay(LTime);
 +
 +}
 + 
 +void pickNumber(int x){
 +   switch(x){
 +     case 1: one(); break;
 +     case 2: two(); break;
 +     case 3: three(); break;
 +     case 4: four(); break;
 +     case 5: five(); break;
 +     case 6: six(); break;
 +     case 7: seven(); break;
 +     case 8: eight(); break;
 +     case 9: nine(); break;
 +     default: zero(); break;
 +   }
 +}
 +
 +void clearLEDs()
 +{  
 +  digitalWrite(  2, HIGH); // A
 +  digitalWrite(  3, HIGH); // B
 +  digitalWrite(  4, HIGH); // C
 +  digitalWrite(  5, HIGH); // D
 +  digitalWrite(  6, HIGH); // E
 +  digitalWrite(  7, HIGH); // F
 +  digitalWrite(  8, HIGH); // G
 +}
 +
 +void one()
 +{
 +  digitalWrite( aPin, HIGH);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, HIGH);
 +  digitalWrite( ePin, HIGH);
 +  digitalWrite( fPin, HIGH);
 +  digitalWrite( gPin, HIGH);
 +}
 +
 +void two()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, HIGH);
 +  digitalWrite( dPin, LOW);
 +  digitalWrite( ePin, LOW);
 +  digitalWrite( fPin, HIGH);
 +  digitalWrite( gPin, LOW);
 +}
 +
 +void three()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, LOW);
 +  digitalWrite( ePin, HIGH);
 +  digitalWrite( fPin, HIGH);
 +  digitalWrite( gPin, LOW);
 +}
 +
 +void four()
 +{
 +  digitalWrite( aPin, HIGH);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, HIGH);
 +  digitalWrite( ePin, HIGH);
 +  digitalWrite( fPin, LOW);
 +  digitalWrite( gPin, LOW);
 +}
 +
 +void five()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, HIGH);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, LOW);
 +  digitalWrite( ePin, HIGH);
 +  digitalWrite( fPin, LOW);
 +  digitalWrite( gPin, LOW);
 +}
 +
 +void six()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, HIGH);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, LOW);
 +  digitalWrite( ePin, LOW);
 +  digitalWrite( fPin, LOW);
 +  digitalWrite( gPin, LOW);
 +}
 +
 +void seven()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, HIGH);
 +  digitalWrite( ePin, HIGH);
 +  digitalWrite( fPin, HIGH);
 +  digitalWrite( gPin, HIGH);
 +}
 +
 +void eight()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, LOW);
 +  digitalWrite( ePin, LOW);
 +  digitalWrite( fPin, LOW);
 +  digitalWrite( gPin, LOW);
 +}
 +
 +void nine()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, LOW);
 +  digitalWrite( ePin, HIGH);
 +  digitalWrite( fPin, LOW);
 +  digitalWrite( gPin, LOW);
 +}
 +
 +void zero()
 +{
 +  digitalWrite( aPin, LOW);
 +  digitalWrite( bPin, LOW);
 +  digitalWrite( cPin, LOW);
 +  digitalWrite( dPin, LOW);
 +  digitalWrite( ePin, LOW);
 +  digitalWrite( fPin, LOW);
 +  digitalWrite( gPin, HIGH);
 +}
 +</code>
wiki/divers/clock_7.1490207439.txt.gz · Dernière modification: 2017/03/22 18:30 de Christian Simon