Salut. J'arrive pas dormir alors !!!
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
pinMode(12, OUTPUT); // LED VERTE
Tu déclare la broche 12 pour ta LED mais celle ci est utile également a l'afficheur LCD change de broche pour ta led verte.
J'ai repris ton premier programme et testé avec mon capteur 18b20 et le même relais => J'ai pas de retour de température ?? la led rouge clignote lors du téléversement et puis plus rien.
En gros !! sa fonctionne pas!!.
la méthode de lecture par un conditionnement qui retourne un état vrais ou faux me semble inapproprié.
J'ai donc adapté ma fonction a ton programme (avec quelques modifs) quitte à pomper un programme sur le net pompe le miens.
Petit conseil déclare des variables a tes broches cela évite a corriger dans tout le programme au cas ou tu change tes câblages. ça rend ton montage plus flexible.
//***** Inclusion de bibliothèques.
#include <OneWire.h> //Exploitation Com. One-Wire.
#include <LiquidCrystal.h> //Exploitation LCD
//**** Déclarations des variables constantes
//Broches.
const int BROCHE_ONEWIRE = 9; // Broche affecté à la com 1-Wire
const int relais = 7; //Broche affecté au RELAIS.
const int v = 6; //Broche affecté LedVerte.
const int r = 8; //Broche LedRouge.
//***** Declaration des objets.
//Afficheur L.C.D.
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);
//Communication One-Wire.
OneWire ds(BROCHE_ONEWIRE); // Création de l'objet OneWire ds
//**** Déclarations des variables blobales.
float celcius; //Variable de retour température.
//***** Déclaration des tableaux "globales"
byte adresse[8];// Tableau de 8 octets pour stockage du code d'adresse 64 bits du composant One Wire.
//**********************************************************************//
void setup() { //Configuration et initialisation.
/*Note: Les test dans le setup() est la pour contrôler le bon fonctionnement des équipements, des branchements et des configurations. Cela évite de chercher des bugs programme alors que le matériels ou les branchements sont en cause*/
//CONFIGURATION
//Port série.
Serial.begin(9600);//Configuration du port série.
/*Note: Mettre le même réglage au moniteur */
//Test moniteur.
Serial.println("***** Moniteur pret *****");//Affichage d'un message avec saut de ligne (ln).
Serial.println();//Saut de ligne vierge.
delay(2000);//Temporisation d'affichage.
//L.C.D.
lcd.begin(16, 2); //Taille LCD
//Test de l'affichage ne serra lu qu'une seule fois
//par l’exécution unique du setup()
//TEXTE (Démarrage)
lcd.setCursor(0, 0);
lcd.print("Bonjour !");
lcd.setCursor(0, 1);
lcd.print(" Demarrage...");
delay(2000);
lcd.clear();
//Broches.
pinMode(v, OUTPUT); // Configuration de la broche en sortie.
pinMode(r, OUTPUT); // Configuration de la broche en sortie.
pinMode(relais, OUTPUT); // Configuration de la broche en sortie.
//Test des LEDs et relais.
digitalWrite(relais, HIGH); // Allumage.
digitalWrite(v, HIGH); // Allumage.
digitalWrite(r, HIGH); // Allumage.
delay(3000);//Temporisation de contrôle.
digitalWrite(relais, LOW); // Extinction.
digitalWrite(v, LOW); // Extinction.
digitalWrite(r, LOW); // Extinction.
//DS18b20.
mesure(); //Appel de la fonction de mesure.
Serial.println("***** Capteur pret *****");//Affichage d'un message avec saut de ligne (ln).
Serial.println();//Saut de ligne vierge.
delay(2000);//Temporisation d'affichage.
}//Fin de setup.
//**********************************************************************//
void loop() {
//**** Déclarations des variables globales.
const float consigne = 25; //Donnée de la variable de consigne.
const int hysteresis = 2; //Donnée de la variable de hystérésis .
//Acquisition de mesure T°.
mesure(); //Appel de la fonction de mesure.
delay(3000);//Temporisation de lecture.
//Affichage fonctionnel.
//1er État => Température normale = Repos.
if (celcius < consigne - hysteresis) { //Conditionnement de mise hors service.
//Affichage L.C.D.
lcd.setCursor(0, 0);//Pointage du curseur.
lcd.write("Normal");//Affichage message lcd.
//Moteur.
digitalWrite(relais, LOW); // MOTEUR ÉTEINT
//LEDs.
digitalWrite(v, HIGH); // VERTE ALLUMÉE
digitalWrite(r, LOW); // ROUGE ÉTEINTE
//Affichage moniteur série.
Serial.print("*** Arret arrosage (relais off) *** / Temp = "); //Affichage de la séquence de travail.
Serial.println(celcius); //Affichage de la température actuelle.
Serial.println(); //Saut de ligne vierge.
delay(3000);//Temporisation de lecture.
}//if
//2em État => Température haute = Activations.
if (celcius > consigne) { //Conditionnement de mise en service.
//Affichage L.C.D.
lcd.setCursor(0, 0);//Pointage du curseur.
lcd.write("Arrosage actif");//Affichage message lcd.
//Moteur.
digitalWrite(relais, HIGH); // MOTEUR ALLUMÉE
//LEDs
digitalWrite(v, LOW); // VERTE ÉTEINTE
digitalWrite(r, HIGH); // ROUGE ALLUMÉE
//Affichage moniteur série.
Serial.print("*** Marche arrosage (relais on) *** / Temp = "); //Affichage de la séquence de travail.
Serial.println(celcius); //Affichage de la température actuelle.
Serial.println(); //Saut de ligne vierge.
delay(3000);//Temporisation de lecture.
}//if
}//fin de loop.*/
/*Fonction de gestion des capteurs 18DSB20. */
void mesure() {
//----- Déclaration des variables fonctionnel locale -----//
byte data[12];// Tableau de 12 octets pour lecture des 9 registres de RAM et des 3 registres d'EEPROM du capteur One Wire
const float offset = -2; //Correction de la température sur valeurs de référence.
//-------------------------------------------------------//
//----- Code d'instruction du capteur -----//
while (ds.search(adresse) == true) { //Contrôle de la présence des capteurs.
const int lancerMesure = 0x44; //Code hexa.=> Datasheat => Initialise et lance une mesure de la température.
const int modeLecture = 0xBE; //Code hexa.=> Datasheat => lecture des neuf registres (scratchpad) du capteur transmis après initialisation.
//----- Lancer une mesure INITIALISATION. -----//
ds.reset();// initialise le bus 1-wire avant la communication avec un capteur donné.
ds.select(adresse);// sélectionne le capteur ayant l'adresse 64 bits contenue dans le tableau envoyé à la fonction.
ds.write(lancerMesure, 1); // lance la mesure et alimente le capteur par la broche de donnée.
//----- Pause -----//
delay(760);// au moins 750 ms
/*(+ il faudrait mettre une instruction capteur.depower ici, mais le re-set va le faire)*/
//----- Passer en mode LECTURE. -----//
ds.reset();// initialise le bus 1-wire avant la communication avec un capteur donné
ds.select(adresse);// sélectionne le capteur ayant l'adresse 64 bits contenue dans le tableau envoyé à la fonction
ds.write(modeLecture, 1); // passe en mode lecture de la RAM du capteur
//----- Les 9 octets de la RAM (appelé Scratchpad) -----//
for ( int i = 0; i < 9; i++) {// Décomposition des bits des 9 octets reçu.
data[i] = ds.read();// lecture de l'octet de rang i stocké dans tableau data
}//for
//----- Test de validité des valeurs reçues par contrôle du code CRC -----//
/*le dernier (9ème) octet de la RAM est un code de contrôle CRC à l'aide de la fonction crc8 on peut vérifier si ce code est valide */
if (ds.crc8( data, 8) != data[8]) {
Serial.print("-!! CRC non valide !!-");//Validation du code CRC.
break;
}//if
//----- Conversion de la valeur brut -----//
int16_t brut = (data[1] << 8) | data[0];//"brut" retour valeur.
brut = brut << 3;// 9 bit de résolution par defaut. => voir pour l'augmenter.(datasheet)
celcius = ((float)brut / 16.0) + offset;
Serial.print("Temperature actuelle: ");
Serial.println(celcius);
Serial.println();
}
}//fin de mesure()