Project Digora IOT
Dependencies: libmDot-dev-mbed5
TempHum_sensor.cpp
- Committer:
- Niiippoooo
- Date:
- 2017-05-19
- Revision:
- 0:522ad8e780f6
File content as of revision 0:522ad8e780f6:
#include "TempHum_sensor.h" Capt_TH::Capt_TH() : i2c(PC_9, PA_8) //initialise la liaison i2c entre le capteur et les pins SDA et SCL du mDot { i2c.frequency(100000); //on communique à la même fréquence qu'avec le capteur de luminosité } void Capt_TH::WriteCommand() { i2c.start(); i2c.write(0x88); // Initialisation du mode écriture à l'adresse 0x44 : 7 bits d'adresse (0x44 = 1000100) // + 1 bit de mode (0x88 = 10001000 pour le mode écriture) i2c.write(0x24); // Premier octet du message 0x240B correspondant au mode MEDIUM REPEATABILITY MEASUREMENT (cf. datasheet) i2c.write(0x0B); // Second octet i2c.stop(); } void Capt_TH::ReadTempHum() { i2c.start(); i2c.write(0x89); // Initialisation du mode lecture à l'adresse 0x44 : 7 bits d'adresse (0x44 = 1000100) // + 1 bit de mode (0x89 = 10001001 pour le mode lecture) for (int i=0;i<6;i++) // Lecture des données envoyées par le capteur { readbuffer[i] = i2c.read(1); // readbuffer[0] et readbuffer[1] contiennent les valeurs de la température // readbuffer[3] et readbuffer[4] contiennent les valeurs de l'humidité // readbuffer[2] et readbuffer[5] contiennent des CRC checksum. } i2c.stop(); ST = readbuffer[0]; // ST contient le bit de poids fort de la température. ex : ST = 01011111 (0x5F) ST <<= 8; // Décalage de 8 bits pour récupérer les bits de poids faible. ex : 11101010 (0xEA) ST |= readbuffer[1]; // Concaténation des 2 octets, ST = 01011111 11101010 (0x5FEA) SRH = readbuffer[3]; // Même principe pour l'humidité SRH <<= 8; SRH |= readbuffer[4]; temp = ST; // Conversion de la valeur reçue en degrés Celsius : T = -45 + 175*[ST/(2^16 - 1)] temp *= 175; temp /= 0xFFFF; temp = -45 + temp; hum = SRH; // Conversion de la valeur reçue en humidité relative : RH = 100 * [SRH/(2^16 -1)] hum *= 100; hum /= 0xFFFF; } void Capt_TH::getTempHum() { WriteCommand(); //indique au capteur quel type de mesure effectuer ReadTempHum(); //récupère et convertit les données du capteur en température et humidité } float Capt_TH::obtenirTemperature() { if (temp<100) { //vérifie la cohérence de la mesure printf("\n\rTempérature = %.2f °C\n\r", temp); //affiche la température en degrés Celsius } return (temp); //retourne la température pour l'envoi via le réseau LoRa } float Capt_TH::obtenirHumidite() { if (temp<100) { //vérifie la cohérence de la mesure printf("\n\rHumidité Relative = %.2f %%\n\r", hum); //affiche l'humidité relative en pourcentage } return (hum); //retourne l'humidité pour l'envoi via le réseau LoRa }