td1suite

Dependencies:   lib_LCD_i2c_SPTLYI mbed

Committer:
mbedo
Date:
Thu Oct 23 12:11:14 2014 +0000
Revision:
0:24f677c563ac
td1suite;

Who changed what in which revision?

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