Théo Rostaing / Mbed 2 deprecated HumidityController

Dependencies:   DS3231 TextLCD ds3231 mbed

Revision:
0:f22ffbae6bef
Child:
1:fa823064f03c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Thu Jun 14 12:12:10 2018 +0000
@@ -0,0 +1,153 @@
+#include "mbed.h"
+#include "stdlib.h"
+#include "TextLCD.h"
+#include "stdio.h"
+
+Serial pc(USBTX, USBRX); // tx, rx
+TextLCD lcd(PA_10,PB_3,PB_5,PB_4,PB_10,PA_8); // rs, e, d4-d7
+AnalogIn capteur(PA_5);
+DigitalIn bouton(USER_BUTTON);
+DigitalOut myled(LED1);
+DigitalOut alarme(D9);
+DigitalOut ledverte(PB_9);
+
+I2C i2c(PC_1, PC_0);
+const int DS3231_ADDR = 0xd0;
+
+FILE *fp;
+char a='%';
+void affichageinf (double valhum);
+void affichagesup (double valhum, double tpsdepa);
+void affichageini (void);
+double valhum;
+int delaimesure=2; //le delais en seconde entre deux mesures.
+int tpscritique = 10*60; // le temps critique de dépassement du taux d'humidité en seconde
+int tpssave=600; //le delais en seconde entre deux sauvegardes de données dans la carte SD.
+
+
+void ecritureSD(double valhum)
+{
+    fp =fopen ("/sd/test.txt","a");
+    if (fp == NULL) { // Si on n'arrive pas a ouvrir le fichier dans la carte SD
+        lcd.cls();
+        lcd.printf("Erreur carte SD"); // On affiche sur l'ecran LCD qu'il y a une erreur
+    } else {
+//       int ret; Car on en a pas besoin
+//       int sec, Car on en a pas besoin
+        int min, hour, day, date, month, year;
+        char data_write[2];
+        char data_read[8];
+        data_write[0] = 0;
+        i2c.write(DS3231_ADDR, data_write, 1, 0);
+
+//        ret = i2c.read(DS3231_ADDR, data_read, 7, 0);
+//        sec = (data_read[0] >> 4) * 10 + (data_read[0] & 0x0f);
+        min = (data_read[1] >> 4) * 10 + (data_read[1] & 0x0f);
+        hour = (data_read[2] >> 5 & 0x01) * 20 + (data_read[2] >> 4 & 0x01) * 10 + (data_read[2] & 0x0f);
+
+        day = data_read[3] & 0x07;
+
+        date = (data_read[4] >> 4) * 10 + (data_read[4] & 0x0f);
+        month = (data_read[5] >> 4 & 0x01) * 10 + (data_read[5] & 0x0f);
+        year = 2000 + (data_read[6] >> 4) * 10 + (data_read[6] & 0x0f);
+        fprintf(fp,"%d-%02d-%02d %d %02d:%02d %.2f\n\r", year, month, date, day, hour, min, valhum); // Date = lundi, mardi, mercredi,... ?
+        fclose(fp);
+    }
+}
+
+void affichageini (void)
+{
+    //On affiche sur le LCD le message lié au taux supérieur à 5%Hr
+    lcd.cls();            //On récupère le nombre des dizaines
+    lcd.printf("INITIALISATION"); //On récupère le nombre des unités
+    lcd.locate(0,1);
+    lcd.printf("DU SYSTEME .");
+    wait(1);
+    lcd.locate(0,0);
+    lcd.printf("INITIALISATION");
+    lcd.locate(0,1);
+    lcd.printf("DU SYSTEME ..");
+    wait(1);
+    lcd.locate(0,0);
+    lcd.printf("INITIALISATION");
+    lcd.locate(0,1);
+    lcd.printf("DU SYSTEME ...");
+    wait(1);
+}
+
+void affichagesup (double valhum, int tpsdepa)
+{
+    //On affiche sur le LCD le message lié aux taux ingérieur à 5%Hr
+    int min = tpsdepa/60;
+    int rs = tpsdepa%60;
+    lcd.cls();
+    lcd.locate(0,0);
+    lcd.printf("HUM = %.2f",valhum);
+    lcd.locate(12,0);
+    lcd.printf("%cHR",a);
+    lcd.locate(0,1);
+    lcd.printf("TPS+5%c %dmin %ds",a,min,rs);
+}
+
+void affichageinf (double valhum)
+{
+    //On affiche sur LCD le message d'initialisation
+    lcd.cls();           //utile pour signlé qu'un reset manuel (boutton) a été effectué
+    lcd.locate(0,0);
+    lcd.printf("HUMIDITE MESUREE");
+    lcd.locate(0,1);
+    lcd.printf("EST DE");
+    lcd.locate(8,1);
+    lcd.printf("%.2f",valhum);
+    lcd.locate(12,1);
+    lcd.printf("%cHR",a);
+
+}
+
+int main()
+{
+    int tpsdepa = 0;
+    int compteur=0;
+    alarme =0;
+    ledverte=0;
+
+    int compteursave=0;
+    while(1) {
+        ledverte=1;  // On allume la led verte pour signaler que le système fonctionne
+        affichageini(); // On affiche sur l'ecran LCD le message d'initialisation
+
+        while(1) { // Boucle infini
+            double valcapteur = capteur.read()*3.3f;  //Récupération de la tension d'entrée du capteur,
+// qui est multipliée par la tension d'alimentation. Car la tension relevée est un pourcentage de
+// la tension d'alimentation (vout est comprise entre 0 et 1).
+            double valhum = (valcapteur-3.3*0.1515)/(0.00636*3.3); // Conversion de la tension en taux d'humidité
+            if (valhum < 5.0) { // Si le taux d'humidité est inférieur à 5% Hr
+                affichageinf (valhum); // On affiche sur le LCD le message lié au taux est inférieur à 5% Hr
+                compteur = compteur +1; // Incrémentation du compteur
+                if (compteur == 5) { // remise a zéro du compteur et éxtinction de l'alarme à partir de
+                    tpsdepa=0; // 5 mesures consécutives en dessous de 5%
+                    compteur =0;
+                    alarme =0;
+                }
+            }
+            if (valhum >= 5.0) {// Si la valeur est supérieur ou égale à 5% Hr
+                compteur =0; // Reset du compteur
+                affichagesup (valhum,tpsdepa); // On affiche sur le LCD le message lié au taux supérieur à 5% Hr
+                tpsdepa = tpsdepa+delaimesure; // Incrémentation du temps de dépassement
+                if (tpsdepa > 300) { // Si le temps de dépassement est supérieur au temps critique,
+                    alarme=1; // on déclenche l'alarme
+                }
+                if (compteursave>=tpssave) {
+                    compteursave=0;
+                    ecritureSD(valhum);
+                }
+                compteursave = compteursave + delaimesure;
+                wait(delaimesure);
+
+            }
+        }
+    }
+}
+
+
+