td1

Dependencies:   lib_LCD_i2c_SPTLYI mbed

Committer:
mbedo
Date:
Thu Oct 23 09:42:24 2014 +0000
Revision:
0:dca3b291558e
tp1_exo1

Who changed what in which revision?

UserRevisionLine numberNew 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