1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124
| #include <RTClib.h>
RTC_DS3231 rtc;
const char* nomDesJours[] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
DateTime premierJanvier(2020, 1, 1, 0, 0, 0); // point de référence 1er Janvier à 0h00
#include <SPI.h>
#include <SdFat.h>
#define CS_PIN SS
SdFat SD;
const char* nomElevation = "e.bin";
File fichierElevation;
const char* nomAzimuth = "a.bin";
File fichierAzimuth;
void erreurFatale(const __FlashStringHelper *message)
{
Serial.print(F("ERREUR: ")); Serial.println(message);
while (true); // on meurt là
}
void afficherSurDeuxChiffres(uint16_t nombre)
{
if (nombre < 10) Serial.write('0');
Serial.print(nombre);
}
float lireElevation(int16_t jour, uint8_t heure)
{
float e;
uint32_t premierOctet = (24UL * jour + heure) * sizeof(float);
fichierElevation = SD.open(nomElevation, O_RDONLY); // ouverture en lecture seule
if (!fichierElevation) erreurFatale(F("Fichier Elevation introuvable"));
fichierElevation.seekSet(premierOctet);
if (fichierElevation.read(&e, sizeof(float)) != sizeof(float)) e = NAN;
fichierElevation.close();
return e;
}
float lireAzimuth(int16_t jour, uint8_t heure)
{
float a;
uint32_t premierOctet = (24UL * jour + heure) * sizeof(float);
fichierAzimuth = SD.open(nomAzimuth, O_RDONLY); // ouverture en lecture seule
if (!fichierAzimuth) erreurFatale(F("Fichier Azimuth introuvable"));
fichierAzimuth.seekSet(premierOctet);
if (fichierAzimuth.read(&a, sizeof(float)) != sizeof(float)) a = NAN;
fichierAzimuth.close();
return a;
}
void setup() {
Serial.begin(115200);
if (! rtc.begin()) erreurFatale(F("Horloge RTC introuvable"));
rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // à faire UNE FOIS si votre RTC n'est pas à jour pour la mettre à l'heure sinon commenter.
// rtc.adjust(DateTime(2020, 1, 2, 10, 30, 0)); // ou pour essayer une date précise, ici le 2 janvier à 10h30
// rtc.adjust(DateTime(2020, 1, 3, 21, 45, 0)); // ou pour essayer une date précise, ici le 3 janvier à 21h45
if (!SD.begin(CS_PIN)) erreurFatale(F("lecteur SD introuvable"));
// on vérifie que les fichiers sont là
fichierElevation = SD.open(nomElevation, O_RDONLY); // ouverture en lecture seule
if (!fichierElevation) erreurFatale(F("Fichier Elevation introuvable"));
fichierElevation.close();
fichierAzimuth = SD.open(nomAzimuth, O_RDONLY); // ouverture en lecture seule
if (!fichierAzimuth) erreurFatale(F("Fichier Elevation introuvable"));
fichierAzimuth.close();
}
void loop()
{
int16_t numJour;
uint8_t numHeure;
float elevation, azimuth;
DateTime maintenant = rtc.now(); // l'heure actuelle
TimeSpan depuisLePremierJanvier = maintenant - premierJanvier; // la différence de temps entre maintenant et le 1/1/2020
numJour = depuisLePremierJanvier.days();
numHeure = maintenant.hour();
Serial.print(nomDesJours[maintenant.dayOfTheWeek()]);
Serial.write(' ');
Serial.print(maintenant.day());
Serial.write('/');
Serial.print(maintenant.month());
Serial.write('/');
Serial.print(maintenant.year());
Serial.write('\t');
Serial.print(maintenant.hour());
Serial.write(':');
afficherSurDeuxChiffres(maintenant.minute());
Serial.write(':');
afficherSurDeuxChiffres(maintenant.second());
Serial.write('\t');
Serial.print(F("Jour N° ")); Serial.print(numJour);
Serial.write(' ');
Serial.print(F("Heure N° ")); Serial.print(numHeure);
Serial.print(F(""));
uint32_t chrono = millis();
elevation = lireElevation(numJour, numHeure);
azimuth = lireAzimuth(numJour, numHeure);
Serial.print(F("-> E:"));
if (isnan(elevation)) Serial.print(F("--")); else Serial.print(elevation, 2);
Serial.print(F(" A="));
if (isnan(azimuth)) Serial.print(F("--")); else Serial.print(azimuth, 2);
Serial.print(F(" ("));
Serial.print((millis() - chrono)) ;
Serial.println(F("ms)"));
delay(5000);
} |
Partager