Programme du controleur d'humidité

Dependencies:   DS3231 TextLCD ds3231 mbed

Committer:
TheoR
Date:
Fri Jun 15 12:17:02 2018 +0000
Revision:
2:2aeef1e3e010
Parent:
1:fa823064f03c
m

Who changed what in which revision?

UserRevisionLine numberNew contents of line
TheoR 0:f22ffbae6bef 1 #include "mbed.h"
TheoR 0:f22ffbae6bef 2 #include "stdlib.h"
TheoR 0:f22ffbae6bef 3 #include "TextLCD.h"
TheoR 0:f22ffbae6bef 4 #include "stdio.h"
TheoR 0:f22ffbae6bef 5
TheoR 0:f22ffbae6bef 6 Serial pc(USBTX, USBRX); // tx, rx
TheoR 0:f22ffbae6bef 7 TextLCD lcd(PA_10,PB_3,PB_5,PB_4,PB_10,PA_8); // rs, e, d4-d7
TheoR 0:f22ffbae6bef 8 AnalogIn capteur(PA_5);
TheoR 0:f22ffbae6bef 9 DigitalIn bouton(USER_BUTTON);
TheoR 0:f22ffbae6bef 10 DigitalOut myled(LED1);
TheoR 0:f22ffbae6bef 11 DigitalOut alarme(D9);
TheoR 0:f22ffbae6bef 12 DigitalOut ledverte(PB_9);
TheoR 0:f22ffbae6bef 13
TheoR 0:f22ffbae6bef 14 I2C i2c(PC_1, PC_0);
TheoR 0:f22ffbae6bef 15 const int DS3231_ADDR = 0xd0;
TheoR 0:f22ffbae6bef 16
TheoR 0:f22ffbae6bef 17 FILE *fp;
TheoR 0:f22ffbae6bef 18 char a='%';
TheoR 0:f22ffbae6bef 19 void affichageinf (double valhum);
TheoR 0:f22ffbae6bef 20 void affichagesup (double valhum, double tpsdepa);
TheoR 0:f22ffbae6bef 21 void affichageini (void);
TheoR 0:f22ffbae6bef 22 double valhum;
TheoR 0:f22ffbae6bef 23 int delaimesure=2; //le delais en seconde entre deux mesures.
TheoR 0:f22ffbae6bef 24 int tpscritique = 10*60; // le temps critique de dépassement du taux d'humidité en seconde
TheoR 0:f22ffbae6bef 25 int tpssave=600; //le delais en seconde entre deux sauvegardes de données dans la carte SD.
TheoR 0:f22ffbae6bef 26
TheoR 0:f22ffbae6bef 27
TheoR 0:f22ffbae6bef 28 void ecritureSD(double valhum)
TheoR 0:f22ffbae6bef 29 {
TheoR 0:f22ffbae6bef 30 fp =fopen ("/sd/test.txt","a");
TheoR 0:f22ffbae6bef 31 if (fp == NULL) { // Si on n'arrive pas a ouvrir le fichier dans la carte SD
TheoR 0:f22ffbae6bef 32 lcd.cls();
TheoR 0:f22ffbae6bef 33 lcd.printf("Erreur carte SD"); // On affiche sur l'ecran LCD qu'il y a une erreur
TheoR 0:f22ffbae6bef 34 } else {
TheoR 0:f22ffbae6bef 35 // int ret; Car on en a pas besoin
TheoR 0:f22ffbae6bef 36 // int sec, Car on en a pas besoin
TheoR 0:f22ffbae6bef 37 int min, hour, day, date, month, year;
TheoR 0:f22ffbae6bef 38 char data_write[2];
TheoR 0:f22ffbae6bef 39 char data_read[8];
TheoR 0:f22ffbae6bef 40 data_write[0] = 0;
TheoR 0:f22ffbae6bef 41 i2c.write(DS3231_ADDR, data_write, 1, 0);
TheoR 0:f22ffbae6bef 42
TheoR 0:f22ffbae6bef 43 // ret = i2c.read(DS3231_ADDR, data_read, 7, 0);
TheoR 0:f22ffbae6bef 44 // sec = (data_read[0] >> 4) * 10 + (data_read[0] & 0x0f);
TheoR 0:f22ffbae6bef 45 min = (data_read[1] >> 4) * 10 + (data_read[1] & 0x0f);
TheoR 0:f22ffbae6bef 46 hour = (data_read[2] >> 5 & 0x01) * 20 + (data_read[2] >> 4 & 0x01) * 10 + (data_read[2] & 0x0f);
TheoR 0:f22ffbae6bef 47
TheoR 0:f22ffbae6bef 48 day = data_read[3] & 0x07;
TheoR 0:f22ffbae6bef 49
TheoR 0:f22ffbae6bef 50 date = (data_read[4] >> 4) * 10 + (data_read[4] & 0x0f);
TheoR 0:f22ffbae6bef 51 month = (data_read[5] >> 4 & 0x01) * 10 + (data_read[5] & 0x0f);
TheoR 0:f22ffbae6bef 52 year = 2000 + (data_read[6] >> 4) * 10 + (data_read[6] & 0x0f);
TheoR 0:f22ffbae6bef 53 fprintf(fp,"%d-%02d-%02d %d %02d:%02d %.2f\n\r", year, month, date, day, hour, min, valhum); // Date = lundi, mardi, mercredi,... ?
TheoR 0:f22ffbae6bef 54 fclose(fp);
TheoR 0:f22ffbae6bef 55 }
TheoR 0:f22ffbae6bef 56 }
TheoR 0:f22ffbae6bef 57
TheoR 0:f22ffbae6bef 58 void affichageini (void)
TheoR 0:f22ffbae6bef 59 {
TheoR 2:2aeef1e3e010 60 //On affiche sur LCD le message d'initialisation
TheoR 2:2aeef1e3e010 61 lcd.cls(); //utile pour signler qu'un reset manuel (bouton) a été effectué
TheoR 2:2aeef1e3e010 62 lcd.printf("INITIALISATION");
TheoR 0:f22ffbae6bef 63 lcd.locate(0,1);
TheoR 0:f22ffbae6bef 64 lcd.printf("DU SYSTEME .");
TheoR 0:f22ffbae6bef 65 wait(1);
TheoR 0:f22ffbae6bef 66 lcd.locate(0,0);
TheoR 0:f22ffbae6bef 67 lcd.printf("INITIALISATION");
TheoR 0:f22ffbae6bef 68 lcd.locate(0,1);
TheoR 0:f22ffbae6bef 69 lcd.printf("DU SYSTEME ..");
TheoR 0:f22ffbae6bef 70 wait(1);
TheoR 0:f22ffbae6bef 71 lcd.locate(0,0);
TheoR 0:f22ffbae6bef 72 lcd.printf("INITIALISATION");
TheoR 0:f22ffbae6bef 73 lcd.locate(0,1);
TheoR 0:f22ffbae6bef 74 lcd.printf("DU SYSTEME ...");
TheoR 0:f22ffbae6bef 75 wait(1);
TheoR 0:f22ffbae6bef 76 }
TheoR 0:f22ffbae6bef 77
TheoR 0:f22ffbae6bef 78 void affichagesup (double valhum, int tpsdepa)
TheoR 0:f22ffbae6bef 79 {
TheoR 2:2aeef1e3e010 80 //On affiche sur le LCD le message lié au taux supérieur à 5%Hr
TheoR 2:2aeef1e3e010 81 int min = tpsdepa/60;//On récupère le nombre des dizaines du temps
TheoR 2:2aeef1e3e010 82 int rs = tpsdepa%60; //On récupère le nombre des unités du temps
TheoR 0:f22ffbae6bef 83 lcd.cls();
TheoR 0:f22ffbae6bef 84 lcd.locate(0,0);
TheoR 0:f22ffbae6bef 85 lcd.printf("HUM = %.2f",valhum);
TheoR 0:f22ffbae6bef 86 lcd.locate(12,0);
TheoR 0:f22ffbae6bef 87 lcd.printf("%cHR",a);
TheoR 0:f22ffbae6bef 88 lcd.locate(0,1);
TheoR 0:f22ffbae6bef 89 lcd.printf("TPS+5%c %dmin %ds",a,min,rs);
TheoR 0:f22ffbae6bef 90 }
TheoR 0:f22ffbae6bef 91
TheoR 0:f22ffbae6bef 92 void affichageinf (double valhum)
TheoR 0:f22ffbae6bef 93 {
TheoR 2:2aeef1e3e010 94 //On affiche sur le LCD le message lié aux taux ingérieur à 5%Hr
TheoR 2:2aeef1e3e010 95 lcd.cls();
TheoR 0:f22ffbae6bef 96 lcd.locate(0,0);
TheoR 0:f22ffbae6bef 97 lcd.printf("HUMIDITE MESUREE");
TheoR 0:f22ffbae6bef 98 lcd.locate(0,1);
TheoR 0:f22ffbae6bef 99 lcd.printf("EST DE");
TheoR 0:f22ffbae6bef 100 lcd.locate(8,1);
TheoR 0:f22ffbae6bef 101 lcd.printf("%.2f",valhum);
TheoR 0:f22ffbae6bef 102 lcd.locate(12,1);
TheoR 0:f22ffbae6bef 103 lcd.printf("%cHR",a);
TheoR 0:f22ffbae6bef 104
TheoR 0:f22ffbae6bef 105 }
TheoR 0:f22ffbae6bef 106
TheoR 0:f22ffbae6bef 107 int main()
TheoR 0:f22ffbae6bef 108 {
TheoR 0:f22ffbae6bef 109 int tpsdepa = 0;
TheoR 0:f22ffbae6bef 110 int compteur=0;
TheoR 0:f22ffbae6bef 111 alarme =0;
TheoR 0:f22ffbae6bef 112 ledverte=0;
TheoR 0:f22ffbae6bef 113
TheoR 0:f22ffbae6bef 114 int compteursave=0;
TheoR 0:f22ffbae6bef 115 while(1) {
TheoR 0:f22ffbae6bef 116 ledverte=1; // On allume la led verte pour signaler que le système fonctionne
TheoR 0:f22ffbae6bef 117 affichageini(); // On affiche sur l'ecran LCD le message d'initialisation
TheoR 0:f22ffbae6bef 118
TheoR 0:f22ffbae6bef 119 while(1) { // Boucle infini
TheoR 0:f22ffbae6bef 120 double valcapteur = capteur.read()*3.3f; //Récupération de la tension d'entrée du capteur,
TheoR 0:f22ffbae6bef 121 // qui est multipliée par la tension d'alimentation. Car la tension relevée est un pourcentage de
TheoR 0:f22ffbae6bef 122 // la tension d'alimentation (vout est comprise entre 0 et 1).
TheoR 0:f22ffbae6bef 123 double valhum = (valcapteur-3.3*0.1515)/(0.00636*3.3); // Conversion de la tension en taux d'humidité
TheoR 0:f22ffbae6bef 124 if (valhum < 5.0) { // Si le taux d'humidité est inférieur à 5% Hr
TheoR 0:f22ffbae6bef 125 affichageinf (valhum); // On affiche sur le LCD le message lié au taux est inférieur à 5% Hr
TheoR 0:f22ffbae6bef 126 compteur = compteur +1; // Incrémentation du compteur
TheoR 0:f22ffbae6bef 127 if (compteur == 5) { // remise a zéro du compteur et éxtinction de l'alarme à partir de
TheoR 0:f22ffbae6bef 128 tpsdepa=0; // 5 mesures consécutives en dessous de 5%
TheoR 0:f22ffbae6bef 129 compteur =0;
TheoR 0:f22ffbae6bef 130 alarme =0;
TheoR 0:f22ffbae6bef 131 }
TheoR 0:f22ffbae6bef 132 }
TheoR 0:f22ffbae6bef 133 if (valhum >= 5.0) {// Si la valeur est supérieur ou égale à 5% Hr
TheoR 0:f22ffbae6bef 134 compteur =0; // Reset du compteur
TheoR 0:f22ffbae6bef 135 affichagesup (valhum,tpsdepa); // On affiche sur le LCD le message lié au taux supérieur à 5% Hr
TheoR 0:f22ffbae6bef 136 tpsdepa = tpsdepa+delaimesure; // Incrémentation du temps de dépassement
TheoR 0:f22ffbae6bef 137 if (tpsdepa > 300) { // Si le temps de dépassement est supérieur au temps critique,
TheoR 0:f22ffbae6bef 138 alarme=1; // on déclenche l'alarme
TheoR 0:f22ffbae6bef 139 }
TheoR 0:f22ffbae6bef 140 if (compteursave>=tpssave) {
TheoR 0:f22ffbae6bef 141 compteursave=0;
TheoR 0:f22ffbae6bef 142 ecritureSD(valhum);
TheoR 0:f22ffbae6bef 143 }
TheoR 0:f22ffbae6bef 144 compteursave = compteursave + delaimesure;
TheoR 0:f22ffbae6bef 145 wait(delaimesure);
TheoR 0:f22ffbae6bef 146
TheoR 0:f22ffbae6bef 147 }
TheoR 0:f22ffbae6bef 148 }
TheoR 0:f22ffbae6bef 149 }
TheoR 0:f22ffbae6bef 150 }
TheoR 0:f22ffbae6bef 151
TheoR 0:f22ffbae6bef 152
TheoR 0:f22ffbae6bef 153