#include <RTClib.h> // pour DS3231 ou DS1307
RTC_DS3231 rtc;
const int latchPin = 8;
const int clockPin = 12;
const int dataPin = 11;
const byte digitPins[4] = {2, 3, 4, 5}; // Contrôle des digits
const byte numbers[10] = {
0b00111111, // 0
0b00000110, // 1
0b01011011, // 2
0b01001111, // 3
0b01100110, // 4
0b01101101, // 5
0b01111101, // 6
0b00000111, // 7
0b01111111, // 8
0b01101111 // 9
};
byte DPvalue = 0b00000000;
int sec=0;
void setup() {
for (int i = 0; i < 4; i++) {
pinMode(digitPins[i], OUTPUT);
digitalWrite(digitPins[i], LOW);
}
pinMode(latchPin, OUTPUT);
pinMode(clockPin, OUTPUT);
pinMode(dataPin, OUTPUT);
rtc.begin();
}
void loop() {
// Affiche "1234"
DateTime now = rtc.now();
sec=now.second();
int digits[4] = {
now.hour() / 10,
now.hour() % 10,
now.minute() / 10,
now.minute() % 10
};
for (int i = 0; i < 4; i++) {
// Éteindre tous les digits avant d'afficher
for (int j = 0; j < 4; j++) {
digitalWrite(digitPins[j], HIGH);
}
if (i == 1 && sec % 2 == 0 ) {
DPvalue = numbers[digits[i]];
DPvalue |= 0b10000000; // Active le DP (bit 7 = 1)
// Envoyer les segments
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, DPvalue);
digitalWrite(latchPin, HIGH);
digitalWrite(digitPins[i], LOW);
}
else{
// Envoyer les segments
digitalWrite(latchPin, LOW);
shiftOut(dataPin, clockPin, MSBFIRST, numbers[digits[i]]);
digitalWrite(latchPin, HIGH);
digitalWrite(digitPins[i], LOW);
}
delay(20); // court délai
}
}