Bonsoir,
J'ai un petit soucis avec mes sondes de température DS18B20. Une sonde me donne la température exacte une fois sur 5 : 4 fois la bonne (24°5) et une fois une température erronée toujours la même (-127°0). l'autre m'indique très souvent la bonne température et parfois les fameux -127°, quelque soit la librairie utilisée (Dallas ou autre).
Je soupçonne donc un conflit dans mon code mais ou.......?
#include <DallasTemperature.h>
#include <OneWire.h>
#include <config.h>
#include <ds3231.h>
#include <LiquidCrystal_I2C.h>
#include <config.h>
#include <Wire.h>
#define ONE_WIRE_BUS 19 // Data wire is plugged into port 19 on the Arduino
OneWire oneWire(ONE_WIRE_BUS); // Setup a oneWire instance to communicate with any OneWire devices (not just Maxim/Dallas temperature ICs)
DallasTemperature sensors(&oneWire); // Pass our oneWire reference to Dallas Temperature.
LiquidCrystal_I2C lcd(0x27,20,4);
// Variables et broches pour les élairages PP, Sec et Leds Bleues et blanches
const int EclPP = 51; // pilote le relais 1-1 de l'éclairage PrinciPal
const int EclSec = 52; // pilote le relais 1-2 de l'éclairage Secondaire
const int EclLed = 49; // pilote le relais 2-1 du transfo 15V
const int BPEclPP = 25; // Allume ou éteint l'éclairage PP en manuel
const int BPEclSec = 26; // Allume ou éteint l'éclairage Sec en manuel
const int LedEclSec = 28; // pilote la led verte de l'éclairage Secondaire
const int LedEclPP = 29; // pilote la led verte de l'éclairage PrinciPal
const int LedEclLedBleue = 32; // pilote la led verte de l'éclairage bleu
const int LedEclLedBlanche = 33; // pilote la led verte de l'éclairage blanc
const int LedBleue = 4; // sortie PWM pour led bleue
const int LedBlanche = 5; //sortie PWM pour led blanche
int valupLedBleue = 0; int valdownLedBleue = 0; // valeur d'intensité croissante/décroissante des leds bleues
int valupLedBlanche = 0; int valdownLedBlanche = 0; // valeur d'intensité croissante/décroissante des leds blanches
boolean a; //Statut éclairage principal
boolean b; //statut éclairage secondaire
boolean c; // statut éclairage leds bleues
boolean d; // statut éclairage leds blanches
// Variables et broches pour le chauffage
const int LedChauffage = 31; // pilote la led verte du chauffage
const int LedAlarmeChauffage = 30; // pilote la led rouge de l'alarme Température haute
const int Chauffage = 50; // pilote le relais 1-4 du chauffage (en NC)
// Variables et broches pour la RTC DS3231
struct ts t; // Pour DS3231
float TempRTC; // variable Température RTC
// Variables et broches pour la mesure de température d'eau
// const int DS18B20 = 19; // broche entrée du signal de la sonde de température
float TemperatureEau; // variable de stockage de la température de l'eau
// Variables pour le programme
int dateheure; // variable date_heure contient l'heure actuelle
int dateminute; // variable date_minute contient la minute actuelle
int HProg; // variable Heure pour programme: Hx100 + minutes
void setup()
{
pinMode(EclPP, OUTPUT); pinMode(LedEclPP, OUTPUT);
pinMode(EclSec, OUTPUT); pinMode(LedEclSec, OUTPUT);
pinMode(Aeration, OUTPUT); pinMode(LedAir, OUTPUT);
pinMode(Chauffage, OUTPUT); pinMode(LedChauffage, OUTPUT); pinMode(LedAlarmeChauffage, OUTPUT);
pinMode(EclLed, OUTPUT); pinMode(LedBleue, OUTPUT); pinMode(LedBlanche, OUTPUT);
pinMode(LedEclLedBleue, OUTPUT); pinMode(LedEclLedBlanche, OUTPUT);
pinMode(BPEclSec, OUTPUT); pinMode(BPEclPP, OUTPUT);
//pinMode(DS18B20, INPUT);
pinMode(Niveau, INPUT); pinMode(NHH, OUTPUT); pinMode(NH, OUTPUT); pinMode(NN, OUTPUT); pinMode(NB, OUTPUT); pinMode(NBB, OUTPUT);
analogWrite(LedBleue, 0); analogWrite(LedBlanche, 0); // initialise les leds bleues et blanches à 0
a=0; b=0; c=0; d=0; // initialise à 0 les BP
lcd.begin();
lcd.clear();
Wire.begin();
sensors.begin();
DS3231_init(DS3231_INTCN);
}
void loop()
{
// Affichage de la date et de l'heure en alternance sur la première ligne du lcd
{
DS3231_get(&t);
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(0,0);
switch (t.wday) {
case 1:
.......
lcd.print(" ");
lcd.print(t.mday);
lcd.print(" ");
switch (t.mon) {
case 1:
lcd.print("janvier");
break;
lcd.print(" ");
lcd.print(t.year);
delay(4000);
// Affichage de l'heure
lcd.setCursor(0,0);
lcd.print(" ");
lcd.setCursor(6,0);
lcd.print(t.hour);
lcd.print(":");
if ((t.min) < 10)
{
lcd.print("0");
}
lcd.print(t.min);
delay(5000);
}
// Calcul HProg
// ECLAIRAGE PRINCIPAL PP
lcd.setCursor(0,1);
lcd.print("Eclair. PP:");
if (HProg >= 1600 && HProg <= 2000)// Si il est + de 16h00 et - de 20h00
{
digitalWrite(EclPP, LOW); digitalWrite(LedEclPP, HIGH); lcd.print("OK"); // Allume l'éclairage PrinciPal et sa led verte
a = 1;// écriture en sortie (broche 51) d'un état BAS
}
else // Si il est entre 20h00 et 16h00
{
digitalWrite(EclPP, HIGH); digitalWrite(LedEclPP, LOW); lcd.print("NO"); // Eteint l'éclairage PrinciPal et sa led verte
a = 0;// écriture en sortie (broche 51) d'un état HAUT
}
// ECLAIRAGE LED BLEUES ET BLANCHES
// ECLAIRAGE LED BLEUES ET BLANCHES
valupLedBleue = (map (t.min, 0, 30, 0, 255)); // allumage des leds bleues sur 30 minutes
valupLedBlanche = (map (t.min, 0, 59, 0, 255)); // allumage des leds bleues sur 59 minutes
valdownLedBleue = (map (t.min, 0, 30, 255, 0)); // extinction des leds bleues sur 30 minutes
valdownLedBlanche = (map (t.min, 0, 59, 255, 0)); // extinction des leds bleues sur 59 minutes
// LE MATIN
//LED BLEUE
{
if (HProg >= 1100 && HProg <= 1130) // Si il est 11h00
{
analogWrite(LedBleue, valupLedBleue * 0.8); digitalWrite(32, HIGH); c = 1; // Allumage progressif de l'éclairage Led Bleue et sa led témoin
}
else if (HProg > 1130 && HProg <= 1230)
{
analogWrite(LedBleue, 255); c = 1; digitalWrite(32, HIGH);
}
else if (HProg > 1230 && HProg <= 1302)// Si il est 12h31
{
analogWrite(LedBleue, valdownLedBleue * 0.8); // Extinction progressif de l'éclairage Led Bleue
}
else if (HProg > 1300 && HProg <= 2059)
{
digitalWrite(LedEclLedBleue, LOW); c = 0; // Eteint la led témoin
}
// ALLUMAGE MANUEL
// GESTION DU CHAUFFAGE
// ***** Le relais du chauffage est câblé en NC (inverse des autres relais)*********
{
lcd.setCursor(7,2);
lcd.print("Chauff:OK");
digitalWrite(LedChauffage, HIGH); digitalWrite(Chauffage, HIGH); digitalWrite(LedAlarmeChauffage, LOW);// Allume la led verte du chauffage, éteint la led rouge de l'alarme et laisse le relais en NC
if (TemperatureEau > 25.5) // si la température est supérieure à 25.5°
{
digitalWrite(Chauffage, LOW); digitalWrite(LedChauffage, LOW); digitalWrite(LedAlarmeChauffage, HIGH); // Eteint la led verte du chauffage, allume la led rouge de l'alarme et passe le relais en NO
lcd.setCursor(0,2);
lcd.print(" ");
lcd.print(" ALARME TEMPERATURE");
lcd.setCursor(0,3);
lcd.print(" ");
lcd.print(" HAUTE : T > 25,5");
lcd.print((char)223), ("C");
delay(3000);
}
}
// AFFICHAGE DE LA TEMPERATURE DE L'EAU et du RTC
{
// call sensors.requestTemperatures() to issue a global temperature
// request to all devices on the bus
TemperatureEau = 0;
sensors.requestTemperatures(); // Send the command to get temperatures
delay(1000);
TemperatureEau = (sensors.getTempCByIndex(0));
}
// Affiche les températures
{
TempRTC = DS3231_get_treg(); // lit la température de l'horloge
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Temp RTC: ");
lcd.print(float(TempRTC),1);
lcd.print((char)223), ("C");
delay(3000);
}
{
lcd.setCursor(0,3);
lcd.print(" ");
lcd.setCursor(0,3);
lcd.print("Temp Eau: ");
lcd.print(TemperatureEau, 1);
lcd.print((char)223), ("C");
delay(3000);
}
}
Si quelqu'un peut m'aider car là je galère un peu et comme vous avez pu le constater en lisant mon code : je suis débutant.
Merci par avance de votre aide