td1

Dependencies:   lib_LCD_i2c_SPTLYI mbed

Files at this revision

API Documentation at this revision

Comitter:
mbedo
Date:
Thu Oct 23 09:42:24 2014 +0000
Commit message:
tp1_exo1

Changed in this revision

lib_LCD_i2c_SPTLYI.lib Show annotated file Show diff for this revision Revisions of this file
lib_SHT/lib_SHT11.cpp Show annotated file Show diff for this revision Revisions of this file
lib_SHT/lib_SHT11.h Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib_LCD_i2c_SPTLYI.lib	Thu Oct 23 09:42:24 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/YSI/code/lib_LCD_i2c_SPTLYI/#a805daa83dd0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lib_SHT/lib_SHT11.cpp	Thu Oct 23 09:42:24 2014 +0000
@@ -0,0 +1,262 @@
+#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                                              |__
+//            __   __   __   __   __   __   __   __   __
+// 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(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(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(this, &SHT11::gestion_HT, 1);
+        }
+        break;
+        
+        case 2:
+        Timer_cycle_mesure.detach();
+        reception_mesure_T();
+        etat_sht11=3;
+        Timer_cycle_mesure.attach_us(this, &SHT11::gestion_HT, 1);
+        break;
+        
+        case 3:
+        Timer_cycle_mesure.detach();
+        mesure_H();
+        etat_sht11=4;
+        Timer_cycle_mesure.attach_us(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(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(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_SHT/lib_SHT11.h	Thu Oct 23 09:42:24 2014 +0000
@@ -0,0 +1,45 @@
+#ifndef DEF_lib_SHT11_H
+#define DEF_lib_SHT11_H
+
+#include "mbed.h"
+
+
+class SHT11 : public Ticker
+{
+public:
+    SHT11(PinName pin_DATA, PinName pin_SCK, float T_C_mesure);
+
+    float lire_T(void);
+    float lire_H(void);
+    void lire_T_H(float *, float *);
+    void changer_timer_cycle(float new_Temps_cycle_mesure);
+    void init(void);
+    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 etat_sht11;
+    unsigned etat_cycle;
+    float Temperature_mesuree;
+    float Humidite_mesuree;
+    float Temps_cycle_mesure;
+};
+
+#endif
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Oct 23 09:42:24 2014 +0000
@@ -0,0 +1,35 @@
+#include "mbed.h"
+#include "lib_LCD_i2c_SPTLYI.h"
+LCD_I2C LCD(p28,p27,p26,0x7C);
+
+int main()
+{
+
+
+    float i=0;
+    float j=0;
+
+    LCD.set_position_cursor(0,0);
+    LCD.print("compteur:");
+    LCD.set_position_cursor(0,1);
+    LCD.print("compteur2:");
+    while(1) {
+        
+
+        LCD.set_position_cursor(9,0);
+
+        LCD.print(i++);
+        if(i>99) i=0.0 ;
+        wait(0.25);
+
+
+        LCD.set_position_cursor(10,1);
+
+        LCD.print(j=i/2);
+        if(j>99) j=0.0 ;
+        wait(0.25);
+
+    }
+}
+
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mbed.bld	Thu Oct 23 09:42:24 2014 +0000
@@ -0,0 +1,1 @@
+http://mbed.org/users/mbed_official/code/mbed/builds/9327015d4013
\ No newline at end of file