J'ai un programme qui me permet de récupérer des températures / humidités et je souhaite ensuite les stocker sur une carte SD avec la date et l'heure 'acquisition.
Le soucis c'est que, par exemple, si on est le 12/01/2022 ou qu'il est 14h01, ca va enregistrer:
12/1/2022 et 14:1
Après je galère à traiter ce format heure.
Il faudrait que j'obtienne aaaa/mm/jj hh:mm
Sauriez-vous comment je peux réussir à remédier à ca ??
Merci beaucoup !!!!
#include <SD.h>
#include <SPI.h>
#include <Wire.h>
#include <ds3231.h> //Librairie à installer
#include "DHT.h" //Librairie à installer
* Affectation des broches
#define CS_PIN 10 // arduino UNO
#define DHTPIN 2
#define DHTTYPE DHT22
* Création des instances
File monFichier1;
DHT monDHT(DHTPIN, DHTTYPE);
struct ts t; // module RTC
* Initialisation
void setup()
{
Serial.begin(9600);
//monRTC.begin();
monDHT.begin();
Wire.begin();
DS3231_init(DS3231_INTCN);
Serial.print("Initialisation de la carte SD en cours...");
if (SD.begin())
{
Serial.println(" Terminee.");
} else
{
Serial.println(" Echec.");
return;
}
monFichier1 = SD.open("donnees.csv", FILE_WRITE);
if (monFichier1)
{
monFichier1.println("Jour,Heure,Temperature,Humidite");
Serial.println("");
Serial.println("Jour | Heure | Temperature | Humidite");
monFichier1.close();
}
}
* Boucle Infinie
void loop()
{
// mesure humidité et température.
float humidite = monDHT.readHumidity();
float temperature = monDHT.readTemperature();
// Date et Heure
DS3231_get(&t);
String temps = String(t.mday);
String annee = String(t.year);
String mois = String(t.mon);
String heure = String(t.hour);
String minu = String(t.min);
String sec = String(t.sec);
// On met en forme la donnée au formar csv séparé par une virgule.
String donnee = annee + "/"+ mois + "/" + temps + " , " + heure+ ":" + minu + "," + String(temperature) + "," + String(humidite);
// On enregistre les donnéees
monFichier1 = SD.open("donnees.csv", FILE_WRITE); //Maximum 8 caractères avant le .csv
if (monFichier1)
{
monFichier1.println(donnee);
// Serial.println(" " + temps + " | " + String(temperature)+ " | " + String(humidite));
Serial.println(" " + annee + "/"+ mois + "/" + temps + " " + heure+ ":" + minu + " | " + String(temperature)+ " | " + String(humidite));
monFichier1.close();
}
else
{
Serial.println("Impossible d'ouvrir le fichier");
}
delay(900000); //pas de temps de 15mn
}
Merci pour ta réponse ! C'est une super idée cette fonction, une bonne astuce !! Merci beaucoup.
Est-ce que je eux me permette de te demander un petit complément...
Je ne comprends pourquoi, j'ai essayé pas mal de trucs mais je n'arrive pas à enregistrer les valeurs en ligne aaaa/mm/jj hh:mm dans la carte SD.
Pourrais me montrer ce qu'il faut faire stp.
DS3231_get(&t);
float humidite = monDHT.readHumidity();
float temperature = monDHT.readTemperature();
fichier = SD.open("donnees.csv", FILE_WRITE);
if (fichier) {
fichier.print(t.year); fichier.write('/');
fichier.print(t.month); fichier.write('/');
fichier.print(t.day);
fichier.write('\t'); // une tabulation pour la séparation
if (t.hour < 10) fichier.write('0');
fichier.print(t.hour); fichier.write(':');
if (t.min < 10) fichier.write('0');
fichier.print(t.min);
fichier.write('\t'); // une tabulation pour la séparation
fichier.print(temperature,1); // 1 chiffre après la virgule
fichier.write('\t'); // une tabulation pour la séparation
fichier.println(humidité,0); // (juste la partie entière) println et non pas print pour ajouter le passage à la ligne
fichier.close();
}