td1
Dependencies: lib_LCD_i2c_SPTLYI mbed
lib_SHT/lib_SHT11.cpp@0:dca3b291558e, 2014-10-23 (annotated)
- Committer:
- mbedo
- Date:
- Thu Oct 23 09:42:24 2014 +0000
- Revision:
- 0:dca3b291558e
tp1_exo1
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mbedo | 0:dca3b291558e | 1 | #include "lib_SHT11.h" |
mbedo | 0:dca3b291558e | 2 | |
mbedo | 0:dca3b291558e | 3 | |
mbedo | 0:dca3b291558e | 4 | SHT11::SHT11(PinName pin_DATA, PinName pin_SCK, float T_C_mesure) : DATA_HT(pin_DATA), SCK_HT(pin_SCK), Temps_cycle_mesure(T_C_mesure) |
mbedo | 0:dca3b291558e | 5 | { |
mbedo | 0:dca3b291558e | 6 | if(Temps_cycle_mesure < 2) Temps_cycle_mesure = 2; |
mbedo | 0:dca3b291558e | 7 | init(); |
mbedo | 0:dca3b291558e | 8 | } |
mbedo | 0:dca3b291558e | 9 | |
mbedo | 0:dca3b291558e | 10 | void SHT11::start(void) |
mbedo | 0:dca3b291558e | 11 | { |
mbedo | 0:dca3b291558e | 12 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 13 | DATA_HT=1; |
mbedo | 0:dca3b291558e | 14 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 15 | // wait_us(1); |
mbedo | 0:dca3b291558e | 16 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 17 | // wait_us(1); |
mbedo | 0:dca3b291558e | 18 | DATA_HT=0; |
mbedo | 0:dca3b291558e | 19 | // wait_us(1); |
mbedo | 0:dca3b291558e | 20 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 21 | // wait_us(1); |
mbedo | 0:dca3b291558e | 22 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 23 | // wait_us(1); |
mbedo | 0:dca3b291558e | 24 | DATA_HT=1; |
mbedo | 0:dca3b291558e | 25 | // wait_us(1); |
mbedo | 0:dca3b291558e | 26 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 27 | // wait_us(1); |
mbedo | 0:dca3b291558e | 28 | DATA_HT=0; |
mbedo | 0:dca3b291558e | 29 | } |
mbedo | 0:dca3b291558e | 30 | |
mbedo | 0:dca3b291558e | 31 | void SHT11::changer_timer_cycle(float new_Temps_cycle_mesure) |
mbedo | 0:dca3b291558e | 32 | { |
mbedo | 0:dca3b291558e | 33 | if(new_Temps_cycle_mesure < 2) Temps_cycle_mesure = 2; |
mbedo | 0:dca3b291558e | 34 | else Temps_cycle_mesure = new_Temps_cycle_mesure; |
mbedo | 0:dca3b291558e | 35 | if(etat_cycle) desactiver(); init(); |
mbedo | 0:dca3b291558e | 36 | } |
mbedo | 0:dca3b291558e | 37 | |
mbedo | 0:dca3b291558e | 38 | void SHT11::init(void) |
mbedo | 0:dca3b291558e | 39 | { |
mbedo | 0:dca3b291558e | 40 | // ____________________________________________ |
mbedo | 0:dca3b291558e | 41 | // DATA |__ |
mbedo | 0:dca3b291558e | 42 | // __ __ __ __ __ __ __ __ __ |
mbedo | 0:dca3b291558e | 43 | // SCK_HT _| |_| |_| |_| |_| |_| |_| |_| |_| |_ |
mbedo | 0:dca3b291558e | 44 | unsigned char i; |
mbedo | 0:dca3b291558e | 45 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 46 | DATA_HT=1; |
mbedo | 0:dca3b291558e | 47 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 48 | for (i=0;i<9;i++) |
mbedo | 0:dca3b291558e | 49 | { |
mbedo | 0:dca3b291558e | 50 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 51 | // wait_us(1); |
mbedo | 0:dca3b291558e | 52 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 53 | // wait_us(1); |
mbedo | 0:dca3b291558e | 54 | } |
mbedo | 0:dca3b291558e | 55 | etat_sht11=0; |
mbedo | 0:dca3b291558e | 56 | etat_cycle=1; |
mbedo | 0:dca3b291558e | 57 | Timer_cycle_mesure.attach(this, &SHT11::gestion_HT, Temps_cycle_mesure); |
mbedo | 0:dca3b291558e | 58 | } |
mbedo | 0:dca3b291558e | 59 | |
mbedo | 0:dca3b291558e | 60 | void SHT11::desactiver(void) |
mbedo | 0:dca3b291558e | 61 | { |
mbedo | 0:dca3b291558e | 62 | etat_cycle=0; |
mbedo | 0:dca3b291558e | 63 | Timer_cycle_mesure.detach(); |
mbedo | 0:dca3b291558e | 64 | } |
mbedo | 0:dca3b291558e | 65 | |
mbedo | 0:dca3b291558e | 66 | void SHT11::demande_mesure(short octet_de_commande) |
mbedo | 0:dca3b291558e | 67 | { |
mbedo | 0:dca3b291558e | 68 | unsigned int i; |
mbedo | 0:dca3b291558e | 69 | |
mbedo | 0:dca3b291558e | 70 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 71 | for(i=0;i<8;i++) |
mbedo | 0:dca3b291558e | 72 | { |
mbedo | 0:dca3b291558e | 73 | if ((octet_de_commande)&(0x80)) DATA_HT=1; |
mbedo | 0:dca3b291558e | 74 | else DATA_HT=0; |
mbedo | 0:dca3b291558e | 75 | // wait_us(1); |
mbedo | 0:dca3b291558e | 76 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 77 | // wait_us(1); |
mbedo | 0:dca3b291558e | 78 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 79 | octet_de_commande=octet_de_commande*2; |
mbedo | 0:dca3b291558e | 80 | } |
mbedo | 0:dca3b291558e | 81 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 82 | // wait_us(1); |
mbedo | 0:dca3b291558e | 83 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 84 | // wait_us(1); |
mbedo | 0:dca3b291558e | 85 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 86 | // wait_us(1); |
mbedo | 0:dca3b291558e | 87 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 88 | DATA_HT=1; |
mbedo | 0:dca3b291558e | 89 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 90 | } |
mbedo | 0:dca3b291558e | 91 | |
mbedo | 0:dca3b291558e | 92 | void SHT11::mesure_T(void) |
mbedo | 0:dca3b291558e | 93 | { |
mbedo | 0:dca3b291558e | 94 | start(); |
mbedo | 0:dca3b291558e | 95 | demande_mesure(3); |
mbedo | 0:dca3b291558e | 96 | } |
mbedo | 0:dca3b291558e | 97 | |
mbedo | 0:dca3b291558e | 98 | void SHT11::mesure_H(void) |
mbedo | 0:dca3b291558e | 99 | { |
mbedo | 0:dca3b291558e | 100 | start(); |
mbedo | 0:dca3b291558e | 101 | demande_mesure(5); |
mbedo | 0:dca3b291558e | 102 | } |
mbedo | 0:dca3b291558e | 103 | |
mbedo | 0:dca3b291558e | 104 | void SHT11::calcul_Temperature_Humidite(void) |
mbedo | 0:dca3b291558e | 105 | { |
mbedo | 0:dca3b291558e | 106 | Temperature_mesuree=(Temperature*0.01-40); |
mbedo | 0:dca3b291558e | 107 | Humidite_mesuree=((float)Temperature_mesuree-25.0)*(0.01+(0.00008*Humidite))-4+0.0405*Humidite-0.0000028*Humidite*Humidite; |
mbedo | 0:dca3b291558e | 108 | } |
mbedo | 0:dca3b291558e | 109 | |
mbedo | 0:dca3b291558e | 110 | void SHT11::reception_mesure_T(void) |
mbedo | 0:dca3b291558e | 111 | { |
mbedo | 0:dca3b291558e | 112 | unsigned int i; |
mbedo | 0:dca3b291558e | 113 | Temperature=0; |
mbedo | 0:dca3b291558e | 114 | |
mbedo | 0:dca3b291558e | 115 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 116 | for (i=0;i<8;i++) |
mbedo | 0:dca3b291558e | 117 | { |
mbedo | 0:dca3b291558e | 118 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 119 | // wait_us(1); |
mbedo | 0:dca3b291558e | 120 | Temperature *=2; |
mbedo | 0:dca3b291558e | 121 | if (DATA_HT==1) Temperature++; |
mbedo | 0:dca3b291558e | 122 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 123 | // wait_us(1); |
mbedo | 0:dca3b291558e | 124 | } |
mbedo | 0:dca3b291558e | 125 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 126 | DATA_HT=0; |
mbedo | 0:dca3b291558e | 127 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 128 | // wait_us(1); |
mbedo | 0:dca3b291558e | 129 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 130 | // wait_us(1); |
mbedo | 0:dca3b291558e | 131 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 132 | for (i=0;i<8;i++) |
mbedo | 0:dca3b291558e | 133 | { |
mbedo | 0:dca3b291558e | 134 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 135 | // wait_us(1); |
mbedo | 0:dca3b291558e | 136 | Temperature *=2; |
mbedo | 0:dca3b291558e | 137 | if (DATA_HT==1) Temperature++; |
mbedo | 0:dca3b291558e | 138 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 139 | // wait_us(1); |
mbedo | 0:dca3b291558e | 140 | } |
mbedo | 0:dca3b291558e | 141 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 142 | DATA_HT=1; |
mbedo | 0:dca3b291558e | 143 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 144 | // wait_us(1); |
mbedo | 0:dca3b291558e | 145 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 146 | // wait_us(1); |
mbedo | 0:dca3b291558e | 147 | } |
mbedo | 0:dca3b291558e | 148 | |
mbedo | 0:dca3b291558e | 149 | void SHT11::reception_mesure_H(void) |
mbedo | 0:dca3b291558e | 150 | { |
mbedo | 0:dca3b291558e | 151 | unsigned int i; |
mbedo | 0:dca3b291558e | 152 | Humidite=0; |
mbedo | 0:dca3b291558e | 153 | |
mbedo | 0:dca3b291558e | 154 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 155 | for (i=0;i<8;i++) |
mbedo | 0:dca3b291558e | 156 | { |
mbedo | 0:dca3b291558e | 157 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 158 | // wait_us(1); |
mbedo | 0:dca3b291558e | 159 | Humidite *=2; |
mbedo | 0:dca3b291558e | 160 | if (DATA_HT==1) Humidite++; |
mbedo | 0:dca3b291558e | 161 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 162 | // wait_us(1); |
mbedo | 0:dca3b291558e | 163 | } |
mbedo | 0:dca3b291558e | 164 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 165 | DATA_HT=0; |
mbedo | 0:dca3b291558e | 166 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 167 | // wait_us(1); |
mbedo | 0:dca3b291558e | 168 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 169 | // wait_us(1); |
mbedo | 0:dca3b291558e | 170 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 171 | for (i=0;i<8;i++) |
mbedo | 0:dca3b291558e | 172 | { |
mbedo | 0:dca3b291558e | 173 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 174 | // wait_us(1); |
mbedo | 0:dca3b291558e | 175 | Humidite *=2; |
mbedo | 0:dca3b291558e | 176 | if (DATA_HT==1) Humidite++; |
mbedo | 0:dca3b291558e | 177 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 178 | // wait_us(1); |
mbedo | 0:dca3b291558e | 179 | } |
mbedo | 0:dca3b291558e | 180 | DATA_HT.output(); |
mbedo | 0:dca3b291558e | 181 | DATA_HT=1; |
mbedo | 0:dca3b291558e | 182 | SCK_HT=1; |
mbedo | 0:dca3b291558e | 183 | // wait_us(1); |
mbedo | 0:dca3b291558e | 184 | SCK_HT=0; |
mbedo | 0:dca3b291558e | 185 | // wait_us(1); |
mbedo | 0:dca3b291558e | 186 | } |
mbedo | 0:dca3b291558e | 187 | |
mbedo | 0:dca3b291558e | 188 | void SHT11::gestion_HT(void) |
mbedo | 0:dca3b291558e | 189 | { |
mbedo | 0:dca3b291558e | 190 | switch (etat_sht11) |
mbedo | 0:dca3b291558e | 191 | { |
mbedo | 0:dca3b291558e | 192 | case 0: |
mbedo | 0:dca3b291558e | 193 | Timer_cycle_mesure.detach(); |
mbedo | 0:dca3b291558e | 194 | mesure_T(); |
mbedo | 0:dca3b291558e | 195 | etat_sht11=1; |
mbedo | 0:dca3b291558e | 196 | Timer_cycle_mesure.attach_us(this, &SHT11::gestion_HT, 10000); |
mbedo | 0:dca3b291558e | 197 | break; |
mbedo | 0:dca3b291558e | 198 | |
mbedo | 0:dca3b291558e | 199 | case 1: |
mbedo | 0:dca3b291558e | 200 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 201 | if (DATA_HT==0) |
mbedo | 0:dca3b291558e | 202 | { |
mbedo | 0:dca3b291558e | 203 | Timer_cycle_mesure.detach(); |
mbedo | 0:dca3b291558e | 204 | etat_sht11=2; |
mbedo | 0:dca3b291558e | 205 | Timer_cycle_mesure.attach_us(this, &SHT11::gestion_HT, 1); |
mbedo | 0:dca3b291558e | 206 | } |
mbedo | 0:dca3b291558e | 207 | break; |
mbedo | 0:dca3b291558e | 208 | |
mbedo | 0:dca3b291558e | 209 | case 2: |
mbedo | 0:dca3b291558e | 210 | Timer_cycle_mesure.detach(); |
mbedo | 0:dca3b291558e | 211 | reception_mesure_T(); |
mbedo | 0:dca3b291558e | 212 | etat_sht11=3; |
mbedo | 0:dca3b291558e | 213 | Timer_cycle_mesure.attach_us(this, &SHT11::gestion_HT, 1); |
mbedo | 0:dca3b291558e | 214 | break; |
mbedo | 0:dca3b291558e | 215 | |
mbedo | 0:dca3b291558e | 216 | case 3: |
mbedo | 0:dca3b291558e | 217 | Timer_cycle_mesure.detach(); |
mbedo | 0:dca3b291558e | 218 | mesure_H(); |
mbedo | 0:dca3b291558e | 219 | etat_sht11=4; |
mbedo | 0:dca3b291558e | 220 | Timer_cycle_mesure.attach_us(this, &SHT11::gestion_HT, 10000); |
mbedo | 0:dca3b291558e | 221 | break; |
mbedo | 0:dca3b291558e | 222 | |
mbedo | 0:dca3b291558e | 223 | case 4: |
mbedo | 0:dca3b291558e | 224 | DATA_HT.input(); |
mbedo | 0:dca3b291558e | 225 | if (DATA_HT==0) |
mbedo | 0:dca3b291558e | 226 | { |
mbedo | 0:dca3b291558e | 227 | Timer_cycle_mesure.detach(); |
mbedo | 0:dca3b291558e | 228 | etat_sht11=5; |
mbedo | 0:dca3b291558e | 229 | Timer_cycle_mesure.attach_us(this, &SHT11::gestion_HT, 1); |
mbedo | 0:dca3b291558e | 230 | } |
mbedo | 0:dca3b291558e | 231 | break; |
mbedo | 0:dca3b291558e | 232 | |
mbedo | 0:dca3b291558e | 233 | case 5: |
mbedo | 0:dca3b291558e | 234 | Timer_cycle_mesure.detach(); |
mbedo | 0:dca3b291558e | 235 | reception_mesure_H(); |
mbedo | 0:dca3b291558e | 236 | calcul_Temperature_Humidite(); |
mbedo | 0:dca3b291558e | 237 | etat_sht11=0; |
mbedo | 0:dca3b291558e | 238 | Timer_cycle_mesure.attach(this, &SHT11::gestion_HT, Temps_cycle_mesure); |
mbedo | 0:dca3b291558e | 239 | break; |
mbedo | 0:dca3b291558e | 240 | |
mbedo | 0:dca3b291558e | 241 | default: |
mbedo | 0:dca3b291558e | 242 | etat_sht11=0; |
mbedo | 0:dca3b291558e | 243 | break; |
mbedo | 0:dca3b291558e | 244 | } |
mbedo | 0:dca3b291558e | 245 | } |
mbedo | 0:dca3b291558e | 246 | |
mbedo | 0:dca3b291558e | 247 | float SHT11::lire_T(void) |
mbedo | 0:dca3b291558e | 248 | { |
mbedo | 0:dca3b291558e | 249 | return Temperature_mesuree; |
mbedo | 0:dca3b291558e | 250 | } |
mbedo | 0:dca3b291558e | 251 | |
mbedo | 0:dca3b291558e | 252 | float SHT11::lire_H(void) |
mbedo | 0:dca3b291558e | 253 | { |
mbedo | 0:dca3b291558e | 254 | return Humidite_mesuree; |
mbedo | 0:dca3b291558e | 255 | } |
mbedo | 0:dca3b291558e | 256 | |
mbedo | 0:dca3b291558e | 257 | void SHT11::lire_T_H(float *pointeur_Temperature, float *pointeur_Humidite) |
mbedo | 0:dca3b291558e | 258 | { |
mbedo | 0:dca3b291558e | 259 | *pointeur_Temperature = Temperature_mesuree; |
mbedo | 0:dca3b291558e | 260 | *pointeur_Humidite = Humidite_mesuree; |
mbedo | 0:dca3b291558e | 261 | } |
mbedo | 0:dca3b291558e | 262 |