Projet

Général

Profil

Support #13634 » CapteurTempCode.ino

Code sous arduino - Faty MBAYE, 17/11/2021 15:20

 

/* 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;
}
(1-1/3)