Bonjour à tous ,et merci d'avance à ceux qui prendront le temps de m'aider:
Sur mon shield nanodatalogger ,je voudrais qu'il y ait une fonction pour vider de ses enregistrements la carte SD à l'aide de 2 boutons enforcés ensemble durant 3 secondes et que cette carte une fois vidée fasse clignoter la LedOn du nano jusqu'à ce qu'elle ait reçu la future première donnée à enregistrer , et une autre fonction pour ,sur le moniteur série , voir le taux de remplissage de la carte. j'utilise la version SD1.2.4 de la bibliothèque,
je peux éventuellement ajouter ici mon code original mais c'est juste un horodatage de l'état d'un contact
<
#include <SPI.h>
#include <SD.h>
#include <Wire.h>
#include <RTClib.h>
// Définir les broches
const int chipSelect = 10;
const int contactPin = 2;
const int LED1 = 3;
const int LED2 = 4;
// Initialiser l'horloge en temps réel
RTC_DS1307 rtc;
// Initialiser le fichier de données
File dataFile;
// Initialiser la variable pour stocker l'état du contact
bool lastState;
void setup() {
// Ouvrir la connexion série
Serial.begin(9600);
while (!Serial) {}
// Initialiser la carte SD
if (!SD.begin(chipSelect)) {
Serial.println("La carte SD n'est pas détectée.");
return;
}
// Initialiser l'horloge en temps réel
if (!rtc.begin()) {
Serial.println("L'horloge en temps réel n'est pas détectée.");
return;
}
if (!rtc.isrunning()) {
Serial.println("L'horloge en temps réel ne fonctionne pas. Veuillez la régler.");
}
// Initialiser la broche du contact
pinMode(contactPin, INPUT_PULLUP);
// Initialiser les broches des LEDs
pinMode(LED1, OUTPUT);
pinMode(LED2, OUTPUT);
// Lire l'état initial du contact et l'enregistrer
lastState = digitalRead(contactPin);
String stateString = lastState ? "Fermé" : "Ouvert";
String timeString = GetTime();
String dataString = timeString + " : Contact " + stateString + " à l'initialisation.";
Serial.println(dataString);
WriteData(dataString);
}
void loop() {
// Lire l'état actuel du contact
bool currentState = digitalRead(contactPin);
// Vérifier si l'état a changé depuis le dernier cycle
if (currentState != lastState) {
// Stocker le nouvel état et l'enregistrer avec l'horodatage
lastState = currentState;
String stateString = lastState ? "Fermé" : "Ouvert";
String timeString = GetTime();
String dataString = timeString + " : Contact " + stateString;
Serial.println(dataString);
WriteData(dataString);
}
// Mettre à jour l'état des LED en fonction de l'état du contact
if (lastState) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
} else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
}
// Attendre une seconde avant la prochaine lecture
delay(1000);
}
String GetTime() {
// Lire l'heure actuelle de l'horloge en temps réel
DateTime now = rtc.now();
// Construire une chaîne de caractères horodatée
String dateTimeString = String(now.year(), DEC) + "/" + String(now.month(), DEC) + "/" + String(now.day(), DEC) + " " + String(now.hour(), DEC) + ":" + String(now.minute(), DEC) + ":" + String(now.second(), DEC);
return dateTimeString;
}
void WriteData(String dataString) {
// Ouvrir le fichier de données en mode écriture
dataFile = SD.open("data.txt", FILE_WRITE);
// Écrire les données et fermer le fichier
if (dataFile) {
dataFile.println(dataString);
dataFile.close();
// Contrôler l'état du contact et allumer ou éteindre les LEDs en conséquence
if (digitalRead(contactPin)) {
digitalWrite(LED1, HIGH);
digitalWrite(LED2, LOW);
} else {
digitalWrite(LED1, LOW);
digitalWrite(LED2, HIGH);
}
} else {
Serial.println("Erreur d'écriture dans le fichier.");
}
}