![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
Project Digora IOT
Dependencies: libmDot-dev-mbed5
Diff: TempHum_sensor.cpp
- Revision:
- 0:522ad8e780f6
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/TempHum_sensor.cpp Fri May 19 09:26:49 2017 +0000 @@ -0,0 +1,70 @@ +#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 +} \ No newline at end of file