Software of my humidity rate controller internship project
Dependencies: DS1307 TextLCD mbed
Fork of HRController by
main.cpp@5:438327c39586, 2018-06-29 (annotated)
- Committer:
- TheoR
- Date:
- Fri Jun 29 11:29:36 2018 +0000
- Revision:
- 5:438327c39586
- Parent:
- 3:e800a8237746
- Child:
- 6:86255be98558
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
TheoR | 0:f22ffbae6bef | 1 | #include "mbed.h" |
TheoR | 0:f22ffbae6bef | 2 | #include "TextLCD.h" |
TheoR | 3:e800a8237746 | 3 | #include "ds1307.h" |
TheoR | 0:f22ffbae6bef | 4 | |
TheoR | 0:f22ffbae6bef | 5 | Serial pc(USBTX, USBRX); // tx, rx |
TheoR | 0:f22ffbae6bef | 6 | TextLCD lcd(PA_10,PB_3,PB_5,PB_4,PB_10,PA_8); // rs, e, d4-d7 |
TheoR | 3:e800a8237746 | 7 | DS1307 my1307(D14,D15); |
TheoR | 0:f22ffbae6bef | 8 | AnalogIn capteur(PA_5); |
TheoR | 0:f22ffbae6bef | 9 | DigitalIn bouton(USER_BUTTON); |
TheoR | 0:f22ffbae6bef | 10 | DigitalOut myled(LED1); |
TheoR | 3:e800a8237746 | 11 | DigitalOut alarme(PB_8); |
TheoR | 0:f22ffbae6bef | 12 | DigitalOut ledverte(PB_9); |
TheoR | 0:f22ffbae6bef | 13 | |
TheoR | 0:f22ffbae6bef | 14 | |
TheoR | 0:f22ffbae6bef | 15 | FILE *fp; |
TheoR | 0:f22ffbae6bef | 16 | char a='%'; |
TheoR | 0:f22ffbae6bef | 17 | void affichageinf (double valhum); |
TheoR | 0:f22ffbae6bef | 18 | void affichagesup (double valhum, double tpsdepa); |
TheoR | 0:f22ffbae6bef | 19 | void affichageini (void); |
TheoR | 0:f22ffbae6bef | 20 | double valhum; |
TheoR | 0:f22ffbae6bef | 21 | int delaimesure=2; //le delais en seconde entre deux mesures. |
TheoR | 0:f22ffbae6bef | 22 | int tpscritique = 10*60; // le temps critique de dépassement du taux d'humidité en seconde |
TheoR | 0:f22ffbae6bef | 23 | int tpssave=600; //le delais en seconde entre deux sauvegardes de données dans la carte SD. |
TheoR | 0:f22ffbae6bef | 24 | |
TheoR | 0:f22ffbae6bef | 25 | |
TheoR | 0:f22ffbae6bef | 26 | void ecritureSD(double valhum) |
TheoR | 0:f22ffbae6bef | 27 | { |
TheoR | 3:e800a8237746 | 28 | fp =fopen ("/sd/sauvegardes.txt","a"); |
TheoR | 0:f22ffbae6bef | 29 | if (fp == NULL) { // Si on n'arrive pas a ouvrir le fichier dans la carte SD |
TheoR | 0:f22ffbae6bef | 30 | lcd.cls(); |
TheoR | 0:f22ffbae6bef | 31 | lcd.printf("Erreur carte SD"); // On affiche sur l'ecran LCD qu'il y a une erreur |
TheoR | 3:e800a8237746 | 32 | } else { |
TheoR | 3:e800a8237746 | 33 | int sec,min, hour, day, date, month, year; |
TheoR | 3:e800a8237746 | 34 | my1307.gettime( &sec, &min, &hour, &day, &date, &month, &year); |
TheoR | 3:e800a8237746 | 35 | 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),... |
TheoR | 0:f22ffbae6bef | 36 | fclose(fp); |
TheoR | 0:f22ffbae6bef | 37 | } |
TheoR | 0:f22ffbae6bef | 38 | } |
TheoR | 0:f22ffbae6bef | 39 | |
TheoR | 0:f22ffbae6bef | 40 | void affichageini (void) |
TheoR | 0:f22ffbae6bef | 41 | { |
TheoR | 0:f22ffbae6bef | 42 | //On affiche sur le LCD le message lié au taux supérieur à 5%Hr |
TheoR | 3:e800a8237746 | 43 | lcd.cls(); //On récupère le nombre des dizaines |
TheoR | 0:f22ffbae6bef | 44 | lcd.printf("INITIALISATION"); //On récupère le nombre des unités |
TheoR | 0:f22ffbae6bef | 45 | lcd.locate(0,1); |
TheoR | 0:f22ffbae6bef | 46 | lcd.printf("DU SYSTEME ."); |
TheoR | 0:f22ffbae6bef | 47 | wait(1); |
TheoR | 0:f22ffbae6bef | 48 | lcd.locate(0,0); |
TheoR | 0:f22ffbae6bef | 49 | lcd.printf("INITIALISATION"); |
TheoR | 0:f22ffbae6bef | 50 | lcd.locate(0,1); |
TheoR | 0:f22ffbae6bef | 51 | lcd.printf("DU SYSTEME .."); |
TheoR | 0:f22ffbae6bef | 52 | wait(1); |
TheoR | 0:f22ffbae6bef | 53 | lcd.locate(0,0); |
TheoR | 0:f22ffbae6bef | 54 | lcd.printf("INITIALISATION"); |
TheoR | 0:f22ffbae6bef | 55 | lcd.locate(0,1); |
TheoR | 0:f22ffbae6bef | 56 | lcd.printf("DU SYSTEME ..."); |
TheoR | 0:f22ffbae6bef | 57 | wait(1); |
TheoR | 0:f22ffbae6bef | 58 | } |
TheoR | 0:f22ffbae6bef | 59 | |
TheoR | 0:f22ffbae6bef | 60 | void affichagesup (double valhum, int tpsdepa) |
TheoR | 0:f22ffbae6bef | 61 | { |
TheoR | 0:f22ffbae6bef | 62 | //On affiche sur le LCD le message lié aux taux ingérieur à 5%Hr |
TheoR | 0:f22ffbae6bef | 63 | int min = tpsdepa/60; |
TheoR | 0:f22ffbae6bef | 64 | int rs = tpsdepa%60; |
TheoR | 0:f22ffbae6bef | 65 | lcd.cls(); |
TheoR | 0:f22ffbae6bef | 66 | lcd.locate(0,0); |
TheoR | 0:f22ffbae6bef | 67 | lcd.printf("HUM = %.2f",valhum); |
TheoR | 0:f22ffbae6bef | 68 | lcd.locate(12,0); |
TheoR | 0:f22ffbae6bef | 69 | lcd.printf("%cHR",a); |
TheoR | 0:f22ffbae6bef | 70 | lcd.locate(0,1); |
TheoR | 0:f22ffbae6bef | 71 | lcd.printf("TPS+5%c %dmin %ds",a,min,rs); |
TheoR | 0:f22ffbae6bef | 72 | } |
TheoR | 0:f22ffbae6bef | 73 | |
TheoR | 0:f22ffbae6bef | 74 | void affichageinf (double valhum) |
TheoR | 0:f22ffbae6bef | 75 | { |
TheoR | 0:f22ffbae6bef | 76 | //On affiche sur LCD le message d'initialisation |
TheoR | 3:e800a8237746 | 77 | lcd.cls(); //utile pour signlé qu'un reset manuel (boutton) a été effectué |
TheoR | 0:f22ffbae6bef | 78 | lcd.locate(0,0); |
TheoR | 0:f22ffbae6bef | 79 | lcd.printf("HUMIDITE MESUREE"); |
TheoR | 0:f22ffbae6bef | 80 | lcd.locate(0,1); |
TheoR | 0:f22ffbae6bef | 81 | lcd.printf("EST DE"); |
TheoR | 0:f22ffbae6bef | 82 | lcd.locate(8,1); |
TheoR | 0:f22ffbae6bef | 83 | lcd.printf("%.2f",valhum); |
TheoR | 0:f22ffbae6bef | 84 | lcd.locate(12,1); |
TheoR | 0:f22ffbae6bef | 85 | lcd.printf("%cHR",a); |
TheoR | 0:f22ffbae6bef | 86 | |
TheoR | 0:f22ffbae6bef | 87 | } |
TheoR | 0:f22ffbae6bef | 88 | |
TheoR | 0:f22ffbae6bef | 89 | int main() |
TheoR | 0:f22ffbae6bef | 90 | { |
TheoR | 0:f22ffbae6bef | 91 | int tpsdepa = 0; |
TheoR | 0:f22ffbae6bef | 92 | int compteur=0; |
TheoR | 0:f22ffbae6bef | 93 | alarme =0; |
TheoR | 0:f22ffbae6bef | 94 | ledverte=0; |
TheoR | 0:f22ffbae6bef | 95 | |
TheoR | 0:f22ffbae6bef | 96 | int compteursave=0; |
TheoR | 0:f22ffbae6bef | 97 | while(1) { |
TheoR | 0:f22ffbae6bef | 98 | ledverte=1; // On allume la led verte pour signaler que le système fonctionne |
TheoR | 0:f22ffbae6bef | 99 | affichageini(); // On affiche sur l'ecran LCD le message d'initialisation |
TheoR | 0:f22ffbae6bef | 100 | |
TheoR | 5:438327c39586 | 101 | while(1) { // Boucle infinie |
TheoR | 3:e800a8237746 | 102 | double valcapteur = capteur.read()*3.3f; // Récupération de la tension d'entrée du capteur, |
TheoR | 0:f22ffbae6bef | 103 | // qui est multipliée par la tension d'alimentation. Car la tension relevée est un pourcentage de |
TheoR | 0:f22ffbae6bef | 104 | // la tension d'alimentation (vout est comprise entre 0 et 1). |
TheoR | 0:f22ffbae6bef | 105 | double valhum = (valcapteur-3.3*0.1515)/(0.00636*3.3); // Conversion de la tension en taux d'humidité |
TheoR | 0:f22ffbae6bef | 106 | if (valhum < 5.0) { // Si le taux d'humidité est inférieur à 5% Hr |
TheoR | 0:f22ffbae6bef | 107 | affichageinf (valhum); // On affiche sur le LCD le message lié au taux est inférieur à 5% Hr |
TheoR | 0:f22ffbae6bef | 108 | compteur = compteur +1; // Incrémentation du compteur |
TheoR | 0:f22ffbae6bef | 109 | if (compteur == 5) { // remise a zéro du compteur et éxtinction de l'alarme à partir de |
TheoR | 0:f22ffbae6bef | 110 | tpsdepa=0; // 5 mesures consécutives en dessous de 5% |
TheoR | 0:f22ffbae6bef | 111 | compteur =0; |
TheoR | 0:f22ffbae6bef | 112 | alarme =0; |
TheoR | 0:f22ffbae6bef | 113 | } |
TheoR | 0:f22ffbae6bef | 114 | } |
TheoR | 0:f22ffbae6bef | 115 | if (valhum >= 5.0) {// Si la valeur est supérieur ou égale à 5% Hr |
TheoR | 0:f22ffbae6bef | 116 | compteur =0; // Reset du compteur |
TheoR | 0:f22ffbae6bef | 117 | affichagesup (valhum,tpsdepa); // On affiche sur le LCD le message lié au taux supérieur à 5% Hr |
TheoR | 0:f22ffbae6bef | 118 | tpsdepa = tpsdepa+delaimesure; // Incrémentation du temps de dépassement |
TheoR | 0:f22ffbae6bef | 119 | if (tpsdepa > 300) { // Si le temps de dépassement est supérieur au temps critique, |
TheoR | 0:f22ffbae6bef | 120 | alarme=1; // on déclenche l'alarme |
TheoR | 0:f22ffbae6bef | 121 | } |
TheoR | 0:f22ffbae6bef | 122 | if (compteursave>=tpssave) { |
TheoR | 0:f22ffbae6bef | 123 | compteursave=0; |
TheoR | 0:f22ffbae6bef | 124 | ecritureSD(valhum); |
TheoR | 0:f22ffbae6bef | 125 | } |
TheoR | 0:f22ffbae6bef | 126 | } |
TheoR | 1:b84b10191a28 | 127 | compteursave = compteursave + delaimesure; |
TheoR | 1:b84b10191a28 | 128 | wait(delaimesure); |
TheoR | 0:f22ffbae6bef | 129 | } |
TheoR | 0:f22ffbae6bef | 130 | } |
TheoR | 0:f22ffbae6bef | 131 | } |
TheoR | 0:f22ffbae6bef | 132 | |
TheoR | 0:f22ffbae6bef | 133 | |
TheoR | 0:f22ffbae6bef | 134 |