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
Revision 0:6b657f74b4e4, committed 2017-06-06
- Comitter:
- YSI
- Date:
- Tue Jun 06 14:08:27 2017 +0000
- Commit message:
- lib_SHT11
Changed in this revision
| lib_SHT11.cpp | Show annotated file Show diff for this revision Revisions of this file |
| lib_SHT11.h | Show annotated file Show diff for this revision Revisions of this file |
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib_SHT11.cpp Tue Jun 06 14:08:27 2017 +0000
@@ -0,0 +1,299 @@
+/** SHT11 class
+*
+* @purpose library for SHT11 humidity and temperature sensor
+*
+* Utilisée pour mesurer la temperature et l'humidite
+*
+* https://www.sensirion.com/products/humidity-sensor/
+*
+* Copyright (c) 2012, cstyles (http://mbed.org)
+*
+* Exemple:
+* @code
+* #include "mbed.h"
+* #include "lib_SHT11.h"
+*
+* SHT11 capteur_HT;
+* //SHT11 capteur_HT(p30, p29, 2.0); //data, sck, periode_cycle_mesure
+* Serial pc(USBTX, USBRX);
+*
+* int main()
+* {
+* float Temperature_mesuree=0.0, Humidite_mesuree=0.0;
+*
+* while(1)
+* {
+* if((Temperature_mesuree != capteur_HT.lire_T()) || (Humidite_mesuree != capteur_HT.lire_H()))
+* {
+* capteur_HT.lire_T_H(&Temperature_mesuree, &Humidite_mesuree);
+* pc.printf("T=%f\tH=%f\r\n", Temperature_mesuree, Humidite_mesuree);
+* }
+* }
+* }
+* @endcode
+* @file lib_SHT11.cpp
+* @date Jun 2012
+* @author Yannic Simon
+*/
+
+#include "lib_SHT11.h"
+
+
+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)
+{
+ if(Temps_cycle_mesure < 2) Temps_cycle_mesure = 2;
+ init();
+}
+
+void SHT11::start(void)
+{
+ DATA_HT.output();
+ DATA_HT=1;
+ SCK_HT=0;
+ wait_us(1);
+ SCK_HT=1;
+ wait_us(1);
+ DATA_HT=0;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+ SCK_HT=1;
+ wait_us(1);
+ DATA_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+ DATA_HT=0;
+}
+
+void SHT11::changer_timer_cycle(float new_Temps_cycle_mesure)
+{
+ if(new_Temps_cycle_mesure < 2) Temps_cycle_mesure = 2;
+ else Temps_cycle_mesure = new_Temps_cycle_mesure;
+ if(etat_cycle) desactiver(); init();
+}
+
+void SHT11::init(void)
+{
+// ____________________________________________
+// DATA_HT |__
+// __ __ __ __ __ __ __ __ __
+// SCK_HT _| |_| |_| |_| |_| |_| |_| |_| |_| |_
+ unsigned char i;
+ DATA_HT.output();
+ DATA_HT=1;
+ SCK_HT=0;
+ for (i=0;i<9;i++)
+ {
+ SCK_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+ }
+ etat_sht11=0;
+ etat_cycle=1;
+ Timer_cycle_mesure.attach(callback(this, &SHT11::gestion_HT), Temps_cycle_mesure);
+}
+
+void SHT11::desactiver(void)
+{
+ etat_cycle=0;
+ Timer_cycle_mesure.detach();
+}
+
+void SHT11::demande_mesure(short octet_de_commande)
+{
+ unsigned int i;
+
+ DATA_HT.output();
+ for(i=0;i<8;i++)
+ {
+ if ((octet_de_commande)&(0x80)) DATA_HT=1;
+ else DATA_HT=0;
+ wait_us(1);
+ SCK_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ octet_de_commande=octet_de_commande*2;
+ }
+ DATA_HT.input();
+ wait_us(1);
+ SCK_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+ DATA_HT.output();
+ DATA_HT=1;
+ DATA_HT.input();
+}
+
+void SHT11::mesure_T(void)
+{
+ start();
+ demande_mesure(3);
+}
+
+void SHT11::mesure_H(void)
+{
+ start();
+ demande_mesure(5);
+}
+
+void SHT11::calcul_Temperature_Humidite(void)
+{
+ Temperature_mesuree=(Temperature*0.01-40);
+ Humidite_mesuree=((float)Temperature_mesuree-25.0)*(0.01+(0.00008*Humidite))-4+0.0405*Humidite-0.0000028*Humidite*Humidite;
+}
+
+void SHT11::reception_mesure_T(void)
+{
+ unsigned int i;
+ Temperature=0;
+
+ DATA_HT.input();
+ for (i=0;i<8;i++)
+ {
+ SCK_HT=1;
+ wait_us(1);
+ Temperature *=2;
+ if (DATA_HT==1) Temperature++;
+ SCK_HT=0;
+ wait_us(1);
+ }
+ DATA_HT.output();
+ DATA_HT=0;
+ SCK_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+ DATA_HT.input();
+ for (i=0;i<8;i++)
+ {
+ SCK_HT=1;
+ wait_us(1);
+ Temperature *=2;
+ if (DATA_HT==1) Temperature++;
+ SCK_HT=0;
+ wait_us(1);
+ }
+ DATA_HT.output();
+ DATA_HT=1;
+ SCK_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+}
+
+void SHT11::reception_mesure_H(void)
+{
+ unsigned int i;
+ Humidite=0;
+
+ DATA_HT.input();
+ for (i=0;i<8;i++)
+ {
+ SCK_HT=1;
+ wait_us(1);
+ Humidite *=2;
+ if (DATA_HT==1) Humidite++;
+ SCK_HT=0;
+ wait_us(1);
+ }
+ DATA_HT.output();
+ DATA_HT=0;
+ SCK_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+ DATA_HT.input();
+ for (i=0;i<8;i++)
+ {
+ SCK_HT=1;
+ wait_us(1);
+ Humidite *=2;
+ if (DATA_HT==1) Humidite++;
+ SCK_HT=0;
+ wait_us(1);
+ }
+ DATA_HT.output();
+ DATA_HT=1;
+ SCK_HT=1;
+ wait_us(1);
+ SCK_HT=0;
+ wait_us(1);
+}
+
+void SHT11::gestion_HT(void)
+{
+ switch (etat_sht11)
+ {
+ case 0:
+ Timer_cycle_mesure.detach();
+ mesure_T();
+ etat_sht11=1;
+ Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 10000);
+ break;
+
+ case 1:
+ DATA_HT.input();
+ if (DATA_HT==0)
+ {
+ Timer_cycle_mesure.detach();
+ etat_sht11=2;
+ Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 1);
+ }
+ break;
+
+ case 2:
+ Timer_cycle_mesure.detach();
+ reception_mesure_T();
+ etat_sht11=3;
+ Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 1);
+ break;
+
+ case 3:
+ Timer_cycle_mesure.detach();
+ mesure_H();
+ etat_sht11=4;
+ Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 10000);
+ break;
+
+ case 4:
+ DATA_HT.input();
+ if (DATA_HT==0)
+ {
+ Timer_cycle_mesure.detach();
+ etat_sht11=5;
+ Timer_cycle_mesure.attach_us(callback(this, &SHT11::gestion_HT), 1);
+ }
+ break;
+
+ case 5:
+ Timer_cycle_mesure.detach();
+ reception_mesure_H();
+ calcul_Temperature_Humidite();
+ etat_sht11=0;
+ Timer_cycle_mesure.attach(callback(this, &SHT11::gestion_HT), Temps_cycle_mesure);
+ break;
+
+ default:
+ etat_sht11=0;
+ break;
+ }
+}
+
+float SHT11::lire_T(void)
+{
+ return Temperature_mesuree;
+}
+
+float SHT11::lire_H(void)
+{
+ return Humidite_mesuree;
+}
+
+void SHT11::lire_T_H(float *pointeur_Temperature, float *pointeur_Humidite)
+{
+ *pointeur_Temperature = Temperature_mesuree;
+ *pointeur_Humidite = Humidite_mesuree;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lib_SHT11.h Tue Jun 06 14:08:27 2017 +0000
@@ -0,0 +1,126 @@
+/** SHT11 class
+*
+* @purpose library for SHT11 humidity and temperature sensor
+*
+* Utilisée pour mesurer la temperature et l'humidite
+*
+* https://www.sensirion.com/products/humidity-sensor/
+*
+* Copyright (c) 2012, cstyles (http://mbed.org)
+*
+* Exemple:
+* @code
+* #include "mbed.h"
+* #include "lib_SHT11.h"
+*
+* SHT11 capteur_HT;
+* //SHT11 capteur_HT(p30, p29, 2.0); //data, sck, periode_cycle_mesure
+* Serial pc(USBTX, USBRX);
+*
+* int main()
+* {
+* float Temperature_mesuree=0.0, Humidite_mesuree=0.0;
+*
+* while(1)
+* {
+* if((Temperature_mesuree != capteur_HT.lire_T()) || (Humidite_mesuree != capteur_HT.lire_H()))
+* {
+* capteur_HT.lire_T_H(&Temperature_mesuree, &Humidite_mesuree);
+* pc.printf("T=%f\tH=%f\r\n", Temperature_mesuree, Humidite_mesuree);
+* }
+* }
+* }
+* @endcode
+* @file lib_SHT11.h
+* @date Jun 2012
+* @author Yannic Simon
+*/
+
+#ifndef DEF_lib_SHT11_H
+#define DEF_lib_SHT11_H
+
+#include "mbed.h"
+
+/** SHT11 class
+ */
+class SHT11 : public Ticker
+{
+public:
+ /** Creer une instance SHT11
+ * sur les pins data, sck avec une periode de mesure de minimum 2sec
+ *
+ * @param pin_DATA par defaut p30
+ * @param pin_SCK par defaut p29
+ * @param T_C_mesure par defaut 2.0
+ */
+ SHT11(PinName pin_DATA = p30, PinName pin_SCK = p29, float T_C_mesure = 2.0);
+
+ /** renvoie la derniere temperature mesuree
+ *
+ * @param aucun
+ * @returns la temperature en degres Celsius
+ */
+ float lire_T(void);
+
+ /** renvoie la derniere humidite mesuree
+ *
+ * @param aucun
+ * @returns l'humidite relative
+ */
+ float lire_H(void);
+
+ /** donne les derniere humidite et temperature mesuree
+ *
+ * @param T variable qui sera actualisee avec la temperature
+ * @param H variable qui sera actualisee avec l'humidite
+ * @returns aucun
+ */
+ void lire_T_H(float *T, float *H);
+
+ /** change la periode de mesure du capteur
+ *
+ * @param new_Temps_cycle_mesure (minimum 2sec)
+ * @returns aucun
+ */
+ void changer_timer_cycle(float new_Temps_cycle_mesure);
+
+ /** initialisation du capteur
+ *
+ * @param aucun
+ * @returns aucun
+ */
+ void init(void);
+
+ /** desactivation de la mesure du capteur
+ *
+ * @param aucun
+ * @returns aucun
+ */
+ void desactiver(void);
+
+private:
+
+ void start(void);
+ void gestion_HT(void);
+ void demande_mesure(short octet_de_commande);
+ void mesure_T(void);
+ void mesure_H(void);
+ void mesure_T_H(void);
+ void reception_mesure_T(void);
+ void reception_mesure_H(void);
+ void calcul_Temperature_Humidite(void);
+
+ DigitalInOut DATA_HT;
+ DigitalOut SCK_HT;
+ Ticker Timer_cycle_mesure;
+
+ unsigned int Temperature;
+ unsigned int Humidite;
+ unsigned int etat_sht11;
+ unsigned int etat_cycle;
+ float Temperature_mesuree;
+ float Humidite_mesuree;
+ float Temps_cycle_mesure;
+};
+
+#endif