le montage est en one wire comme préconisé pour le DS18B20.
merci pour la réponse.
Les câbles font 1m ou 2.0m je donne l'intégralité du code tel qu'il tourne..
Merci
/**************************************************************
* ----------- Gestion de la cave du POP ---------------------*
* Prise de températures dans 3 points différents pour couper *
* la climatisation en cas de surchauffe de l'évaporateur. *
* GESTION DE LA CAVE JeenodePoP du haut *
* Mai 2016 V9.2 Juin 2017 V 1.0 *
**************************************************************/
#include <Wire.h>
#include <math.h>
#include <DallasTemperature.h>
#include <OneWire.h>
uint16_t startAddr = 0x0000; // Adresse de démarrage Start dans NV-RAM
uint16_t lastAddr; // Nelle addresse des stockage NV-RAM
uint16_t TimeIsSet = 0xaa55; // Prévient qu'il n'y a pas de remise à l'heure
int Topmesure = 0;
int Topmesure1 = 0;
int Topmesure2 = 0;
int Topmesure3 = 0;
int Topmesure4 = 0;
int Mesure1 = 0;
int Mesure2 = 0;
int Mesure3 = 0;
int Mesure4 = 0;
int compteur = 0;
int valdigit;
int valdigit1;//était valdigitS4
int valdigit2;//était valdigitS2
int valdigit3;//était valdigitS6
int valdigit4;//était valdigitS7
int tempC;
int Reponse;
int Clignotant;
int Defaut = 0;
int Etatrelaisclimatisation;
int sortitesimpulsion;
float coefficient = (1024/55);//1024/55°C
float TempS;
float TempS1;//était TempS4
float TempS2;//était TempS5
float TempS3;//était TempS6
float TempS4;//était TempS7
/*********************
* ADRESSAGE DES PIN *
*********************/
//Data wire connecté sur pin 2 de l'Arduino
#define ONE_WIRE_BUS 3 //Doit passer en 3 pour JnodePoPHaut
// Relais connectés sur pin 6 et 7.
#define Relaisclimatisation 4// Doit passer en 4 pour JnodePoPHaut
#define sortitesimpulsion 5
/*********************************************************************
* Déclaration des adresses des sondes DS18B20 pour la 1-Wire temp *
*********************************************************************/
// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);
// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);
DeviceAddress sonde1 = { 0x28, 0xFF, 0xBF, 0x72, 0xA4, 0x15, 0x03, 0x5E };// cave
DeviceAddress sonde2 = { 0x28, 0xFF, 0x1E, 0x1B, 0x69, 0x14, 0x04, 0xA7}; // Condenseur sonde de 2 M sur condenseur ou dans gaine d'entrée d'air extérieur.
DeviceAddress sonde3 = { 0x28, 0xFF, 0xB0, 0x14, 0xA5, 0x15, 0x01, 0xBF };// Grenier sonde d'1M.
//DeviceAddress sonde3B = { 0x28, 0xFF, 0x8D, 0x16, 0x64, 0x14, 0x03, 0x50}; //Grenier sonde de 2M.
DeviceAddress sonde4 = { 0x28, 0x31, 0xC9, 0x7B, 0x07, 0x00, 0x00, 0x53 };// Caisson
//DeviceAddress sonde5 = { 0x28, 0xC1, 0xB8, 0x7B, 0x07, 0x00, 0x00, 0x81 };//
//deviceAddress sonde6 = { 0x28, 0x9D, 0x3B, 0x7C, 0x07, 0x00, 0x00, 0xD1 };//
//DeviceAddress sonde7 = { 0x28, 0x62, 0x05, 0x7C, 0x07, 0x00, 0x00, 0xA1 };//
void setup () {
/**************************
* Déclaration des sorties*
**************************/
pinMode(Relaisclimatisation, OUTPUT);
digitalWrite(Relaisclimatisation, LOW);//On force le relais de la climatisation au repos. (actif à UN) sur la platine JeeNodePoPHaut.
pinMode(sortitesimpulsion, OUTPUT);
digitalWrite(sortitesimpulsion, LOW);
/********************************
/* OUVERTURE DU PORT SERIE COM3 *
/********************************/
// start serial port
Serial.begin(115200);
}
void printTemperature(DeviceAddress deviceAddress)
{
// set the resolution to 11 bit (good enough?)
sensors.setResolution(sonde1, 11);
sensors.setResolution(sonde2, 11);
sensors.setResolution(sonde3, 11);
sensors.setResolution(sonde4, 11);
// sensors.setResolution(sonde5, 11);
// sensors.setResolution(sonde6, 11);
// sensors.setResolution(sonde7, 11);
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00)
{
Serial.print("Error getting temperature");
}
else
{
valdigit = (tempC * coefficient);
TempS = (tempC);
Serial.print(tempC,1); // n'affiche qu'un chiffre derrière la virgule
Serial.print(" C ");
}
}
void loop()
{
/***********************
* Gestion des Relais *
************************/
/*****************
* Climatisation *
******************/
if (valdigit1 < 414)
{(Reponse = 1);}
// rep:A -- 414-->23° interdit la clim en dessous de 13.0°C. (225-->12.5°C)
if (valdigit1 > 414 && valdigit3 < 540)
{(Reponse = 2);}
// rep:A -- 414-->23° autorise la clim au dessus de 13.0°C. (225-->12.5°C)
// rep:C -- 540-->30° et si la toiture est en dessous de 37°C.(666-->37°C)
if (valdigit3 < 504)
{(Defaut = 0);}
// rep:B -- 504-->28° retabli la clim en dessous de 34°C. (612-->34°C)
if (valdigit3 > 540)
// rep:C -- 540-->30° coupe la clim au dessus de 37°C.666-->37°C)
{(Reponse = 3);
(Defaut = 1);}
switch (Reponse)
{
case 1 :
digitalWrite(Relaisclimatisation, LOW );//
Etatrelaisclimatisation = 0;
break;
case 2 :
if (Defaut == 0){
digitalWrite(Relaisclimatisation, HIGH );//
Etatrelaisclimatisation = 1;
}
break;
case 3 :
digitalWrite(Relaisclimatisation, LOW );//
Etatrelaisclimatisation = 0;
break;
}
/********************************************************
*test impulsion de mesure sortie sur 5 borne 11 *
********************************************************/
Clignotant = (millis() / 1000%2);
if (Clignotant == 1)
{ digitalWrite(sortitesimpulsion, HIGH);
}
else
{ digitalWrite(sortitesimpulsion, LOW);
}
/********************************************************
* traitements et Affichage des Températures sur COM3 *
********************************************************/
Topmesure = (millis()/1000%60);
Topmesure1=Topmesure;
switch (Topmesure)
{
case 0:
if (Mesure1 == 0) {
sensors.requestTemperatures();
delay(200);
// TX = sensors.getTempC(TempX);
printTemperature(sonde1);
delay(50);
valdigit1 = valdigit;
TempS1 = TempS;
Serial.print("temperature sonde N1 CAVE est: ");
Serial.print(" ");
Serial.print(TempS1);
Serial.print(" ");
Serial.print(" valdigit1 ");
Serial.print(valdigit1);
Serial.print(" ");
Serial.print("\n\r");
Mesure1 = 1;
Mesure4 = 0;
}
break;
case 15:
if (Mesure2 == 0) {
sensors.requestTemperatures();
delay(200);
printTemperature(sonde2);
delay(50);
valdigit2 = valdigit;
TempS2 = TempS;
Serial.print("temperature sonde N2 TOITURE est: ");
Serial.print(" ");
Serial.print(TempS2);
Serial.print(" ");
//valdigit2 =(valdigit2*(-1)); //pour tester les T° négative
Serial.print(" valdigit2 ");
Serial.print(valdigit2);
Serial.print("\n\r");
Mesure2 = 1;
Mesure1 = 0;
}
break;
case 30:
if (Mesure3 == 0) {
sensors.requestTemperatures();
delay(200);
printTemperature(sonde4);
delay(50);
valdigit4 = valdigit;
TempS4 = TempS;
Serial.print("temperature sonde N4 caisson est: ");
Serial.print(" ");
Serial.print(TempS4);
Serial.print(" ");
Serial.print(" valdigit4 ");
Serial.print(valdigit4);
Serial.print("\n\r");
Mesure3 = 1;
Mesure2 = 0;
}
break;
case 45:
if (Mesure4 == 0){
sensors.requestTemperatures();
delay(20);
printTemperature(sonde3);
delay(50);
valdigit3 = valdigit;
TempS3 = TempS;
Serial.print("temperature sonde N3 GRENIER est: ");
Serial.print(" ");
Serial.print(TempS3);
Serial.print(" ");
//valdigit3 =(valdigit3*(-1)); //pour tester les T° négative
Serial.print(" valdigit3 ");
Serial.print(valdigit3);
Serial.print(" ");
Serial.print("Etat du relais de la climatisation:");
Serial.print (Etatrelaisclimatisation);
Serial.print("\n\r");
Serial.print ("reponse ");
Serial.print (Reponse);
Serial.print("\n\r");
Mesure4 = 1;
Mesure3 = 0;
}
break;
}
}