Projet tutore IUT ORSAY 1219

Dependencies:   mbed SDFileSystem

main.cpp

Committer:
Gigi913
Date:
2019-12-11
Revision:
7:6355a3c4da53
Parent:
2:b60cb847489c

File content as of revision 7:6355a3c4da53:

#include "mbed.h"
#include "SDFileSystem.h"
#include "FATFileSystem.h"

Serial pc(USBTX, USBRX,9600);
Serial pms(PA_9, PA_10,9600); // le capteur est en fait un port série, on configure le port
SDFileSystem sd (PA_12, PA_11, PA_1, PB_0,"sd"); // creation du port de la carte sd
DigitalOut led (LED1); // led pouvant être pilotée en cas de besoin pour vérifier le bon déroulement du code


int b1 = 0; // variables dans lesquelles vontt être stockées les données
int b2 = 0;
int b3 = 0;
int b4 = 0;
int b5 = 0;
int b6 = 0;
int b7 = 0;
int b8 = 0;
int b9 = 0;
int b10 = 0;
int b11 = 0;
int b12 = 0;

unsigned long b13; // variables utilisées dans la conversion du texte
char b14[1000]= {0};

FILE *fp = NULL; // pointeur permettant d'ouvrir, de créer et d'écrire dans des fichiers

int g = 0; // variables qui sont utilisées pour l'incrémentation de certaines boucles
int a = 0;
int gg = 0;
int buff[32] = {0};
char buffer[32];
int b = 0;
char check[4] = {0};
char h;
int ggg = 0;

int main()
{

    b13 = 0;
    set_time(1559752200);// réglage de l'horloge interne, il s'agit du temps écoulé en secondes depuis le 1er Janvier 1970 à 00:00:00
    sprintf(b14,"/sd/test_%d.csv",b13); // on écrit le texte qui va nous permettre de changer le nom du fichier et on le stocke dans le buffer b14

    fp = fopen(b14,"r"); // on lit le fichier qui s'appelle test0, si et on stocke la 1ère lettre lue dans la variable ggg, si le fichier n'existe pas alors il sera créer
    ggg = fgetc(fp); // si le fichier est vide alors ggg = 0
    fclose(fp); // on ferme le fichier

    while (ggg == 104) { // si il y a des données dans le fichier alors le 1er caractère est un h, ce qui équivaut à 104

        b13++; // on incrémente la valeur de b13 pour changer le numéro du fichier
        sprintf(b14,"/sd/test_%d.csv",b13);
        fp = fopen(b14,"r");
        ggg = fgetc(fp);
        fclose(fp);
    }

    if(ggg != 104) { // si on le lit pas le h alors on écrit dans ce fichier et on enregistre nos données
        sprintf(b14,"/sd/test_%d.csv",b13);
        fp = fopen(b14,"w");
        fprintf(fp,"heure;PM1.0(microg/m3);PM2.5(microg/m3);PM10(microg/m3);PM1.0 EA(microg/m3);PM2.5 EA(microg/m3);PM10 EA(microg/m3);nb part >0.3microm;nb part >0.5microm;nb part >1.0microm;nb part >2.5microm;nb part >5.0microm;nb part >10microm");
        fclose(fp);
    } else {}

    while(1) {

        time_t seconds = time(NULL);
        strftime(buffer, 32, "%I:%M:%S %p", localtime(&seconds));
        gg = 0;
        led = 0;
        Serial pc(USBTX, USBRX,9600);
        Serial pms(PA_9, PA_10,9600);

        while(gg <= 31) { // on range les octets dans les variables du tableau
            if (pms.readable() == 1) {
                buff[gg] = pms.getc(); // on lit des trames de données de 32 octets
                gg++;
                b1 = buff[4]<<8|buff[5]; // seuls les octets allant de 4 à 27 possèdes les données dont nous avons besoin
                b2 = buff[6]<<8|buff[7];
                b3 = buff[8]<<8|buff[9];
                b4 = buff[10]<<8|buff[11];
                b5 = buff[12]<<8|buff[13];
                b6 = buff[14]<<8|buff[15];
                b7 = buff[16]<<8|buff[17];
                b8 = buff[18]<<8|buff[19];
                b9 = buff[20]<<8|buff[21];
                b10 = buff[22]<<8|buff[23];
                b11 = buff[24]<<8|buff[25];
                b12 = buff[26]<<8|buff[27];
            } else {}
        }

        if (buff[0] == 0x42 and buff[1] == 0x4D and buff[2] == 0x00 and buff[3] == 0x1C) { // les 1er octets nous permettent de vérifier la conformité des données car il nous donne des informations sur la longueur de la trame en plus de des caratères de début de trame

            pc.printf("\n\rTime as a custom formatted string = %s", buffer);
            fp = fopen(b14, "a"); // après vérification on écrit les données dans le fichier.csv et on utilise les points virgules en tant que séparateurs
            fprintf(fp,"\r%s;%i;%i;%i;%i;%i;%i;%i;%i;%i;%i;%i;%i",buffer,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10,b11,b12);
            fclose(fp);
            pc.printf("\n\r,success !");
            led = 1; // on allume quand l'enregistrement a été effectué avec succès
        } else {}
    }
}