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.
Dependencies: DS3231 TextLCD ds3231 mbed
Diff: main.cpp
- 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); + + } + } + } +} + + +