Bonsoir,
Je reposte un nouveau sujet,
Je souhaite faire une horloge avec des digits
Carte utiliser : Arduino Genuino Uno R3
Module RTC : DS3213
Afficheur : hs420561k-32 (4 digit de chacun 7 segments)
Le probleme c'est que sur mes digits sa m'affiche : 0 RIEN RIEN 0
Au lieu de 22:02
Le code
#include <config.h>
#include <DS3231.h>
#include <Wire.h>
DS3231 clock;
RTCDateTime dt;
int memo_secondes = 0;
unsigned long temps_top = 0;
boolean top = false;
boolean dp = true;
int dgp = 0;
int h = 0;
int mn = 0;
int s = 0;
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;
int x = 10;
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() {
clock.begin();
dt = clock.getDateTime();
h = atoi(clock.dateFormat("H", dt));
mn = atoi(clock.dateFormat("i", dt));
setAfficheur(mn,h);
}
//-------------------------------
// 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 nombrea) {
int M = nombre / 1000, C = (nombre - M * 1000) / 100, D = (nombre - M * 1000 - C * 100) / 10,U = (nombre - M * 1000 - C * 100 - D * 10);
int Ma = nombrea / 1000, Ca = (nombrea - Ma * 1000) / 100;
setDigit(4, U) ;
delay(2);
setDigit(3, D) ;
delay(2);
setDigit(2, Ca) ;
delay(2);
setDigit(1, Ma) ;
delay(2);
}
Quand je change le void loop comme sa :
void loop() {
setAfficheur(16,21);
}
Cela m'affiche : 0 0 1 6 au lieu de : 1 6 2 1
J'éspère avoir été compréhensif,
Cordialement,