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
main.cpp
- Committer:
- TheoR
- Date:
- 2018-06-15
- Revision:
- 1:fa823064f03c
- Parent:
- 0:f22ffbae6bef
- Child:
- 2:2aeef1e3e010
File content as of revision 1:fa823064f03c:
#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 signler qu'un reset manuel (bouton) 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);
}
}
}
}