une 30aine passés sans pb entre les trames

Dependencies:   ADS1015 ARNSRS_SENSORS DmTftLibrary MS5803_14BA SDFileSystem mbed

Fork of ARNSRS_SERVOS_USB_TFT by POTLESS

main.cpp

Committer:
POTLESS_2
Date:
2017-05-04
Revision:
9:d945fa4be3a5
Parent:
8:e864edfe656e
Child:
11:278bdb497ba3

File content as of revision 9:d945fa4be3a5:

/* procédure lecture capteur COZIR ou MINIR - CO2 seul
sur broches F401RE SERIAL PA_11 et PA_12
renvoie sur moniteur (IDE arduino par exemple) de la valeur lue

procédures possibles sont :
request (char commande) - renvoie la valeur lue si la commande ne représente qu'un seul caractère (entre '')
cozirSend (string commande) - permet d'envoyer des commandes multicaractères (entre "") - exemple A 32 - donne la réponse obtenue


la fonction cozirSend est davantage "sécurisée"
*/


#include "mbed.h"
#include "SDFileSystem.h"
#include "ARNSRS_SENSORS.h"

//Init de la lib ARNSRS;
ARNSRS arnsrs;

//Bouton et led de la carte
DigitalIn mybutton(USER_BUTTON);
DigitalOut myled(LED1);

//Quelque FLAG...
bool FLAG_SIMPLE_TIME = false;

//COM Série vers l'ordi, Serial 2 par défaut
Serial serialMonit (USBTX,USBRX); 

//Variable des capteurs
int co2, ppO2;
float pression, Temp1, Temp2, Humi;
string DateHeure;

//SD card
SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS
FILE *fp;
char fileName[32];
int points = 1;

//Fonction qui change le nom du fichier ouvert pour le LOG
FILE *nextLogFile(void)
{
    static unsigned int fileNumber = 0;
    FILE *filePtr = NULL;
    do {
        if (filePtr != NULL)
            fclose(filePtr);
        sprintf(fileName,"/sd/LOG_Capteurs_%04u.txt",fileNumber++);
        filePtr = fopen(fileName,"r");
    } while (filePtr != NULL);
    return fopen( fileName,"w");
}
void SetTime() {
  //Reglage date / heure depuis le terminal
    struct tm t;
    printf("Entrer la date et l'heure :\n");
    printf("YYYY MM DD HH MM SS [enter]\n");    
    scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
                             , &t.tm_hour, &t.tm_min, &t.tm_sec);
    t.tm_year = t.tm_year - 1900;
    t.tm_mon = t.tm_mon - 1;
    
    // set the time
    set_time(mktime(&t));   
}    
///////////////////////////////////
// fonction initialisation    /////
///////////////////////////////////
void setup()
{
    //Réglage de l'heure
    //SetTime();
    
    wait(2);
    
    //Initialisation DATA LOG
    serialMonit.printf("Initialisation SD card\r\n");
    fp = nextLogFile();
    
    if (!fp) {       
    serialMonit.printf("Probleme SD card...Fin du programme...\r\n");
    exit(0); 
    }else{
    serialMonit.printf("Nouveau fichier LOG cree  =  %s\r\n", fileName);
    serialMonit.printf("\r\n", "");    
    }
    
    //Initialisation capteurs
    arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
}

/////////////////////////////////////
/// procédure principale    /////////
/////////////////////////////////////

int main()
{
    setup();

    while (1) {

        wait(2);
        
        //RTC
        time_t seconds = time(NULL);
        
        if (!FLAG_SIMPLE_TIME){
        printf("  Date / Heure = %s\r\n", ctime(&seconds));
        }else{
        char buffer[32];
        strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds));
        printf("  Heure = %s", buffer);
        }
        
        //CO2 / H / T sur Cozir
        co2 = arnsrs.requestCO2();
        Humi = arnsrs.requestHUMI();
        Temp1 = arnsrs.requestTEMP(); 
        
        //P / T sur MS5803_14BA
        pression = arnsrs.requestPress();
        Temp2 =  arnsrs.requestTemp();

        //PPO2 sur ADS1015
        ppO2 = arnsrs.requestPpO2(false);

        //Affichage sur moniteur série
        serialMonit.printf("  CO2           = %d\r\n"  , co2);   
        serialMonit.printf("  Humidité      = %f\r\n"  , Humi); 
        serialMonit.printf("  Température   = %f\r\n"  ,Temp1);
        //P / T sur MS5803
        serialMonit.printf("  Pression      = %f\r\n", pression);
        serialMonit.printf("  Température   = %f\r\n", Temp2);
        //PPO2 sur ADS1015
        serialMonit.printf("  PPO2          = %d\r\n", ppO2);
        serialMonit.printf("\r\n", "");

        //Data LOG
        if (fp) {
        fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi);       
        serialMonit.printf("  Enregistrement d'un point sur la carte SD\r\n");
        serialMonit.printf("  Nombre de points                      = %d\r\n", points);
        serialMonit.printf("\r\n", "");
        myled = !myled;
        points++; 
        }else{
        serialMonit.printf("  Probleme carte SD\r\n");    
        }
               
        if (mybutton == 0) { // Button is pressed
            FLAG_SIMPLE_TIME = !FLAG_SIMPLE_TIME;
            wait(0.2); // 200 ms
        }
    }
}