Hi,
I'm using a dataloger program for save date (RTC) and values of my sensors on SDcard. It works.
Now I would like checking write on SDcard with 2 leds:
If write on SDcard is ok, I blink green led.
If it's not ok, I blink red led.
/*
Stockage des valeurs de temperature dans un fichier texte avec fonction d'horodatage
*/
#include <Wire.h>
#include <SD.h>
#include <RTClib.h>
// Declaration des pin utilisées
const char pin_chipSelect = 10; //10 est la pin utilisée par le shield mémoire pour le signal ChipSelect
const char pin_capteur0 = 0; //Numéro de la pin où est relié le capteur 0
const char pin_capteur1 = 1; //Numéro de la pin où est relié le capteur 1
const char pin_capteur2 = 2; //Numéro de la pin où est relié le capteur 2
const char pin_capteur3 = 3; //Numéro de la pin où est relié le capteur 3 en question
int pin_led_verte = 6; //Numéro de la pin où est relié la LED verte
int pin_led_rouge = 7; //Numéro de la pin où est relié la LED rouge
// Declaration des variables générales
const unsigned long F_refresh = 10000; //Entrez la fréquence de rafraichissement des capteurs, en millisecondes
RTC_DS1307 RTC;
File fichier;
String datastring;
void setup()
{
Serial.begin(57600); //Initialisation de la liaison série
Serial.print("Initialisation des LEDs...");
pinMode(pin_led_verte, OUTPUT);
pinMode(pin_led_rouge, OUTPUT);
digitalWrite(pin_led_verte, LOW);
digitalWrite(pin_led_rouge, LOW);
Serial.print("Initialisation de la SD card...");
pinMode(pin_chipSelect, OUTPUT); // Mettre la pin en output
Wire.begin();
RTC.begin();
if (! RTC.isrunning())
{
// Si la RTC n'est pas configurée, le faire avec les valeurs de l'ordinateur au moment de la compilation
RTC.adjust(DateTime(__DATE__, __TIME__));
}
if (!SD.begin(pin_chipSelect)) // Vérification de la présence de la SD card
{
Serial.println("Carte fausse ou absente");
return; // Si problème, sortir et bloquer l'exécution
}
Serial.println("Carte OK.");
datastring = "\nReleve et horodatage des valeurs du capteur, selon horloge RTC\n---------\n ";
fichier = SD.open("hydro1.txt", FILE_WRITE); // Ouverture du fichier en mode Ecriture.
if (fichier) // Si le fichier existe déja, on écrira à la suite des données présentes.
{
fichier.println(datastring);
fichier.close();
Serial.println(datastring); // dupliquer la donnée sur port série
}
else //Si problème à l'ouverture, alors signaler l'erreur
{
Serial.println("erreur d'ouverture du fichier durant la configuration");
}
}
void loop()
{
delay(F_refresh);
DateTime moment = RTC.now(); //Init de l'objet temporel
datastring=String(moment.day(),DEC);
datastring+='/';
datastring+=String(moment.month(),DEC);
datastring+='/';
datastring+=String(moment.year(),DEC);
datastring+=' ';
datastring+=String(moment.hour(),DEC);
datastring+=':';
datastring+=String(moment.minute(),DEC);
datastring+=':';
datastring+=String(moment.second(),DEC);
int sensor0 = analogRead(pin_capteur0); // lire la valeur du capteur 0
int sensor1 = analogRead(pin_capteur1); // lire la valeur du capteur 1
int sensor2 = analogRead(pin_capteur2); // lire la valeur du capteur 2
int sensor3 = analogRead(pin_capteur3); // lire la valeur du capteur 3
//float HIH = ((sensor*(5.0 / 1024) - 0.826) / 0.0315);
float HIH0 = sensor0 * 0.155009921 - 26.222222222; // conversion voltage en %hydro
float HIH1 = sensor1 * 0.155009921 - 26.222222222; // conversion voltage en %hydro
float HIH2 = sensor2 * 0.155009921 - 26.222222222; // conversion voltage en %hydro
float HIH3 = sensor3 * 0.155009921 - 26.222222222; // conversion voltage en %hydro
String tempAsString0, tempAsString1 ,tempAsString2 ,tempAsString3;
char tempo0[10], tempo1[10], tempo2[10], tempo3[10];
dtostrf(HIH0,1,2,tempo0);
tempAsString0 = String(tempo0); //Changement float en string
dtostrf(HIH1,1,2,tempo1);
tempAsString1 = String(tempo1); //Changement float en string
dtostrf(HIH2,1,2,tempo2);
tempAsString2 = String(tempo2); //Changement float en string
dtostrf(HIH3,1,2,tempo3);
tempAsString3 = String(tempo3); //Changement float en string
datastring += ("\t Capteur0 = "); // préalablement remplie avec les données temporelles
datastring += String(tempAsString0);
datastring += ("\t Capteur1 = "); // préalablement remplie avec les données temporelles
datastring += String(tempAsString1);
datastring += ("\t Capteur2 = "); // préalablement remplie avec les données temporelles
datastring += String(tempAsString2);
datastring += ("\t Capteur3 = "); // préalablement remplie avec les données temporelles
datastring += String(tempAsString3);
fichier = SD.open("hydro1.txt", FILE_WRITE);
if (fichier)
{
digitalWrite(pin_led_verte, HIGH);
delay(1000);
digitalWrite(pin_led_verte, LOW);
fichier.println(datastring);
fichier.close();
Serial.println(datastring); // dupliquer la donnée sur port série
}
else {
digitalWrite(pin_led_rouge, HIGH);
delay(1000);
digitalWrite(pin_led_rouge, LOW);
Serial.println("erreur d'ouverture du fichier");
}
datastring =0;
}
-
If there is no SDcard, the red led blink >> GOOD
but if I insert after my SDcard, the red led blink always.... And the program don't works properly. The frequency between two reading, normally 10sec it's not respected. -
If there is SDcard connected, the first time the red led blink one time >> NOT GOOD, WHY?
but after it's OK, the green led blink and values of sensors are saved >> GOOD
Now if I remove SDcard, the green led blink always... and the frequency between two reading, (normally 10sec) it's not respected.
Someone can help me? I would like to be sure that values of sensors are recorded on SDcard and to be inform with a problem on SDcard (PAcces problem with SDcard, full SDcard etc...).
Thank you!