|
|
|
/* Utilisation du Capteur de température DS18B20 avec l'afficheur 4 digits 7 segments TM1637*/
|
|
|
|
//Inclure les bibliothéques
|
|
#include <TM1637Display.h>
|
|
#include <OneWire.h>
|
|
|
|
// Définir la connexion des pins de l'afficheur
|
|
#define CLK 2
|
|
#define DIO 3
|
|
|
|
// Broche du bus 1-Wire
|
|
const int DS18B20_PIN = 7;
|
|
|
|
// Création de l'objet OneWire pour manipuler le bus 1-Wire
|
|
OneWire ds (DS18B20_PIN);
|
|
|
|
// Création d'un objet d'affichage de type TM1637Display
|
|
TM1637Display temperature_display = TM1637Display(CLK, DIO);
|
|
|
|
float DS18B80_temperature;
|
|
|
|
// Créer le symbole du degre Celsius
|
|
const uint8_t celsius[] = {
|
|
SEG_A | SEG_B | SEG_F | SEG_G, // Cercle
|
|
SEG_A | SEG_D | SEG_E | SEG_F }; //
|
|
|
|
void setup()
|
|
{
|
|
// Régler la luminosité de l'affichage (0-7)
|
|
temperature_display.setBrightness(0);
|
|
// Efface l'affichage
|
|
temperature_display.clear();
|
|
Serial.begin(9600);
|
|
delay(2000);
|
|
}
|
|
|
|
void loop()
|
|
{
|
|
// Lire la température en Celsius
|
|
DS18B80_temperature = getTemperature();
|
|
// Imprime la température sur le moniteur série
|
|
Serial.println(DS18B80_temperature);
|
|
// Affiche la température sur l'écran du TM1637
|
|
temperature_display.showNumberDec(DS18B80_temperature, false, 2, 0);
|
|
temperature_display.setSegments(celsius, 2, 2);
|
|
|
|
delay(2000);
|
|
}
|
|
|
|
|
|
/**
|
|
* Fonction de lecture de la température via un capteur DS18B20.
|
|
*/
|
|
float getTemperature()
|
|
{
|
|
byte i, data[12], addr[8];
|
|
// data[] : Données lues depuis le scratchpad
|
|
// addr[] : Adresse du module 1-Wire détecté
|
|
|
|
float temperature = 0.0;
|
|
|
|
// On charge l'adresse du capteur
|
|
ds.search(addr);
|
|
|
|
// Vérifie que l'adresse a été correctement reçue
|
|
if (OneWire::crc8(addr, 7) != addr[7])
|
|
{
|
|
Serial.println("getTemperature: CRC non valide! ");
|
|
return false;
|
|
}
|
|
|
|
// Vérifie qu'il s'agit bien d'un DS18B20
|
|
if (addr[0] != 0x28)
|
|
{
|
|
Serial.println("L'équipement trouvé n'est pas un DS18B20");
|
|
return false;
|
|
}
|
|
|
|
// Reset le bus 1-Wire et sélectionne le capteur
|
|
ds.reset();
|
|
ds.select(addr);
|
|
|
|
// Lance une prise de mesure de température et attend la fin de la mesure
|
|
ds.write(0x44);
|
|
delay(800);
|
|
|
|
// Reset le bus 1-Wire, sélectionne le capteur et envoie une demande de lecture de la température
|
|
ds.reset();
|
|
ds.select(addr);
|
|
ds.write(0xBE);
|
|
|
|
// Lecture du mot reçu du capteur
|
|
for (i = 0; i < 9; i++)
|
|
{
|
|
data[i] = ds.read();
|
|
}
|
|
|
|
// Calcul de la température en degré Celsius
|
|
temperature = ((data[1] << 8) | data[0]) * 0.0625;
|
|
|
|
|
|
return temperature;
|
|
}
|