Software of my humidity rate controller internship project
Dependencies: DS1307 TextLCD mbed
Fork of HRController by
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
Generated on Thu Jul 14 2022 17:06:17 by 1.7.2