Tout d'abord, désoler pour mon post d'hier bâclé je suis aller voir les messages épinglés.
Ensuite,
Bonsoir, J'essaye désespérément de faire une horloge avec 4 digit de 7 segments sans succes.
J'utilise une Arduino genuino UNO,
Un module horloge DS3231 RTC
Et bien sur un afficheur 7 segments,
Le problème est que j'arrive trés bien a récupérer le code du module horloge et d'afficher un nombre sur mes digits mais je n'arrive pas a afficher l'heure que je récupéré sur le module RTC sur mes digits.
Sa affiche "-56 " sur mes digits
Quand aux codes, ils ne sont pas optimisés j'espère donc pouvoir trouver quelqu'un qui pourrais non pas me faire le code mais m'éclairer sur le code et surtout sur la partie affichage.
Le code de l'afficheur (J'utilise la fonction SetAfficheur(xxxx);)(Le code n'est pas de moi mais de Imake-Tuto)
int digit1 = A1;
int digit2 = A2;
int digit3 = A3;
int digit4 = A4;
int A = 1;
int B = 2;
int C = 3;
int D = 4;
int E = 5;
int F = 6;
int G = 7;
void setup() {
pinMode(A1, OUTPUT) ;
pinMode(A2, OUTPUT) ;
pinMode(A3, OUTPUT) ;
pinMode(A4, OUTPUT) ;
pinMode(1, OUTPUT) ;
pinMode(2, OUTPUT) ;
pinMode(3, OUTPUT) ;
pinMode(4, OUTPUT) ;
pinMode(5, OUTPUT) ;
pinMode(6, OUTPUT) ;
pinMode(7, OUTPUT) ;
//Désactivation de tous les digits
digitalWrite(digit1, HIGH);
digitalWrite(digit2, HIGH);
digitalWrite(digit3, HIGH);
digitalWrite(digit4, HIGH);
}
void loop() {
setAfficheur(1765);
}
//-------------------------------
// Définition des FONCTIONS
//-------------------------------
void setNumber(int nombre) {
switch (nombre) {
case 1 :
digitalWrite(A, 0) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 0) ;
break;
case 2 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 0) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 0) ;
digitalWrite(G, 1) ;
break;
case 3 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 1) ;
break;
case 4 :
digitalWrite(A, 0) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 5 :
digitalWrite(A, 1) ;
digitalWrite(B, 0) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 0) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 6 :
digitalWrite(A, 1) ;
digitalWrite(B, 0) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 7 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 0) ;
break;
case 8 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 9 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 0) ;
digitalWrite(F, 1) ;
digitalWrite(G, 1) ;
break;
case 0 :
digitalWrite(A, 1) ;
digitalWrite(B, 1) ;
digitalWrite(C, 1) ;
digitalWrite(D, 1) ;
digitalWrite(E, 1) ;
digitalWrite(F, 1) ;
digitalWrite(G, 0) ;
break;
default:
digitalWrite(A, 0) ;
digitalWrite(B, 0) ;
digitalWrite(C, 0) ;
digitalWrite(D, 0) ;
digitalWrite(E, 0) ;
digitalWrite(F, 0) ;
digitalWrite(G, 1) ;
break;
break;
}
}
void setDigit(int digit, int nombre) {
switch(digit) {
case 1 :
digitalWrite(digit1, LOW) ;
digitalWrite(digit2, HIGH) ;
digitalWrite(digit3, HIGH) ;
digitalWrite(digit4, HIGH) ;
setNumber(nombre) ;
break;
case 2 :
digitalWrite(digit1, HIGH) ;
digitalWrite(digit2, LOW) ;
digitalWrite(digit3, HIGH) ;
digitalWrite(digit4, HIGH) ;
setNumber(nombre) ;
break;
case 3 :
digitalWrite(digit1, HIGH) ;
digitalWrite(digit2, HIGH) ;
digitalWrite(digit3, LOW) ;
digitalWrite(digit4, HIGH) ;
setNumber(nombre) ;
break;
case 4 :
digitalWrite(digit1, HIGH) ;
digitalWrite(digit2, HIGH) ;
digitalWrite(digit3, HIGH) ;
digitalWrite(digit4, LOW) ;
setNumber(nombre) ;
break;
}
}
void setAfficheur(int nombre) {
int M = nombre/1000, C = (nombre-M*1000)/100, D = (nombre-M*1000-C*100)/10,
U=(nombre-M*1000-C*100-D*10) ;
setDigit(4, U) ;
delay(2);
setDigit(3, D) ;
delay(2);
setDigit(2, C) ;
delay(2);
setDigit(1, M) ;
delay(2);
}
Le code pour récupérer l'heure (Exemples trouver sur le logiciel arduino)
// now.pde
// Prints a snapshot of the current date and time along with the UNIX time
// Modified by Andy Wickert from the JeeLabs / Ladyada RTC library examples
// 5/15/11
#include <Wire.h>
#include "DS3231.h"
RTClib RTC;
void setup () {
Serial.begin(57600);
Wire.begin();
}
void loop () {
delay(1000);
DateTime now = RTC.now();
Serial.print(now.year(), DEC);
Serial.print('/');
Serial.print(now.month(), DEC);
Serial.print('/');
Serial.print(now.day(), DEC);
Serial.print(' ');
Serial.print(now.hour(), DEC);
Serial.print(':');
Serial.print(now.minute(), DEC);
Serial.print(':');
Serial.print(now.second(), DEC);
Serial.println();
Serial.print(" since midnight 1/1/1970 = ");
Serial.print(now.unixtime());
Serial.print("s = ");
Serial.print(now.unixtime() / 86400L);
Serial.println("d");
}
Pour les librairies je veut bien en télécharger de nouvelles.
J'espère etre compréhensible,
Cordialement,