Bonsoir à vous trois,
Merci pour votre aide, en effet je ne connaissais pas cette erreur lié au digital read. Je prends note. Dans ce cas ce type d'erreur doit-être récurrente.
Voilà mon code :
/* Mesurer 2 temperatures et une humidité et les archiver en carte SD
by Guillaume Leguen
this sketch reads temperature from 2 DS18B20 sensors
and reports to Serial Monitor
cc-by-sa Guillaume Leguen
*/
#include <OneWire.h>
#include <DallasTemperature.h>
//#define onewirepin 9 // Cette fonction defini le numéro de port où sont branchés les capteurs
#include <LiquidCrystal.h> // initialize the library with the numbers of the interface pins – The numbers
#include <SPI.h> // for SD stock
#include <SD.h> // for SD stock
#include <Wire.h> // for SD stock
#include "DS3231.h" // for SD stock
#include <dht.h>
//are the pin connected in sequence from RS to DB7, c'est pour l'écran
LiquidCrystal lcd(7, 6, 5, 4, 3, 2);
RTClib RTC;
DS3231 Clock;
dht DHT;
int pinSD = 10 ;
int pinSensorsDS = 9 ;
char NomFichier[20];
char NomFichierComp[20];
int Year;
int Month;
int Date;
int Hour;
int Minute;
int Second;
int tempC;
int interval = 1;
int Minute_last;
int Date_last;
#define DHT11_PIN A3
File myFile; //deffine var File
OneWire oneWire(pinSensorsDS);
DallasTemperature sensors(&oneWire);
// Retrouver les adress OneWire grace au code de recherche des adresses
uint8_t sensor1[8] = { 0x28, 0xFF, 0x41, 0xB2, 0x90, 0x16, 0x04, 0xF5 };
uint8_t sensor2[8] = { 0x28, 0xFF, 0x49, 0x9A, 0x87, 0x16, 0x03, 0x14 };
void setup()
{
Serial.begin (115200);
Wire.begin(); //for DS3231 for RTC
while (!Serial) {
; // wait for serial port to connect. Needed for native USB port only
}
delay(2000); //afer reset Arduino, 2s to take out SD
Serial.print("Initializing SD card...");
Serial.print ("Initializing Temperature Control Library Version ");
Serial.print("Initializing SD card...");
Serial.println (DALLASTEMPLIBVERSION);
Serial.println("DHT TEST PROGRAM ");
Serial.print("LIBRARY VERSION: ");
Serial.println(DHT_LIB_VERSION);
sensors.begin (); // Initialise le capteur et défini une resolution
sensors.setResolution(sensor1, 12);
sensors.setResolution(sensor2, 12);
delay(2000);
Serial.println();
Serial.print ("Number of Devices found on bus = ");
Serial.println (sensors.getDeviceCount());
Serial.print ("Getting temperatures… ");
Serial.println ();
// set up the LCD’s number of columns and rows:
lcd.begin(16, 2);
if (!SD.begin(pinSD)) {
Serial.println("initialization failed!");
}
else {
Serial.println("initialization done.");
}
DateTime now = RTC.now();
Year = now.year();
Month = now.month();
Date = now.day();
Hour = now.hour();
Minute = now.minute();
Second = now.second();
tempC = Clock.getTemperature();
Date_last = Date ;
sprintf(NomFichier,"%02d%02d%02d%",now.year(),now.month(),now.day());
write_header ();
Serial.println(NomFichier);
}
void loop()
{
update_vartime();
sensors.requestTemperatures(); // Command all devices on bus to read temperature
int chk = DHT.read11(DHT11_PIN);
Serial.print(Minute);
Serial.print("In : ");
lcd.setCursor(0, 0);
lcd.print ("I");
printTemperature(sensor1);
Serial.print("Out : ");
lcd.print (" ");
lcd.print ("O");
printTemperature(sensor2);
lcd.print((char)223); // caractère degre
lcd.print("C ");
// write_data1(sensor1); //write data
// write_data2(sensor2);
// DISPLAY DATA
Serial.print("H : ");
Serial.print(DHT.humidity, 1);
Serial.print(" |");
Serial.println();
lcd.setCursor(0, 1);
lcd.print ("Hmdy : ");
lcd.print (DHT.humidity,1);
lcd.print ("%");
delay(1000);//Important pour bonne lecture du DHT11
if ((Minute % interval == 0)&(Minute_last!=Minute))
{
write_data1(sensor1); //write data
write_data2(sensor2);
Minute_last = Minute;
}
}
void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{
Serial.print ("Error getting temperature ");
lcd.print ("Reading Error");
}
else
{
Serial.print (tempC);
Serial.print ((char)176);
Serial.print ("C | ");
lcd.print(tempC);
//lcd.print((char)223); // caractère degre
//lcd.print("C ");
}
}
void write_data1(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
myFile = SD.open(NomFichier, FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
myFile.print(Year);
myFile.print("/");
myFile.print(Month);
myFile.print("/");
myFile.print(Date);
myFile.print(";");
myFile.print(Hour);
myFile.print(":");
myFile.print(Minute);
myFile.print(";");
myFile.print(tempC);
myFile.print(";");
myFile.close();
Serial.println("Write file successful!"); //print out COM Port
} else {
Serial.println("error opening txt");
}
}
void write_data2(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
myFile = SD.open(NomFichier, FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
myFile.print(tempC);
myFile.println();
myFile.close();
Serial.println("Write file successful!"); //print out COM Port
} else {
Serial.println("error opening txt");
}
}
void write_header()
{
myFile = SD.open(NomFichier, FILE_WRITE);
// if the file opened okay, write to it:
if (myFile) {
myFile.println("Donnees de temperatures");
myFile.println("Serre de FSP");
myFile.print(Year);
myFile.print("/");
myFile.print(Month);
myFile.print("/");
myFile.println(Date);
myFile.println();
myFile.println("Date;Time;Temp_In;Temp_Out;Humidity");
myFile.close();
Serial.println("Write header successful!"); //print out COM Port
} else {
Serial.println("error opening txt");
}
}
void update_vartime()
{
DateTime now = RTC.now();
Year = now.year();
Month = now.month();
Date = now.day();
Hour = now.hour();
Minute = now.minute();
Second = now.second();
tempC = Clock.getTemperature();
if((Date % interval == 0)&&(Date_last!=Date)) { //permets de créer un nouveau fichier à chaque changement de date.
sprintf(NomFichier,"%02d%02d%02d%",now.year(),now.month(),now.day());
Serial.print("Changement de date, nouveau fichier : ");
Serial.println(NomFichier);
Date_last = Date ;
write_header ();
}
}
Et pour info je documente mon projet ici : G.Leguen : Moniteur de contrôle pour une serre
Bonne soirée
gheleguen