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
main.cpp@11:278bdb497ba3, 2017-05-04 (annotated)
- Committer:
- POTLESS_2
- Date:
- Thu May 04 06:18:08 2017 +0000
- Revision:
- 11:278bdb497ba3
- Parent:
- 9:d945fa4be3a5
- Child:
- 12:9ac5be447764
Maintenant ca marche...
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
potless | 1:bef7856b5c0a | 1 | /* procédure lecture capteur COZIR ou MINIR - CO2 seul |
potless | 1:bef7856b5c0a | 2 | sur broches F401RE SERIAL PA_11 et PA_12 |
potless | 1:bef7856b5c0a | 3 | renvoie sur moniteur (IDE arduino par exemple) de la valeur lue |
potless | 2:4a8bf1d53439 | 4 | |
potless | 2:4a8bf1d53439 | 5 | procédures possibles sont : |
potless | 2:4a8bf1d53439 | 6 | request (char commande) - renvoie la valeur lue si la commande ne représente qu'un seul caractère (entre '') |
potless | 2:4a8bf1d53439 | 7 | cozirSend (string commande) - permet d'envoyer des commandes multicaractères (entre "") - exemple A 32 - donne la réponse obtenue |
potless | 2:4a8bf1d53439 | 8 | |
potless | 2:4a8bf1d53439 | 9 | |
potless | 2:4a8bf1d53439 | 10 | la fonction cozirSend est davantage "sécurisée" |
POTLESS_2 | 4:d84250f67dec | 11 | */ |
potless | 0:69d4b21d58e0 | 12 | |
potless | 0:69d4b21d58e0 | 13 | |
potless | 1:bef7856b5c0a | 14 | #include "mbed.h" |
POTLESS_2 | 5:e1d0dc7940a6 | 15 | #include "SDFileSystem.h" |
POTLESS_2 | 5:e1d0dc7940a6 | 16 | #include "ARNSRS_SENSORS.h" |
POTLESS_2 | 5:e1d0dc7940a6 | 17 | |
POTLESS_2 | 5:e1d0dc7940a6 | 18 | //Init de la lib ARNSRS; |
POTLESS_2 | 5:e1d0dc7940a6 | 19 | ARNSRS arnsrs; |
POTLESS_2 | 5:e1d0dc7940a6 | 20 | |
POTLESS_2 | 5:e1d0dc7940a6 | 21 | //Bouton et led de la carte |
POTLESS_2 | 5:e1d0dc7940a6 | 22 | DigitalIn mybutton(USER_BUTTON); |
POTLESS_2 | 5:e1d0dc7940a6 | 23 | DigitalOut myled(LED1); |
POTLESS_2 | 4:d84250f67dec | 24 | |
POTLESS_2 | 5:e1d0dc7940a6 | 25 | //Quelque FLAG... |
POTLESS_2 | 5:e1d0dc7940a6 | 26 | bool FLAG_SIMPLE_TIME = false; |
potless | 1:bef7856b5c0a | 27 | |
POTLESS_2 | 9:d945fa4be3a5 | 28 | //COM Série vers l'ordi, Serial 2 par défaut |
POTLESS_2 | 9:d945fa4be3a5 | 29 | Serial serialMonit (USBTX,USBRX); |
potless | 2:4a8bf1d53439 | 30 | |
POTLESS_2 | 5:e1d0dc7940a6 | 31 | //Variable des capteurs |
POTLESS_2 | 5:e1d0dc7940a6 | 32 | int co2, ppO2; |
POTLESS_2 | 5:e1d0dc7940a6 | 33 | float pression, Temp1, Temp2, Humi; |
POTLESS_2 | 5:e1d0dc7940a6 | 34 | string DateHeure; |
potless | 2:4a8bf1d53439 | 35 | |
POTLESS_2 | 6:1c2212891714 | 36 | //SD card |
POTLESS_2 | 6:1c2212891714 | 37 | SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS |
POTLESS_2 | 6:1c2212891714 | 38 | FILE *fp; |
POTLESS_2 | 7:c5a5d8f678ff | 39 | char fileName[32]; |
POTLESS_2 | 7:c5a5d8f678ff | 40 | int points = 1; |
POTLESS_2 | 4:d84250f67dec | 41 | |
POTLESS_2 | 7:c5a5d8f678ff | 42 | //Fonction qui change le nom du fichier ouvert pour le LOG |
POTLESS_2 | 7:c5a5d8f678ff | 43 | FILE *nextLogFile(void) |
POTLESS_2 | 7:c5a5d8f678ff | 44 | { |
POTLESS_2 | 7:c5a5d8f678ff | 45 | static unsigned int fileNumber = 0; |
POTLESS_2 | 7:c5a5d8f678ff | 46 | FILE *filePtr = NULL; |
POTLESS_2 | 7:c5a5d8f678ff | 47 | do { |
POTLESS_2 | 7:c5a5d8f678ff | 48 | if (filePtr != NULL) |
POTLESS_2 | 7:c5a5d8f678ff | 49 | fclose(filePtr); |
POTLESS_2 | 7:c5a5d8f678ff | 50 | sprintf(fileName,"/sd/LOG_Capteurs_%04u.txt",fileNumber++); |
POTLESS_2 | 7:c5a5d8f678ff | 51 | filePtr = fopen(fileName,"r"); |
POTLESS_2 | 7:c5a5d8f678ff | 52 | } while (filePtr != NULL); |
POTLESS_2 | 7:c5a5d8f678ff | 53 | return fopen( fileName,"w"); |
POTLESS_2 | 7:c5a5d8f678ff | 54 | } |
POTLESS_2 | 7:c5a5d8f678ff | 55 | void SetTime() { |
POTLESS_2 | 7:c5a5d8f678ff | 56 | //Reglage date / heure depuis le terminal |
POTLESS_2 | 7:c5a5d8f678ff | 57 | struct tm t; |
POTLESS_2 | 7:c5a5d8f678ff | 58 | printf("Entrer la date et l'heure :\n"); |
POTLESS_2 | 7:c5a5d8f678ff | 59 | printf("YYYY MM DD HH MM SS [enter]\n"); |
POTLESS_2 | 7:c5a5d8f678ff | 60 | scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday |
POTLESS_2 | 7:c5a5d8f678ff | 61 | , &t.tm_hour, &t.tm_min, &t.tm_sec); |
POTLESS_2 | 7:c5a5d8f678ff | 62 | t.tm_year = t.tm_year - 1900; |
POTLESS_2 | 7:c5a5d8f678ff | 63 | t.tm_mon = t.tm_mon - 1; |
POTLESS_2 | 7:c5a5d8f678ff | 64 | |
POTLESS_2 | 7:c5a5d8f678ff | 65 | // set the time |
POTLESS_2 | 7:c5a5d8f678ff | 66 | set_time(mktime(&t)); |
POTLESS_2 | 7:c5a5d8f678ff | 67 | } |
potless | 2:4a8bf1d53439 | 68 | /////////////////////////////////// |
potless | 2:4a8bf1d53439 | 69 | // fonction initialisation ///// |
potless | 2:4a8bf1d53439 | 70 | /////////////////////////////////// |
POTLESS_2 | 4:d84250f67dec | 71 | void setup() |
POTLESS_2 | 4:d84250f67dec | 72 | { |
POTLESS_2 | 7:c5a5d8f678ff | 73 | //Réglage de l'heure |
POTLESS_2 | 11:278bdb497ba3 | 74 | SetTime(); |
POTLESS_2 | 7:c5a5d8f678ff | 75 | |
POTLESS_2 | 7:c5a5d8f678ff | 76 | wait(2); |
POTLESS_2 | 7:c5a5d8f678ff | 77 | |
POTLESS_2 | 7:c5a5d8f678ff | 78 | //Initialisation DATA LOG |
POTLESS_2 | 7:c5a5d8f678ff | 79 | serialMonit.printf("Initialisation SD card\r\n"); |
POTLESS_2 | 7:c5a5d8f678ff | 80 | fp = nextLogFile(); |
POTLESS_2 | 7:c5a5d8f678ff | 81 | |
POTLESS_2 | 7:c5a5d8f678ff | 82 | if (!fp) { |
POTLESS_2 | 7:c5a5d8f678ff | 83 | serialMonit.printf("Probleme SD card...Fin du programme...\r\n"); |
POTLESS_2 | 7:c5a5d8f678ff | 84 | exit(0); |
POTLESS_2 | 7:c5a5d8f678ff | 85 | }else{ |
POTLESS_2 | 7:c5a5d8f678ff | 86 | serialMonit.printf("Nouveau fichier LOG cree = %s\r\n", fileName); |
POTLESS_2 | 7:c5a5d8f678ff | 87 | serialMonit.printf("\r\n", ""); |
POTLESS_2 | 7:c5a5d8f678ff | 88 | } |
POTLESS_2 | 7:c5a5d8f678ff | 89 | |
POTLESS_2 | 7:c5a5d8f678ff | 90 | //Initialisation capteurs |
POTLESS_2 | 8:e864edfe656e | 91 | arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR); |
potless | 0:69d4b21d58e0 | 92 | } |
potless | 0:69d4b21d58e0 | 93 | |
potless | 1:bef7856b5c0a | 94 | ///////////////////////////////////// |
potless | 1:bef7856b5c0a | 95 | /// procédure principale ///////// |
potless | 1:bef7856b5c0a | 96 | ///////////////////////////////////// |
potless | 0:69d4b21d58e0 | 97 | |
POTLESS_2 | 4:d84250f67dec | 98 | int main() |
POTLESS_2 | 4:d84250f67dec | 99 | { |
POTLESS_2 | 7:c5a5d8f678ff | 100 | setup(); |
potless | 2:4a8bf1d53439 | 101 | |
POTLESS_2 | 4:d84250f67dec | 102 | while (1) { |
POTLESS_2 | 5:e1d0dc7940a6 | 103 | |
POTLESS_2 | 6:1c2212891714 | 104 | wait(2); |
POTLESS_2 | 6:1c2212891714 | 105 | |
POTLESS_2 | 5:e1d0dc7940a6 | 106 | //RTC |
POTLESS_2 | 7:c5a5d8f678ff | 107 | time_t seconds = time(NULL); |
POTLESS_2 | 5:e1d0dc7940a6 | 108 | |
POTLESS_2 | 5:e1d0dc7940a6 | 109 | if (!FLAG_SIMPLE_TIME){ |
POTLESS_2 | 7:c5a5d8f678ff | 110 | printf(" Date / Heure = %s\r\n", ctime(&seconds)); |
POTLESS_2 | 5:e1d0dc7940a6 | 111 | }else{ |
POTLESS_2 | 5:e1d0dc7940a6 | 112 | char buffer[32]; |
POTLESS_2 | 5:e1d0dc7940a6 | 113 | strftime(buffer, 32, "%I:%M %p\n", localtime(&seconds)); |
POTLESS_2 | 5:e1d0dc7940a6 | 114 | printf(" Heure = %s", buffer); |
POTLESS_2 | 5:e1d0dc7940a6 | 115 | } |
POTLESS_2 | 5:e1d0dc7940a6 | 116 | |
POTLESS_2 | 4:d84250f67dec | 117 | //CO2 / H / T sur Cozir |
POTLESS_2 | 6:1c2212891714 | 118 | co2 = arnsrs.requestCO2(); |
POTLESS_2 | 6:1c2212891714 | 119 | Humi = arnsrs.requestHUMI(); |
POTLESS_2 | 6:1c2212891714 | 120 | Temp1 = arnsrs.requestTEMP(); |
POTLESS_2 | 5:e1d0dc7940a6 | 121 | |
POTLESS_2 | 6:1c2212891714 | 122 | //P / T sur MS5803_14BA |
POTLESS_2 | 5:e1d0dc7940a6 | 123 | pression = arnsrs.requestPress(); |
POTLESS_2 | 5:e1d0dc7940a6 | 124 | Temp2 = arnsrs.requestTemp(); |
POTLESS_2 | 5:e1d0dc7940a6 | 125 | |
POTLESS_2 | 5:e1d0dc7940a6 | 126 | //PPO2 sur ADS1015 |
POTLESS_2 | 8:e864edfe656e | 127 | ppO2 = arnsrs.requestPpO2(false); |
POTLESS_2 | 5:e1d0dc7940a6 | 128 | |
POTLESS_2 | 5:e1d0dc7940a6 | 129 | //Affichage sur moniteur série |
POTLESS_2 | 7:c5a5d8f678ff | 130 | serialMonit.printf(" CO2 = %d\r\n" , co2); |
POTLESS_2 | 6:1c2212891714 | 131 | serialMonit.printf(" Humidité = %f\r\n" , Humi); |
POTLESS_2 | 7:c5a5d8f678ff | 132 | serialMonit.printf(" Température = %f\r\n" ,Temp1); |
POTLESS_2 | 4:d84250f67dec | 133 | //P / T sur MS5803 |
POTLESS_2 | 6:1c2212891714 | 134 | serialMonit.printf(" Pression = %f\r\n", pression); |
POTLESS_2 | 7:c5a5d8f678ff | 135 | serialMonit.printf(" Température = %f\r\n", Temp2); |
POTLESS_2 | 4:d84250f67dec | 136 | //PPO2 sur ADS1015 |
POTLESS_2 | 6:1c2212891714 | 137 | serialMonit.printf(" PPO2 = %d\r\n", ppO2); |
POTLESS_2 | 5:e1d0dc7940a6 | 138 | serialMonit.printf("\r\n", ""); |
POTLESS_2 | 5:e1d0dc7940a6 | 139 | |
POTLESS_2 | 7:c5a5d8f678ff | 140 | //Data LOG |
POTLESS_2 | 7:c5a5d8f678ff | 141 | if (fp) { |
POTLESS_2 | 7:c5a5d8f678ff | 142 | fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi); |
POTLESS_2 | 7:c5a5d8f678ff | 143 | serialMonit.printf(" Enregistrement d'un point sur la carte SD\r\n"); |
POTLESS_2 | 7:c5a5d8f678ff | 144 | serialMonit.printf(" Nombre de points = %d\r\n", points); |
POTLESS_2 | 7:c5a5d8f678ff | 145 | serialMonit.printf("\r\n", ""); |
POTLESS_2 | 7:c5a5d8f678ff | 146 | myled = !myled; |
POTLESS_2 | 7:c5a5d8f678ff | 147 | points++; |
POTLESS_2 | 7:c5a5d8f678ff | 148 | }else{ |
POTLESS_2 | 7:c5a5d8f678ff | 149 | serialMonit.printf(" Probleme carte SD\r\n"); |
POTLESS_2 | 7:c5a5d8f678ff | 150 | } |
POTLESS_2 | 7:c5a5d8f678ff | 151 | |
POTLESS_2 | 5:e1d0dc7940a6 | 152 | if (mybutton == 0) { // Button is pressed |
POTLESS_2 | 5:e1d0dc7940a6 | 153 | FLAG_SIMPLE_TIME = !FLAG_SIMPLE_TIME; |
POTLESS_2 | 5:e1d0dc7940a6 | 154 | wait(0.2); // 200 ms |
POTLESS_2 | 5:e1d0dc7940a6 | 155 | } |
POTLESS_2 | 4:d84250f67dec | 156 | } |
POTLESS_2 | 4:d84250f67dec | 157 | } |