#include <OneWire.h> | |
#include <LiquidCrystal.h> | |
#define DS18B20 0x28 | // Adresse 1-Wire du DS18B20 |
#define BROCHE_ONEWIRE 2 | // Broche utilisée pour le bus 1-Wire |
const int RELAIS_BRULEUR = 11; | // Broche utilisée pour Relais command Brûleur |
OneWire ds (BROCHE_ONEWIRE); | // création de l'objet OneWire ds |
LiquidCrystal lcd (8,9,4,5,6,7); |
boolean getTemperature (float *temp) { | // Fonction récupérant la température depuis le DS18B20
// Retourne true si tout va bien, ou false en cas d'erreur |
byte data[9], addr[8]; | // data : Données lues depuis le scratchpad
// addr : adresse du module 1-Wire detecté |
if (!ds.search (addr)) { | // Recherche un module 1-Wire |
ds.reset_search ( ); | // Réinitialise la recherche de module |
return false; | // Retourne une erreur |
} |
if (OneWire::crc8 (addr, 7) != addr[7]) | // Vérifie que l'adresse a été correctement reçue |
return false; | // Si le message est corrompuon retourne une erreur |
if (addr[0] != DS18B20) | // Vérifie qu'il s'agit bien d'un DS18B20 |
return false; | // Si ce n'est pas le cas on retrouve une erruer |
ds.reset ( ); | // On reset le bus 1-Wire |
ds.select (addr); | // On selectionne le DS18B20 |
ds.write (0x44, 1); | // On lance une prise de mesure de température |
delay (800); | // Et on attend la fin de la mesure |
ds.reset ( ); | // On reset le bus 1-Wire |
ds.select (addr); | // On selectionne le DS18B20 |
ds.write (0xBE); | // On envoie une demande de lecture du scratchpad |
for (byte i = 0; i < 9; i++) | // On lit le scratchpad |
data[i] = ds.read ( ); | // Et on stock les octets reçus |
*temp = ((data[1] << 8) | data[0]) * 0.0625; | // Calcul de la température en degré celsius |
return true; | // Pas d'erreur |
} |
String txt_brl_on,txt_brl_off; |
void setup ( ) { |
Serial.begin (9600); | // Initialisation du port série |
lcd.begin (16,2); |
lcd.clear ( ); |
pinMode (RELAIS_BRULEUR, OUTPUT);
|
txt_brl_on = "Demarrage Bruleur "; |
txt_brl_off = "Arret Bruleur "; |
} |
void loop ( ) { |
float temp; |
if (getTemperature (&temp)) { | // Lit la température ambiante à ~1Hz |
Serial.print ("Temperature : "); | // Affiche la température |
Serial.print (temp); |
Serial.write (176); | // caractère ° |
Serial.write ('C');
|
Serial.println ( ); |
lcd.setCursor (0, 0); | //Positionnement du curseur |
lcd.print ("Degres : "); |
lcd.setCursor (9, 0); |
lcd.print (temp); | //Affichage de la température |
lcd.setCursor (13, 0); |
lcd.print ((char)223); | //Affiche le caractère °(degrés) |
lcd.setCursor (14, 0); |
lcd.print ("C"); | //En degrés Celsuis |
if (temp > 45) { |
digitalWrite (RELAIS_BRULEUR,HIGH); |
lcd.setCursor (0,1); |
lcd.print ("Arret Bruleur "); |
} |
else if (temp < 30)
{ |
digitalWrite (RELAIS_BRULEUR,LOW); |
lcd.setCursor (0,1); |
txt_brl_on = ScrollTxt (txt_brl_on); |
lcd.print (txt_brl_on); |
} |
} |
} |
String ScrollTxt(String txt)
{ |
return txt.substring (1,txt.length ( )) + txt.substring (0,1); |
} |