Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependents: lib_SHT11_example libs_YSI_example
lib_SHT11.cpp
00001 /** SHT11 class 00002 * 00003 * @purpose library for SHT11 humidity and temperature sensor 00004 * 00005 * Utilisée pour mesurer la temperature et l'humidite 00006 * 00007 * https://www.sensirion.com/products/humidity-sensor/ 00008 * 00009 * Copyright (c) 2012, cstyles (http://mbed.org) 00010 * 00011 * Exemple: 00012 * @code 00013 * #include "mbed.h" 00014 * #include "lib_SHT11.h" 00015 * 00016 * SHT11 capteur_HT; 00017 * //SHT11 capteur_HT(p30, p29, 2.0); //data, sck, periode_cycle_mesure 00018 * Serial pc(USBTX, USBRX); 00019 * 00020 * int main() 00021 * { 00022 * float Temperature_mesuree=0.0, Humidite_mesuree=0.0; 00023 * 00024 * while(1) 00025 * { 00026 * if((Temperature_mesuree != capteur_HT.lire_T()) || (Humidite_mesuree != capteur_HT.lire_H())) 00027 * { 00028 * capteur_HT.lire_T_H(&Temperature_mesuree, &Humidite_mesuree); 00029 * pc.printf("T=%f\tH=%f\r\n", Temperature_mesuree, Humidite_mesuree); 00030 * } 00031 * } 00032 * } 00033 * @endcode 00034 * @file lib_SHT11.cpp 00035 * @date Jun 2012 00036 * @author Yannic Simon 00037 */ 00038 00039 #include "lib_SHT11.h" 00040 00041 00042 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) 00043 { 00044 if(Temps_cycle_mesure < 2) Temps_cycle_mesure = 2; 00045 init(); 00046 } 00047 00048 void SHT11::start(void) 00049 { 00050 DATA_HT.output(); 00051 DATA_HT=1; 00052 SCK_HT=0; 00053 wait_us(1); 00054 SCK_HT=1; 00055 wait_us(1); 00056 DATA_HT=0; 00057 wait_us(1); 00058 SCK_HT=0; 00059 wait_us(1); 00060 SCK_HT=1; 00061 wait_us(1); 00062 DATA_HT=1; 00063 wait_us(1); 00064 SCK_HT=0; 00065 wait_us(1); 00066 DATA_HT=0; 00067 } 00068 00069 void SHT11::changer_timer_cycle(float new_Temps_cycle_mesure) 00070 { 00071 if(new_Temps_cycle_mesure < 2) Temps_cycle_mesure = 2; 00072 else Temps_cycle_mesure = new_Temps_cycle_mesure; 00073 if(etat_cycle) desactiver(); init(); 00074 } 00075 00076 void SHT11::init(void) 00077 { 00078 // ____________________________________________ 00079 // DATA_HT |__ 00080 // __ __ __ __ __ __ __ __ __ 00081 // SCK_HT _| |_| |_| |_| |_| |_| |_| |_| |_| |_ 00082 unsigned char i; 00083 DATA_HT.output(); 00084 DATA_HT=1; 00085 SCK_HT=0; 00086 for (i=0;i<9;i++) 00087 { 00088 SCK_HT=1; 00089 wait_us(1); 00090 SCK_HT=0; 00091 wait_us(1); 00092 } 00093 etat_sht11=0; 00094 etat_cycle=1; 00095 Timer_cycle_mesure.attach(callback(this, &SHT11::gestion_HT), Temps_cycle_mesure); 00096 } 00097 00098 void SHT11::desactiver(void) 00099 { 00100 etat_cycle=0; 00101 Timer_cycle_mesure.detach(); 00102 } 00103 00104 void SHT11::demande_mesure(short octet_de_commande) 00105 { 00106 unsigned int i; 00107 00108 DATA_HT.output(); 00109 for(i=0;i<8;i++) 00110 { 00111 if ((octet_de_commande)&(0x80)) DATA_HT=1; 00112 else DATA_HT=0; 00113 wait_us(1); 00114 SCK_HT=1; 00115 wait_us(1); 00116 SCK_HT=0; 00117 octet_de_commande=octet_de_commande*2; 00118 } 00119 DATA_HT.input(); 00120 wait_us(1); 00121 SCK_HT=1; 00122 wait_us(1); 00123 SCK_HT=0; 00124 wait_us(1); 00125 DATA_HT.output(); 00126 DATA_HT=1; 00127 DATA_HT.input(); 00128 } 00129 00130 void SHT11::mesure_T(void) 00131 { 00132 start(); 00133 demande_mesure(3); 00134 } 00135 00136 void SHT11::mesure_H(void) 00137 { 00138 start(); 00139 demande_mesure(5); 00140 } 00141 00142 void SHT11::calcul_Temperature_Humidite(void) 00143 { 00144 Temperature_mesuree=(Temperature*0.01-40); 00145 Humidite_mesuree=((float)Temperature_mesuree-25.0)*(0.01+(0.00008*Humidite))-4+0.0405*Humidite-0.0000028*Humidite*Humidite; 00146 } 00147 00148 void SHT11::reception_mesure_T(void) 00149 { 00150 unsigned int i; 00151 Temperature=0; 00152 00153 DATA_HT.input(); 00154 for (i=0;i<8;i++) 00155 { 00156 SCK_HT=1; 00157 wait_us(1); 00158 Temperature *=2; 00159 if (DATA_HT==1) Temperature++; 00160 SCK_HT=0; 00161 wait_us(1); 00162 } 00163 DATA_HT.output(); 00164 DATA_HT=0; 00165 SCK_HT=1; 00166 wait_us(1); 00167 SCK_HT=0; 00168 wait_us(1); 00169 DATA_HT.input(); 00170 for (i=0;i<8;i++) 00171 { 00172 SCK_HT=1; 00173 wait_us(1); 00174 Temperature *=2; 00175 if (DATA_HT==1) Temperature++; 00176 SCK_HT=0; 00177 wait_us(1); 00178 } 00179 DATA_HT.output(); 00180 DATA_HT=1; 00181 SCK_HT=1; 00182 wait_us(1); 00183 SCK_HT=0; 00184 wait_us(1); 00185 } 00186 00187 void SHT11::reception_mesure_H(void) 00188 { 00189 unsigned int i; 00190 Humidite=0; 00191 00192 DATA_HT.input(); 00193 for (i=0;i<8;i++) 00194 { 00195 SCK_HT=1; 00196 wait_us(1); 00197 Humidite *=2; 00198 if (DATA_HT==1) Humidite++; 00199 SCK_HT=0; 00200 wait_us(1); 00201 } 00202 DATA_HT.output(); 00203 DATA_HT=0; 00204 SCK_HT=1; 00205 wait_us(1); 00206 SCK_HT=0; 00207 wait_us(1); 00208 DATA_HT.input(); 00209 for (i=0;i<8;i++) 00210 { 00211 SCK_HT=1; 00212 wait_us(1); 00213 Humidite *=2; 00214 if (DATA_HT==1) Humidite++; 00215 SCK_HT=0; 00216 wait_us(1); 00217 } 00218 DATA_HT.output(); 00219 DATA_HT=1; 00220 SCK_HT=1; 00221 wait_us(1); 00222 SCK_HT=0; 00223 wait_us(1); 00224 } 00225 00226 void SHT11::gestion_HT(void) 00227 { 00228 switch (etat_sht11) 00229 { 00230 case 0: 00231 Timer_cycle_mesure.detach(); 00232 mesure_T(); 00233 etat_sht11=1; 00234 Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 10000); 00235 break; 00236 00237 case 1: 00238 DATA_HT.input(); 00239 if (DATA_HT==0) 00240 { 00241 Timer_cycle_mesure.detach(); 00242 etat_sht11=2; 00243 Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 1); 00244 } 00245 break; 00246 00247 case 2: 00248 Timer_cycle_mesure.detach(); 00249 reception_mesure_T(); 00250 etat_sht11=3; 00251 Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 1); 00252 break; 00253 00254 case 3: 00255 Timer_cycle_mesure.detach(); 00256 mesure_H(); 00257 etat_sht11=4; 00258 Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 10000); 00259 break; 00260 00261 case 4: 00262 DATA_HT.input(); 00263 if (DATA_HT==0) 00264 { 00265 Timer_cycle_mesure.detach(); 00266 etat_sht11=5; 00267 Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 1); 00268 } 00269 break; 00270 00271 case 5: 00272 Timer_cycle_mesure.detach(); 00273 reception_mesure_H(); 00274 calcul_Temperature_Humidite(); 00275 etat_sht11=0; 00276 Timer_cycle_mesure.attach(callback(this, &SHT11::gestion_HT), Temps_cycle_mesure); 00277 break; 00278 00279 default: 00280 etat_sht11=0; 00281 break; 00282 } 00283 } 00284 00285 float SHT11::lire_T(void) 00286 { 00287 return Temperature_mesuree; 00288 } 00289 00290 float SHT11::lire_H(void) 00291 { 00292 return Humidite_mesuree; 00293 } 00294 00295 void SHT11::lire_T_H(float *pointeur_Temperature, float *pointeur_Humidite) 00296 { 00297 *pointeur_Temperature = Temperature_mesuree; 00298 *pointeur_Humidite = Humidite_mesuree; 00299 }
Generated on Sun Jul 24 2022 05:26:13 by
1.7.2