mbed-os github
Dependencies: ADS1015 Faulhaber HTU21D_mod MS5837_potless Sensor_Head_RevB_3 USBDevice_dfu Utilsdfu beep
Fork of ARNSRS_testDFU by
Diff: main.cpp
- Revision:
- 7:ad15c386e960
- Parent:
- 6:ebed9093d661
- Child:
- 8:a750d531b381
diff -r ebed9093d661 -r ad15c386e960 main.cpp --- a/main.cpp Sun Jul 23 18:46:22 2017 +0000 +++ b/main.cpp Wed Aug 02 06:01:03 2017 +0000 @@ -1,17 +1,12 @@ #include "mbed.h" #include <string> +#include "Sensor_head_revB.h" -Serial serialCozir (PC_12,PD_2,9600); - +//Moniteur série Serial serialMonit (USBTX,USBRX,9600); -//pour Cozir -const int size = 8; -char reponse[size]; -string commande; -int reponseInt; -int indexCozir; -bool newMessageFlag = false; +//Init de la lib ARNSRS; +SENSOR_HEAD_REV_B sensors; //pour Param Cozir const int sizeParam = 6; @@ -19,27 +14,50 @@ int indexParam; bool newParamFlag = false; -void cozirSend(char* commande) +//Variables de stockage des infos capteurs +int co2 = 0; +float pression = 0; +float Temp = 0; +int ppO2 = 0; +int CellO2_1 = 0; +int CellO2_2 = 0; + +//Mesure du tempsd'éxecution du loop +Timer REAL_RATE; +float RATE = 0; + +//Thread d'intérogation des capteurs +Thread thread; + +void Sensors_thread() { - if (serialCozir.writeable()) { - serialCozir.puts(commande); + while (true) { + + //CO2 sur Cozir + co2 = sensors.requestCO2(); + //P / T sur MS5837 + pression = sensors.requestPress(); + Temp = sensors.requestTemp(); + //PPO2 sur ADS1015 + ppO2 = sensors.requestPpO2(); + //Cell O2 en mV + CellO2_1 = sensors.requestCellO2_1(); + CellO2_2 = sensors.requestCellO2_2(); } } -void callbackCozir() +void Affichage_moniteur() { - while(serialCozir.readable()) { - if ((indexCozir == size) || newMessageFlag) //éviter la saturation du buffer - serialCozir.getc(); - else - reponse [indexCozir++] = serialCozir.getc();//chargement du buffer dans le message - if ((indexCozir == size) || (reponse[indexCozir-1] == '\n')) {//le message est complet ou nouvelle ligne ou autre si on veut... - reponse[indexCozir] = 0; - newMessageFlag = true; - } - } + printf(" CO2 = %d\r\n" , co2); + printf(" Pression = %f\r\n", pression); + printf(" Temperature = %f\r\n", Temp); + printf(" PPO2 = %d\r\n", ppO2); + printf(" Cell O2 n 1 = %d\r\n" , CellO2_1); + printf(" Cell O2 n 2 = %d\r\n" , CellO2_2); + printf("\r\n"); } +//Callback de l'intérruption des envois de commandes au Cozir void callbackParam() { while(serialMonit.readable()) { @@ -54,48 +72,47 @@ } } -void decode_message(char rep[]) -{ - - sscanf (rep,"%s %5d", commande, &reponseInt); - serialMonit.printf("Message complet = %s\r\n\n", rep); - serialMonit.printf("Commande = %s\r\n", commande); - serialMonit.printf("Reponse = %d\r\n\n", reponseInt); - -} - int main() { - serialCozir.attach(&callbackCozir, Serial::RxIrq); + set_time(1256729737); + + sensors.Sensors_INIT(false, false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); serialMonit.attach(&callbackParam, Serial::RxIrq); - serialMonit.printf(" Demarrage...Entrez les comandes COZIR\r\n"); - - //Voir Datasheet.. - //Ex : G - //Pas besoin d'écrire \r\n dans lemoniteur - //Passer en K 0 pour changer le A 32 ou A 16...sinon ça bloque... - //Ensuite re passer en K 1 ou K 2.... - //Le Cozir restera dans le dernier mode rentré... + serialMonit.printf(" Demarrage...\r\n\r\n Entrez les comandes COZIR si besoin :\r\n"); - while (1) { + thread.start(Sensors_thread); + + thread.set_priority(osPriorityRealtime); + + while (true) { - if (newMessageFlag) { - decode_message(reponse); - strcpy(reponse," "); - indexCozir = 0; - newMessageFlag = false; - } + //Démarrage du Timer mesurant le temps d'éxecution du code + REAL_RATE.start(); + + Affichage_moniteur(); if (newParamFlag) { wait_ms(500); serialMonit.printf("Param = %s\r\n", param); - cozirSend(param); + sensors.cozirSend(param); wait_ms(500); strcpy(param," "); indexParam = 0; newParamFlag = false; } + + wait(1); + + //Arrêt du Timer mesurant le temps d'éxecution du code + REAL_RATE.stop(); + //Définition de la nouvelle valeur du temps d'échantillonage du PID. + RATE = REAL_RATE.read(); + //Reset du Timer + REAL_RATE.reset(); + printf("\r\n Temps d'exécution de la boucle = %f\r\n", RATE); + printf("\r\n", ""); + } }