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

Prochaine révision
Révision précédente
wiki:divers:clock_7 [2017/03/22 18:24]
Christian Simon créée
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 ===== 
 + 
 +  * [[https://www.elecrow.com/wiki/index.php?title=Tiny_RTC|Tiny RTC I2C, tutoriel et matériel chez Elecrow.]] 
 +  * [[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. 
 + 
 + 
 +===== 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;  //        |                   
 +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); 
 +}
  
-====== Webographie et composants ======+void nine() 
 +
 +  digitalWrite( aPin, LOW); 
 +  digitalWrite( bPin, LOW); 
 +  digitalWrite( cPin, LOW); 
 +  digitalWrite( dPin, LOW); 
 +  digitalWrite( ePin, HIGH); 
 +  digitalWrite( fPin, LOW); 
 +  digitalWrite( gPin, LOW); 
 +}
  
-[[https://www.elecrow.com/wiki/index.php?title=Tiny_RTC|Tiny RTC I2Ctutoriel et matériel chez Elecrow.]] +void zero() 
-[[http://www.instructables.com/id/Arduino-4-digit-7-segment-display/|Afficheur 4x7 segments 05641 A/Btutoriel sur Instructables]]+
 +  digitalWrite( aPinLOW); 
 +  digitalWrite( bPinLOW); 
 +  digitalWrite( cPin, LOW); 
 +  digitalWrite( dPin, LOW); 
 +  digitalWrite( ePin, LOW); 
 +  digitalWrite( fPin, LOW); 
 +  digitalWrite( gPin, HIGH); 
 +
 +</code>
wiki/divers/clock_7.1490207083.txt.gz · Dernière modification: 2017/03/22 18:24 de Christian Simon