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