#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include <Wire.h>
#include <RTClib.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
RTC_DS1307 rtc;
char szTime[9]; // HH:MM:SS
char szMesg[10]; // Message buffer
float celsius;
float fahrenheit;
int display = 0;
float humidity = 0; // Non utilisé avec NTC
// Configuration NTC
#define NTC_PIN A3
const float Rref = 10000.0;
const float Beta = 3950.0;
const float T0 = 298.15;
const float R0 = 10000.0;
// Déclaration du prototype de fonction pour éviter l'erreur
void getTime(char *psz, bool f = true);
void setup() {
P.begin();
P.setIntensity(0); // Luminosité de l'afficheur
P.displayText(szMesg, PA_CENTER, 100, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
Wire.begin();
rtc.begin();
if (!rtc.isrunning()) {
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
}
}
void loop() {
static uint32_t lastUpdate = 0;
static uint32_t lastDisplay = 0;
if (millis() - lastUpdate >= 1000) {
lastUpdate = millis();
getTemperature();
getTime(szTime, true);
}
if (millis() - lastDisplay >= 8000) {
lastDisplay = millis();
switch (display) {
case 0: // Heure
P.setTextEffect(0, PA_SCROLL_LEFT, PA_SCROLL_LEFT);
display++;
strcpy(szMesg, szTime);
break;
case 1: // Température °C
P.setTextEffect(0, PA_SCROLL_UP, PA_SCROLL_DOWN);
display++;
dtostrf(celsius, 5, 1, szMesg);
strcat(szMesg, "C");
break;
case 2: // Température °F
P.setTextEffect(0, PA_SCROLL_DOWN, PA_SCROLL_LEFT);
display = 0;
dtostrf(fahrenheit, 5, 1, szMesg);
strcat(szMesg, "F");
break;
}
P.displayReset(0);
}
if (P.displayAnimate()) {
// Rien à faire ici
}
}
void getTemperature() {
int analogValue = analogRead(NTC_PIN);
float voltage = analogValue * 5.0 / 1023.0;
float Rntc = (voltage * Rref) / (5.0 - voltage);
float temperatureK = 1.0 / (1.0 / T0 + (1.0 / Beta) * log(Rntc / R0));
celsius = temperatureK - 273.15;
fahrenheit = celsius * 1.8 + 32;
}
void getTime(char *psz, bool f) {
DateTime now = rtc.now();
sprintf(psz, "%02d:%02d", now.hour(), now.minute());
}