Project Digora IOT

Dependencies:   libmDot-dev-mbed5

Committer:
Niiippoooo
Date:
Fri May 19 09:26:49 2017 +0000
Revision:
0:522ad8e780f6
project Digora IOT

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Niiippoooo 0:522ad8e780f6 1 #include "TempHum_sensor.h"
Niiippoooo 0:522ad8e780f6 2
Niiippoooo 0:522ad8e780f6 3
Niiippoooo 0:522ad8e780f6 4 Capt_TH::Capt_TH() : i2c(PC_9, PA_8) //initialise la liaison i2c entre le capteur et les pins SDA et SCL du mDot
Niiippoooo 0:522ad8e780f6 5 {
Niiippoooo 0:522ad8e780f6 6 i2c.frequency(100000); //on communique à la même fréquence qu'avec le capteur de luminosité
Niiippoooo 0:522ad8e780f6 7 }
Niiippoooo 0:522ad8e780f6 8
Niiippoooo 0:522ad8e780f6 9 void Capt_TH::WriteCommand()
Niiippoooo 0:522ad8e780f6 10 {
Niiippoooo 0:522ad8e780f6 11 i2c.start();
Niiippoooo 0:522ad8e780f6 12 i2c.write(0x88); // Initialisation du mode écriture à l'adresse 0x44 : 7 bits d'adresse (0x44 = 1000100)
Niiippoooo 0:522ad8e780f6 13 // + 1 bit de mode (0x88 = 10001000 pour le mode écriture)
Niiippoooo 0:522ad8e780f6 14 i2c.write(0x24); // Premier octet du message 0x240B correspondant au mode MEDIUM REPEATABILITY MEASUREMENT (cf. datasheet)
Niiippoooo 0:522ad8e780f6 15 i2c.write(0x0B); // Second octet
Niiippoooo 0:522ad8e780f6 16 i2c.stop();
Niiippoooo 0:522ad8e780f6 17 }
Niiippoooo 0:522ad8e780f6 18
Niiippoooo 0:522ad8e780f6 19 void Capt_TH::ReadTempHum()
Niiippoooo 0:522ad8e780f6 20 {
Niiippoooo 0:522ad8e780f6 21 i2c.start();
Niiippoooo 0:522ad8e780f6 22 i2c.write(0x89); // Initialisation du mode lecture à l'adresse 0x44 : 7 bits d'adresse (0x44 = 1000100)
Niiippoooo 0:522ad8e780f6 23 // + 1 bit de mode (0x89 = 10001001 pour le mode lecture)
Niiippoooo 0:522ad8e780f6 24
Niiippoooo 0:522ad8e780f6 25 for (int i=0;i<6;i++) // Lecture des données envoyées par le capteur
Niiippoooo 0:522ad8e780f6 26 {
Niiippoooo 0:522ad8e780f6 27 readbuffer[i] = i2c.read(1); // readbuffer[0] et readbuffer[1] contiennent les valeurs de la température
Niiippoooo 0:522ad8e780f6 28 // readbuffer[3] et readbuffer[4] contiennent les valeurs de l'humidité
Niiippoooo 0:522ad8e780f6 29 // readbuffer[2] et readbuffer[5] contiennent des CRC checksum.
Niiippoooo 0:522ad8e780f6 30 }
Niiippoooo 0:522ad8e780f6 31 i2c.stop();
Niiippoooo 0:522ad8e780f6 32
Niiippoooo 0:522ad8e780f6 33
Niiippoooo 0:522ad8e780f6 34 ST = readbuffer[0]; // ST contient le bit de poids fort de la température. ex : ST = 01011111 (0x5F)
Niiippoooo 0:522ad8e780f6 35 ST <<= 8; // Décalage de 8 bits pour récupérer les bits de poids faible. ex : 11101010 (0xEA)
Niiippoooo 0:522ad8e780f6 36 ST |= readbuffer[1]; // Concaténation des 2 octets, ST = 01011111 11101010 (0x5FEA)
Niiippoooo 0:522ad8e780f6 37
Niiippoooo 0:522ad8e780f6 38 SRH = readbuffer[3]; // Même principe pour l'humidité
Niiippoooo 0:522ad8e780f6 39 SRH <<= 8;
Niiippoooo 0:522ad8e780f6 40 SRH |= readbuffer[4];
Niiippoooo 0:522ad8e780f6 41
Niiippoooo 0:522ad8e780f6 42 temp = ST; // Conversion de la valeur reçue en degrés Celsius : T = -45 + 175*[ST/(2^16 - 1)]
Niiippoooo 0:522ad8e780f6 43 temp *= 175;
Niiippoooo 0:522ad8e780f6 44 temp /= 0xFFFF;
Niiippoooo 0:522ad8e780f6 45 temp = -45 + temp;
Niiippoooo 0:522ad8e780f6 46
Niiippoooo 0:522ad8e780f6 47 hum = SRH; // Conversion de la valeur reçue en humidité relative : RH = 100 * [SRH/(2^16 -1)]
Niiippoooo 0:522ad8e780f6 48 hum *= 100;
Niiippoooo 0:522ad8e780f6 49 hum /= 0xFFFF;
Niiippoooo 0:522ad8e780f6 50 }
Niiippoooo 0:522ad8e780f6 51
Niiippoooo 0:522ad8e780f6 52 void Capt_TH::getTempHum()
Niiippoooo 0:522ad8e780f6 53 {
Niiippoooo 0:522ad8e780f6 54 WriteCommand(); //indique au capteur quel type de mesure effectuer
Niiippoooo 0:522ad8e780f6 55 ReadTempHum(); //récupère et convertit les données du capteur en température et humidité
Niiippoooo 0:522ad8e780f6 56 }
Niiippoooo 0:522ad8e780f6 57
Niiippoooo 0:522ad8e780f6 58 float Capt_TH::obtenirTemperature()
Niiippoooo 0:522ad8e780f6 59 { if (temp<100) { //vérifie la cohérence de la mesure
Niiippoooo 0:522ad8e780f6 60 printf("\n\rTempérature = %.2f °C\n\r", temp); //affiche la température en degrés Celsius
Niiippoooo 0:522ad8e780f6 61 }
Niiippoooo 0:522ad8e780f6 62 return (temp); //retourne la température pour l'envoi via le réseau LoRa
Niiippoooo 0:522ad8e780f6 63 }
Niiippoooo 0:522ad8e780f6 64
Niiippoooo 0:522ad8e780f6 65 float Capt_TH::obtenirHumidite()
Niiippoooo 0:522ad8e780f6 66 { if (temp<100) { //vérifie la cohérence de la mesure
Niiippoooo 0:522ad8e780f6 67 printf("\n\rHumidité Relative = %.2f %%\n\r", hum); //affiche l'humidité relative en pourcentage
Niiippoooo 0:522ad8e780f6 68 }
Niiippoooo 0:522ad8e780f6 69 return (hum); //retourne l'humidité pour l'envoi via le réseau LoRa
Niiippoooo 0:522ad8e780f6 70 }