Théo Rostaing / Mbed 2 deprecated HRController

Dependencies:   DS1307 TextLCD mbed

Fork of HRController by Théo Rostaing

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "TextLCD.h"
00003 #include "ds1307.h"
00004 
00005 Serial pc(USBTX, USBRX); // tx, rx
00006 TextLCD lcd(PA_10,PB_3,PB_5,PB_4,PB_10,PA_8); // rs, e, d4-d7
00007 DS1307 my1307(D14,D15);
00008 AnalogIn capteur(PA_5);
00009 DigitalIn bouton(USER_BUTTON);
00010 DigitalOut myled(LED1);
00011 DigitalOut alarme(PB_8);
00012 DigitalOut ledverte(PB_9);
00013 
00014 
00015 FILE *fp;
00016 char a='%';
00017 void affichageinf (double valhum);
00018 void affichagesup (double valhum, double tpsdepa);
00019 void affichageini (void);
00020 double valhum;
00021 double valeurcritique = 5.0; // Valeur du taux d'humidité critique en pourcent d'humidité.
00022 int delaimesure = 2; //le delais en seconde entre deux mesures.
00023 int tpscritique = 10*60; // le temps critique de dépassement du taux d'humidité en seconde
00024 int tpssave = 600; //le delais en seconde entre deux sauvegardes de données dans la carte SD.
00025 
00026 
00027 void ecritureSD(double valhum)
00028 {
00029     fp =fopen ("/sd/sauvegardes.txt","a");
00030     if (fp == NULL) { // Si on n'arrive pas a ouvrir le fichier dans la carte SD
00031         lcd.cls();
00032         lcd.printf("Erreur carte SD"); // On affiche sur l'ecran LCD qu'il y a une erreur
00033     } else {    
00034         int sec,min, hour, day, date, month, year;
00035         my1307.gettime( &sec, &min, &hour, &day, &date, &month, &year);
00036         fprintf(fp,"%d %d-%d-%d %d:%d %.2f\n\r", date, day, month, year, hour, min, valhum); // Date = lundi (1) , mardi (2) , mercredi (3),...
00037         fclose(fp);
00038     }
00039 }
00040 
00041 void affichageini (void)
00042 {
00043     //On affiche sur le LCD le message lié au taux supérieur à 5%Hr
00044     lcd.cls(); //On récupère le nombre des dizaines
00045     lcd.printf("INITIALISATION"); //On récupère le nombre des unités
00046     lcd.locate(0,1);
00047     lcd.printf("DU SYSTEME .");
00048     wait(1);
00049     lcd.locate(0,0);
00050     lcd.printf("INITIALISATION");
00051     lcd.locate(0,1);
00052     lcd.printf("DU SYSTEME ..");
00053     wait(1);
00054     lcd.locate(0,0);
00055     lcd.printf("INITIALISATION");
00056     lcd.locate(0,1);
00057     lcd.printf("DU SYSTEME ...");
00058     wait(1);
00059 }
00060 
00061 void affichagesup (double valhum, int tpsdepa)
00062 {
00063     //On affiche sur le LCD le message lié aux taux ingérieur à 5%Hr
00064     int min = tpsdepa/60;
00065     int rs = tpsdepa%60;
00066     lcd.cls();
00067     lcd.locate(0,0);
00068     lcd.printf("HUM = %.2f",valhum);
00069     lcd.locate(12,0);
00070     lcd.printf("%cHR",a);
00071     lcd.locate(0,1);
00072     lcd.printf("TPS+5%c %dmin %ds",a,min,rs);
00073 }
00074 
00075 void affichageinf (double valhum)
00076 {
00077     //On affiche sur LCD le message d'initialisation
00078     lcd.cls(); //utile pour signlé qu'un reset manuel (boutton) a été effectué
00079     lcd.locate(0,0);
00080     lcd.printf("HUMIDITE MESUREE");
00081     lcd.locate(0,1);
00082     lcd.printf("EST DE");
00083     lcd.locate(8,1);
00084     lcd.printf("%.2f",valhum);
00085     lcd.locate(12,1);
00086     lcd.printf("%cHR",a);
00087 
00088 }
00089 
00090 int main()
00091 {
00092     int tpsdepa = 0;
00093     int compteur=0;
00094     alarme =0;
00095     ledverte=0;
00096 
00097     int compteursave=0;
00098     while(1) {
00099         ledverte=1;  // On allume la led verte pour signaler que le système fonctionne
00100         affichageini(); // On affiche sur l'ecran LCD le message d'initialisation
00101 
00102         while(1) { // Boucle infinie
00103             double valcapteur = capteur.read()*3.3f; // Récupération de la tension d'entrée du capteur,
00104 // qui est multipliée par la tension d'alimentation. Car la tension relevée est un pourcentage de
00105 // la tension d'alimentation (vout est comprise entre 0 et 1).
00106             double valhum = (valcapteur-3.3*0.1515)/(0.00636*3.3); // Conversion de la tension en taux d'humidité
00107             if (valhum < valeurcritique) { // Si le taux d'humidité est inférieur à 5% Hr
00108                 affichageinf (valhum); // On affiche sur le LCD le message lié au taux est inférieur à 5% Hr
00109                 compteur = compteur +1; // Incrémentation du compteur
00110                 if (compteur == 5) { // remise a zéro du compteur et éxtinction de l'alarme à partir de
00111                     tpsdepa=0; // 5 mesures consécutives en dessous de 5%
00112                     compteur =0;
00113                     alarme =0;
00114                 }
00115             }
00116             if (valhum >= valeurcritique) {// Si la valeur est supérieur ou égale à 5% Hr
00117                 compteur =0; // Reset du compteur
00118                 affichagesup (valhum,tpsdepa); // On affiche sur le LCD le message lié au taux supérieur à 5% Hr
00119                 tpsdepa = tpsdepa+delaimesure; // Incrémentation du temps de dépassement
00120                 if (tpsdepa > 300) { // Si le temps de dépassement est supérieur au temps critique,
00121                     alarme=1; // on déclenche l'alarme
00122                 }
00123                 if (compteursave>=tpssave) {
00124                     compteursave=0;
00125                     ecritureSD(valhum);
00126                 }
00127             }
00128             compteursave = compteursave + delaimesure;
00129             wait(delaimesure);
00130         }
00131     }
00132 }
00133 
00134 
00135