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

Committer:
potless
Date:
Mon May 22 23:03:32 2017 +0000
Revision:
23:40a6039cb140
Parent:
22:8e4ace42e4f5
freeze : attendre que la ligne soit libre. avec ce code, on passe des commandes ? l'infini sans blocage (attendre affichage d'une trame et passer l'ordre avant l'arriv?e de la suivante)

Who changed what in which revision?

UserRevisionLine numberNew contents of line
POTLESS_2 19:31ac20c07bb2 1 /*
POTLESS_2 19:31ac20c07bb2 2 Stm32L476RG
potless 2:4a8bf1d53439 3
POTLESS_2 19:31ac20c07bb2 4 2 servos
POTLESS_2 19:31ac20c07bb2 5 BLE => Android
potless 2:4a8bf1d53439 6
POTLESS_2 4:d84250f67dec 7 */
potless 0:69d4b21d58e0 8
potless 1:bef7856b5c0a 9 #include "mbed.h"
POTLESS_2 5:e1d0dc7940a6 10 #include "SDFileSystem.h"
POTLESS_2 5:e1d0dc7940a6 11 #include "ARNSRS_SENSORS.h"
POTLESS_2 14:e6686a44db84 12
POTLESS_2 13:aa620707126d 13 #include <string>
POTLESS_2 13:aa620707126d 14
POTLESS_2 21:28a3f60b4bc2 15 #include "DmTftHX8353C.h"
POTLESS_2 21:28a3f60b4bc2 16 #include "DmTftS6D0164.h"
POTLESS_2 21:28a3f60b4bc2 17 #include "DmTftIli9325.h"
POTLESS_2 21:28a3f60b4bc2 18 #include "DmTftIli9341.h"
POTLESS_2 21:28a3f60b4bc2 19 #include "DmTftSsd2119.h"
POTLESS_2 21:28a3f60b4bc2 20 #include "DmTftRa8875.h"
POTLESS_2 20:bb8d2cea2076 21
POTLESS_2 21:28a3f60b4bc2 22 //Ecrit dans le moniteur série de la tablette à 9600 bds si sur 1, penser à mettre NEED_CONSOLE_OUTPUT à 0
POTLESS_2 21:28a3f60b4bc2 23 #define NEED_ANDROID_OUTPUT 0
POTLESS_2 15:c9205e490740 24 //Ecrit dans le moniteur série de l'ordi à 9600 bds si sur 1
POTLESS_2 15:c9205e490740 25 #define NEED_CONSOLE_OUTPUT 1
POTLESS_2 16:fc7d8cc6bf4b 26 //Pour utiliser le traceur du moniteur Arduino. Mettre NEED_CONSOLE_OUTPUT 0 si utilisé.
POTLESS_2 16:fc7d8cc6bf4b 27 //En premier ouvrir le moniteur série pour régler la RTC, puis fermer et ouvrir le traceur série
POTLESS_2 15:c9205e490740 28 #define NEED_GRAPH_OUTPUT 0
POTLESS_2 15:c9205e490740 29 //Datalog carte SD si sur 1
POTLESS_2 16:fc7d8cc6bf4b 30 #define NEED_SD_DATA_LOG 0
POTLESS_2 15:c9205e490740 31
POTLESS_2 21:28a3f60b4bc2 32 #if NEED_ANDROID_OUTPUT
POTLESS_2 21:28a3f60b4bc2 33 #define ANDROID(...) { serialMonit.printf(__VA_ARGS__); }
POTLESS_2 21:28a3f60b4bc2 34 #else
POTLESS_2 21:28a3f60b4bc2 35 #define ANDROID(...)
POTLESS_2 21:28a3f60b4bc2 36 #endif
POTLESS_2 21:28a3f60b4bc2 37
POTLESS_2 15:c9205e490740 38 #if NEED_CONSOLE_OUTPUT
POTLESS_2 20:bb8d2cea2076 39 #define DEBUG(...) { serialMonit.printf(__VA_ARGS__); } //tft.drawString(0,0,__VA_ARGS__);
POTLESS_2 15:c9205e490740 40 #else
POTLESS_2 15:c9205e490740 41 #define DEBUG(...)
POTLESS_2 15:c9205e490740 42 #endif
POTLESS_2 15:c9205e490740 43
POTLESS_2 15:c9205e490740 44 #if NEED_GRAPH_OUTPUT
POTLESS_2 15:c9205e490740 45 #define TRACE(...) { serialMonit.printf(__VA_ARGS__); }
POTLESS_2 15:c9205e490740 46 #else
POTLESS_2 15:c9205e490740 47 #define TRACE(...)
POTLESS_2 15:c9205e490740 48 #endif
POTLESS_2 13:aa620707126d 49
POTLESS_2 19:31ac20c07bb2 50
POTLESS_2 19:31ac20c07bb2 51 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 52 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 53
POTLESS_2 21:28a3f60b4bc2 54 //TFT
POTLESS_2 21:28a3f60b4bc2 55 DmTftHX8353C tft(D2, D3, D4, D5, D6); /* DmTftHX8353C(PinName mosi, PinName clk, PinName cs, PinName dc, PinName rst) DM_TFT18_101 */
POTLESS_2 21:28a3f60b4bc2 56
POTLESS_2 21:28a3f60b4bc2 57 //Bool des pages
POTLESS_2 21:28a3f60b4bc2 58 bool FLAG_PAGE_1 = true;
POTLESS_2 21:28a3f60b4bc2 59 bool FLAG_PAGE_2 = false;
POTLESS_2 21:28a3f60b4bc2 60
POTLESS_2 21:28a3f60b4bc2 61 //Changement de pages
POTLESS_2 21:28a3f60b4bc2 62 InterruptIn mybutton(USER_BUTTON);
POTLESS_2 21:28a3f60b4bc2 63
POTLESS_2 21:28a3f60b4bc2 64 //Dessin du logo en t^te de page
POTLESS_2 21:28a3f60b4bc2 65 int bmpWidth, bmpHeight;
POTLESS_2 21:28a3f60b4bc2 66 uint8_t bmpImageoffset;
POTLESS_2 21:28a3f60b4bc2 67 extern uint8_t dmlogo[];
POTLESS_2 21:28a3f60b4bc2 68
POTLESS_2 21:28a3f60b4bc2 69 // LITTLE ENDIAN!
POTLESS_2 21:28a3f60b4bc2 70 uint16_t read16(uint8_t *src)
POTLESS_2 21:28a3f60b4bc2 71 {
POTLESS_2 21:28a3f60b4bc2 72 uint16_t d;
POTLESS_2 21:28a3f60b4bc2 73 uint8_t b;
POTLESS_2 21:28a3f60b4bc2 74 b = *src;
POTLESS_2 21:28a3f60b4bc2 75 d = *(src+1);
POTLESS_2 21:28a3f60b4bc2 76 d <<= 8;
POTLESS_2 21:28a3f60b4bc2 77 d |= b;
POTLESS_2 21:28a3f60b4bc2 78 return d;
POTLESS_2 21:28a3f60b4bc2 79 }
POTLESS_2 21:28a3f60b4bc2 80
POTLESS_2 21:28a3f60b4bc2 81 // LITTLE ENDIAN!
POTLESS_2 21:28a3f60b4bc2 82 uint32_t read32(uint8_t *src)
POTLESS_2 21:28a3f60b4bc2 83 {
POTLESS_2 21:28a3f60b4bc2 84 uint32_t d;
POTLESS_2 21:28a3f60b4bc2 85 uint16_t b;
POTLESS_2 21:28a3f60b4bc2 86
POTLESS_2 21:28a3f60b4bc2 87 b = read16(src);
POTLESS_2 21:28a3f60b4bc2 88 d = read16(src+2);
POTLESS_2 21:28a3f60b4bc2 89 d <<= 16;
POTLESS_2 21:28a3f60b4bc2 90 d |= b;
POTLESS_2 21:28a3f60b4bc2 91 return d;
POTLESS_2 21:28a3f60b4bc2 92 }
POTLESS_2 21:28a3f60b4bc2 93
POTLESS_2 21:28a3f60b4bc2 94 void drawBmpFromFlash(int x, int y)
POTLESS_2 21:28a3f60b4bc2 95 {
POTLESS_2 21:28a3f60b4bc2 96 uint16_t pos = bmpImageoffset;
POTLESS_2 21:28a3f60b4bc2 97
POTLESS_2 21:28a3f60b4bc2 98 uint16_t p; // pixel
POTLESS_2 21:28a3f60b4bc2 99 uint8_t g, b;
POTLESS_2 21:28a3f60b4bc2 100 int i, j; // line, column
POTLESS_2 21:28a3f60b4bc2 101
POTLESS_2 21:28a3f60b4bc2 102 for(i=bmpHeight; i>0; i--) {
POTLESS_2 21:28a3f60b4bc2 103 for(j=0; j<bmpWidth; j++) {
POTLESS_2 21:28a3f60b4bc2 104 b = *(dmlogo+pos++);
POTLESS_2 21:28a3f60b4bc2 105 g = *(dmlogo+pos++);
POTLESS_2 21:28a3f60b4bc2 106 p = *(dmlogo+pos++);
POTLESS_2 21:28a3f60b4bc2 107
POTLESS_2 21:28a3f60b4bc2 108 p >>= 3;
POTLESS_2 21:28a3f60b4bc2 109 p <<= 6;
POTLESS_2 21:28a3f60b4bc2 110
POTLESS_2 21:28a3f60b4bc2 111 g >>= 2;
POTLESS_2 21:28a3f60b4bc2 112 p |= g;
POTLESS_2 21:28a3f60b4bc2 113 p <<= 5;
POTLESS_2 21:28a3f60b4bc2 114
POTLESS_2 21:28a3f60b4bc2 115 b >>= 3;
POTLESS_2 21:28a3f60b4bc2 116 p |= b;
POTLESS_2 21:28a3f60b4bc2 117
POTLESS_2 21:28a3f60b4bc2 118 // write out the 16 bits of color
POTLESS_2 21:28a3f60b4bc2 119 tft.setPixel(j+x, i+y, p);
POTLESS_2 21:28a3f60b4bc2 120 }
POTLESS_2 21:28a3f60b4bc2 121 }
POTLESS_2 21:28a3f60b4bc2 122 }
POTLESS_2 21:28a3f60b4bc2 123
POTLESS_2 21:28a3f60b4bc2 124
POTLESS_2 21:28a3f60b4bc2 125 int bmpReadHeader() {
POTLESS_2 21:28a3f60b4bc2 126 uint32_t fileSize;
POTLESS_2 21:28a3f60b4bc2 127 uint32_t headerSize;
POTLESS_2 21:28a3f60b4bc2 128 uint16_t bmpDepth;
POTLESS_2 21:28a3f60b4bc2 129 uint16_t pos = 0;
POTLESS_2 21:28a3f60b4bc2 130
POTLESS_2 21:28a3f60b4bc2 131 if (read16(dmlogo) !=0x4D42){ // read magic byte
POTLESS_2 21:28a3f60b4bc2 132 return false;
POTLESS_2 21:28a3f60b4bc2 133 }
POTLESS_2 21:28a3f60b4bc2 134 pos += 2;
POTLESS_2 21:28a3f60b4bc2 135
POTLESS_2 21:28a3f60b4bc2 136 // read file size
POTLESS_2 21:28a3f60b4bc2 137 fileSize = read32(dmlogo+pos);
POTLESS_2 21:28a3f60b4bc2 138 pos += 4;
POTLESS_2 21:28a3f60b4bc2 139
POTLESS_2 21:28a3f60b4bc2 140 pos += 4; // Skip creator bytes
POTLESS_2 21:28a3f60b4bc2 141
POTLESS_2 21:28a3f60b4bc2 142 bmpImageoffset = read32(dmlogo+pos);
POTLESS_2 21:28a3f60b4bc2 143 pos += 4;
POTLESS_2 21:28a3f60b4bc2 144
POTLESS_2 21:28a3f60b4bc2 145 // read DIB header
POTLESS_2 21:28a3f60b4bc2 146 headerSize = read32(dmlogo+pos);
POTLESS_2 21:28a3f60b4bc2 147 pos +=4;
POTLESS_2 21:28a3f60b4bc2 148 bmpWidth = read32(dmlogo+pos);
POTLESS_2 21:28a3f60b4bc2 149 pos += 4;
POTLESS_2 21:28a3f60b4bc2 150 bmpHeight = read32(dmlogo+pos);
POTLESS_2 21:28a3f60b4bc2 151 pos += 4;
POTLESS_2 21:28a3f60b4bc2 152
POTLESS_2 21:28a3f60b4bc2 153 if (read16(dmlogo+pos) != 1){
POTLESS_2 21:28a3f60b4bc2 154 // number of color planes must be 1
POTLESS_2 21:28a3f60b4bc2 155 return false;
POTLESS_2 21:28a3f60b4bc2 156 }
POTLESS_2 21:28a3f60b4bc2 157 pos += 2;
POTLESS_2 21:28a3f60b4bc2 158
POTLESS_2 21:28a3f60b4bc2 159 bmpDepth = read16(dmlogo+pos);
POTLESS_2 21:28a3f60b4bc2 160 pos +=2;
POTLESS_2 21:28a3f60b4bc2 161
POTLESS_2 21:28a3f60b4bc2 162 if (read16(dmlogo+pos) != 0) {
POTLESS_2 21:28a3f60b4bc2 163 // compression not supported!
POTLESS_2 21:28a3f60b4bc2 164 return false;
POTLESS_2 21:28a3f60b4bc2 165 }
POTLESS_2 21:28a3f60b4bc2 166 pos += 2; // Should really be 2??
POTLESS_2 21:28a3f60b4bc2 167
POTLESS_2 21:28a3f60b4bc2 168 return true;
POTLESS_2 21:28a3f60b4bc2 169 }
POTLESS_2 21:28a3f60b4bc2 170
POTLESS_2 21:28a3f60b4bc2 171 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 172 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 173
POTLESS_2 21:28a3f60b4bc2 174
POTLESS_2 21:28a3f60b4bc2 175
POTLESS_2 21:28a3f60b4bc2 176
POTLESS_2 18:e3827d5dbdd9 177 //Contrôle des servos
POTLESS_2 20:bb8d2cea2076 178 PwmOut servo1(PB_15);
POTLESS_2 20:bb8d2cea2076 179 AnalogIn FeedBack1(PC_2);
POTLESS_2 19:31ac20c07bb2 180 float Servo1_POS;
POTLESS_2 19:31ac20c07bb2 181 float Limit_min_S1, Limit_max_S1;
POTLESS_2 19:31ac20c07bb2 182 float Delta_FB_1;
POTLESS_2 19:31ac20c07bb2 183
POTLESS_2 20:bb8d2cea2076 184 PwmOut servo2(PB_1);
POTLESS_2 20:bb8d2cea2076 185 AnalogIn FeedBack2(PC_3);
POTLESS_2 19:31ac20c07bb2 186 float Servo2_POS;
POTLESS_2 19:31ac20c07bb2 187 float Limit_min_S2, Limit_max_S2;
POTLESS_2 19:31ac20c07bb2 188 float Delta_FB_2;
POTLESS_2 18:e3827d5dbdd9 189
POTLESS_2 21:28a3f60b4bc2 190 //Buffer pour Commandes servo
POTLESS_2 21:28a3f60b4bc2 191 char commande_servo[20];
POTLESS_2 21:28a3f60b4bc2 192 int indexCommande;
POTLESS_2 5:e1d0dc7940a6 193
POTLESS_2 5:e1d0dc7940a6 194 //Init de la lib ARNSRS;
POTLESS_2 5:e1d0dc7940a6 195 ARNSRS arnsrs;
POTLESS_2 5:e1d0dc7940a6 196
POTLESS_2 9:d945fa4be3a5 197 //COM Série vers l'ordi, Serial 2 par défaut
POTLESS_2 14:e6686a44db84 198 Serial serialMonit (USBTX,USBRX);
potless 2:4a8bf1d53439 199
POTLESS_2 5:e1d0dc7940a6 200 //Variable des capteurs
POTLESS_2 12:9ac5be447764 201 int co2 = 0;
POTLESS_2 12:9ac5be447764 202 int ppO2 = 0;
POTLESS_2 12:9ac5be447764 203 float pression = 0;
POTLESS_2 12:9ac5be447764 204 float Temp1 = 0;
POTLESS_2 12:9ac5be447764 205 float Temp2 = 0;
POTLESS_2 12:9ac5be447764 206 float Humi = 0;
POTLESS_2 12:9ac5be447764 207
POTLESS_2 20:bb8d2cea2076 208 //RTC
POTLESS_2 15:c9205e490740 209 //Pour stocker le format date / heure
POTLESS_2 5:e1d0dc7940a6 210 string DateHeure;
POTLESS_2 20:bb8d2cea2076 211 time_t seconds;
potless 2:4a8bf1d53439 212
POTLESS_2 6:1c2212891714 213 //SD card
POTLESS_2 6:1c2212891714 214 SDFileSystem sd(D11, D12, D13, D10, "sd"); // MOSI, MISO, SCK, CS
POTLESS_2 21:28a3f60b4bc2 215 DigitalInOut csSDCard(D10, PIN_OUTPUT, PullUp, 1);
POTLESS_2 6:1c2212891714 216 FILE *fp;
POTLESS_2 7:c5a5d8f678ff 217 char fileName[32];
POTLESS_2 7:c5a5d8f678ff 218 int points = 1;
POTLESS_2 4:d84250f67dec 219
POTLESS_2 19:31ac20c07bb2 220 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 221 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 15:c9205e490740 222
POTLESS_2 19:31ac20c07bb2 223
POTLESS_2 19:31ac20c07bb2 224
POTLESS_2 19:31ac20c07bb2 225 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 226 ///// Remap d'une valeur /////
POTLESS_2 19:31ac20c07bb2 227 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 228
POTLESS_2 19:31ac20c07bb2 229 float remap(float x, float in_min, float in_max, float out_min, float out_max)
POTLESS_2 19:31ac20c07bb2 230 {
POTLESS_2 19:31ac20c07bb2 231 return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
POTLESS_2 19:31ac20c07bb2 232 }
POTLESS_2 19:31ac20c07bb2 233
POTLESS_2 19:31ac20c07bb2 234 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 235 //// Fonction pour créer et envoyer la chaine d'infos en BLE ////
POTLESS_2 19:31ac20c07bb2 236 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 237
POTLESS_2 19:31ac20c07bb2 238 //On balance deux float
POTLESS_2 17:6e0c4c0e0fe2 239 void build_send_Message_float(string com, float A, float B)
POTLESS_2 14:e6686a44db84 240 {
POTLESS_2 14:e6686a44db84 241 char buf[50];
POTLESS_2 17:6e0c4c0e0fe2 242 sprintf(buf,"%s%.1f:%.1f\r\n", com.c_str(), A, B);
POTLESS_2 21:28a3f60b4bc2 243 ANDROID(buf);
POTLESS_2 17:6e0c4c0e0fe2 244 wait_ms(100);
POTLESS_2 17:6e0c4c0e0fe2 245 }
POTLESS_2 17:6e0c4c0e0fe2 246
POTLESS_2 19:31ac20c07bb2 247 //On balance deux int
POTLESS_2 17:6e0c4c0e0fe2 248 void build_send_Message_int(string com, int A, int B)
POTLESS_2 17:6e0c4c0e0fe2 249 {
POTLESS_2 17:6e0c4c0e0fe2 250 char buf[50];
POTLESS_2 17:6e0c4c0e0fe2 251 sprintf(buf,"%s%d:%d\r\n", com.c_str(), A, B);
POTLESS_2 21:28a3f60b4bc2 252 ANDROID(buf);
POTLESS_2 17:6e0c4c0e0fe2 253 wait_ms(100);
POTLESS_2 14:e6686a44db84 254 }
POTLESS_2 13:aa620707126d 255
POTLESS_2 21:28a3f60b4bc2 256
POTLESS_2 19:31ac20c07bb2 257 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 258 //// Fonction commande servos par port série ////
POTLESS_2 19:31ac20c07bb2 259 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 260
POTLESS_2 13:aa620707126d 261
potless 23:40a6039cb140 262 void Servo_USB()
POTLESS_2 19:31ac20c07bb2 263 {
POTLESS_2 19:31ac20c07bb2 264
POTLESS_2 19:31ac20c07bb2 265 //Variables pour décomposition du message
potless 23:40a6039cb140 266 char *commande=" ";
potless 23:40a6039cb140 267 char *valeur=" ";
POTLESS_2 19:31ac20c07bb2 268
POTLESS_2 19:31ac20c07bb2 269 //La commande
potless 22:8e4ace42e4f5 270 // un message valide est du type [Sx];yyy avec x numero du servo et yyy compris entre 000 et 100
potless 23:40a6039cb140 271 DEBUG("index = %d commande_servo = %s \n", indexCommande, commande_servo);
potless 23:40a6039cb140 272 commande = strtok(commande_servo, ",;");
POTLESS_2 19:31ac20c07bb2 273 DEBUG("Commande = %s\n", commande);
POTLESS_2 19:31ac20c07bb2 274
POTLESS_2 19:31ac20c07bb2 275 //La valeur associée
POTLESS_2 19:31ac20c07bb2 276 valeur = strtok(NULL, ",;");
POTLESS_2 19:31ac20c07bb2 277 DEBUG("Valeur = %s\n", valeur);
POTLESS_2 19:31ac20c07bb2 278
POTLESS_2 19:31ac20c07bb2 279 //On compare la commande pour faire les actions
POTLESS_2 19:31ac20c07bb2 280
POTLESS_2 19:31ac20c07bb2 281 //Commande servo1
POTLESS_2 19:31ac20c07bb2 282 if(strcmp(commande, "[S1]") == 0) {
potless 22:8e4ace42e4f5 283 servo1= atoi(valeur) / 100.f;
POTLESS_2 19:31ac20c07bb2 284 DEBUG(" Servo 1 = %s\n", valeur);
potless 22:8e4ace42e4f5 285 //indexCommande = 0;
POTLESS_2 19:31ac20c07bb2 286 }
POTLESS_2 19:31ac20c07bb2 287
POTLESS_2 19:31ac20c07bb2 288 //Commande servo2
POTLESS_2 19:31ac20c07bb2 289 if(strcmp(commande, "[S2]") == 0) {
potless 22:8e4ace42e4f5 290 servo2 =atoi(valeur) / 100.f;
POTLESS_2 19:31ac20c07bb2 291 DEBUG("Servo 2 = %f\r\n", valeur);
potless 22:8e4ace42e4f5 292 //indexCommande = 0;
POTLESS_2 19:31ac20c07bb2 293 }
potless 22:8e4ace42e4f5 294
potless 22:8e4ace42e4f5 295 indexCommande = 0;
POTLESS_2 19:31ac20c07bb2 296 }
POTLESS_2 19:31ac20c07bb2 297
POTLESS_2 21:28a3f60b4bc2 298 void callbackServo()
potless 23:40a6039cb140 299 {
POTLESS_2 21:28a3f60b4bc2 300
potless 23:40a6039cb140 301 while(serialMonit.readable())
potless 23:40a6039cb140 302 commande_servo [indexCommande++] = serialMonit.getc();
POTLESS_2 21:28a3f60b4bc2 303
POTLESS_2 19:31ac20c07bb2 304 }
POTLESS_2 14:e6686a44db84 305
POTLESS_2 19:31ac20c07bb2 306 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 307 //// Fonction qui change le nom du fichier ouvert pour le LOG ////
POTLESS_2 19:31ac20c07bb2 308 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 17:6e0c4c0e0fe2 309
POTLESS_2 7:c5a5d8f678ff 310 FILE *nextLogFile(void)
POTLESS_2 7:c5a5d8f678ff 311 {
POTLESS_2 7:c5a5d8f678ff 312 static unsigned int fileNumber = 0;
POTLESS_2 7:c5a5d8f678ff 313 FILE *filePtr = NULL;
POTLESS_2 7:c5a5d8f678ff 314 do {
POTLESS_2 7:c5a5d8f678ff 315 if (filePtr != NULL)
POTLESS_2 7:c5a5d8f678ff 316 fclose(filePtr);
POTLESS_2 7:c5a5d8f678ff 317 sprintf(fileName,"/sd/LOG_Capteurs_%04u.txt",fileNumber++);
POTLESS_2 7:c5a5d8f678ff 318 filePtr = fopen(fileName,"r");
POTLESS_2 7:c5a5d8f678ff 319 } while (filePtr != NULL);
POTLESS_2 7:c5a5d8f678ff 320 return fopen( fileName,"w");
POTLESS_2 7:c5a5d8f678ff 321 }
POTLESS_2 15:c9205e490740 322
POTLESS_2 19:31ac20c07bb2 323 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 324 //// Réglage de l'heure par le moniteur série ////
POTLESS_2 19:31ac20c07bb2 325 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 326
POTLESS_2 14:e6686a44db84 327 void SetTime()
POTLESS_2 14:e6686a44db84 328 {
POTLESS_2 14:e6686a44db84 329 //Reglage date / heure depuis le terminal
POTLESS_2 7:c5a5d8f678ff 330 struct tm t;
POTLESS_2 20:bb8d2cea2076 331 serialMonit.printf("Entrer la date et l'heure :\n");
POTLESS_2 20:bb8d2cea2076 332 serialMonit.printf("YYYY MM DD HH MM SS [enter]\n");
POTLESS_2 20:bb8d2cea2076 333 serialMonit.scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
POTLESS_2 20:bb8d2cea2076 334 , &t.tm_hour, &t.tm_min, &t.tm_sec);
POTLESS_2 7:c5a5d8f678ff 335 t.tm_year = t.tm_year - 1900;
POTLESS_2 7:c5a5d8f678ff 336 t.tm_mon = t.tm_mon - 1;
POTLESS_2 14:e6686a44db84 337
POTLESS_2 7:c5a5d8f678ff 338 // set the time
POTLESS_2 14:e6686a44db84 339 set_time(mktime(&t));
POTLESS_2 20:bb8d2cea2076 340
POTLESS_2 20:bb8d2cea2076 341 if(NEED_CONSOLE_OUTPUT == 0) serialMonit.printf("OK. Vous pouvez fermer le moniteur serie");
POTLESS_2 12:9ac5be447764 342 }
POTLESS_2 12:9ac5be447764 343
POTLESS_2 19:31ac20c07bb2 344 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 345 //// Initialisation DATA LOG ////
POTLESS_2 19:31ac20c07bb2 346 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 347
POTLESS_2 14:e6686a44db84 348 void init_DATALOG()
POTLESS_2 14:e6686a44db84 349 {
POTLESS_2 14:e6686a44db84 350 DEBUG("Initialisation SD card\r\n");
POTLESS_2 15:c9205e490740 351 DEBUG("\r\n", "");
POTLESS_2 12:9ac5be447764 352 fp = nextLogFile();
POTLESS_2 14:e6686a44db84 353
POTLESS_2 14:e6686a44db84 354 if (!fp) {
POTLESS_2 14:e6686a44db84 355 DEBUG("Probleme SD card...Fin du programme...\r\n");
POTLESS_2 14:e6686a44db84 356 //exit(0);
POTLESS_2 14:e6686a44db84 357 } else {
POTLESS_2 14:e6686a44db84 358 DEBUG("Nouveau fichier LOG cree = %s\r\n", fileName);
POTLESS_2 14:e6686a44db84 359 DEBUG("\r\n", "");
POTLESS_2 12:9ac5be447764 360 }
POTLESS_2 14:e6686a44db84 361 }
POTLESS_2 14:e6686a44db84 362
POTLESS_2 19:31ac20c07bb2 363 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 364 //// Fonction d'enregistrement des données sur carte SD ////
POTLESS_2 19:31ac20c07bb2 365 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 366
POTLESS_2 19:31ac20c07bb2 367 void DATA_LOG()
POTLESS_2 19:31ac20c07bb2 368 {
POTLESS_2 20:bb8d2cea2076 369 seconds = time(NULL);
POTLESS_2 20:bb8d2cea2076 370
POTLESS_2 19:31ac20c07bb2 371 if (fp) {
POTLESS_2 19:31ac20c07bb2 372 fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi);
POTLESS_2 19:31ac20c07bb2 373 DEBUG(" Enregistrement d'un point sur la carte SD\r\n");
POTLESS_2 19:31ac20c07bb2 374 DEBUG(" Nombre de points = %d\r\n", points);
POTLESS_2 19:31ac20c07bb2 375 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 376 points++;
POTLESS_2 19:31ac20c07bb2 377 } else {
POTLESS_2 19:31ac20c07bb2 378 DEBUG(" Probleme carte SD\r\n");
POTLESS_2 19:31ac20c07bb2 379 }
POTLESS_2 19:31ac20c07bb2 380 }
POTLESS_2 19:31ac20c07bb2 381
POTLESS_2 19:31ac20c07bb2 382 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 383 //// Calibration des limites de feedback des servos ////
POTLESS_2 19:31ac20c07bb2 384 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 385
POTLESS_2 19:31ac20c07bb2 386 void Calibration_servo()
POTLESS_2 19:31ac20c07bb2 387 {
POTLESS_2 19:31ac20c07bb2 388 //Servos, calibration du feedback
potless 22:8e4ace42e4f5 389 DEBUG(" Check Servos :\r\n");
POTLESS_2 20:bb8d2cea2076 390 DEBUG("\r\n");
potless 22:8e4ace42e4f5 391 servo1.period(0.001); // à mettre dans le setup si cette calib n'est pas appelée (je l ai trouvée commentée)
POTLESS_2 19:31ac20c07bb2 392 servo2.period(0.001);
POTLESS_2 20:bb8d2cea2076 393 //Rentrer les servos à fond
POTLESS_2 19:31ac20c07bb2 394 servo1 = 0;
POTLESS_2 19:31ac20c07bb2 395 servo2 = 0;
POTLESS_2 19:31ac20c07bb2 396 wait(4);
potless 22:8e4ace42e4f5 397 Limit_min_S1 = 1-FeedBack1.read();
potless 22:8e4ace42e4f5 398
POTLESS_2 20:bb8d2cea2076 399 wait_ms(100);
potless 22:8e4ace42e4f5 400 Limit_min_S2 = 1-FeedBack2.read();
POTLESS_2 20:bb8d2cea2076 401
potless 22:8e4ace42e4f5 402 DEBUG(" FeedBack 1 min = %f\n", Limit_min_S1);
potless 22:8e4ace42e4f5 403 DEBUG(" FeedBack 2 min = %f\n", Limit_min_S2);
POTLESS_2 20:bb8d2cea2076 404 DEBUG("\r\n");
POTLESS_2 20:bb8d2cea2076 405
POTLESS_2 20:bb8d2cea2076 406 //Sortir les servos à fond
POTLESS_2 19:31ac20c07bb2 407 servo1 = 1;
POTLESS_2 19:31ac20c07bb2 408 servo2 = 1;
POTLESS_2 19:31ac20c07bb2 409 wait(4);
potless 22:8e4ace42e4f5 410 Limit_max_S1 = 1-FeedBack1.read();
POTLESS_2 20:bb8d2cea2076 411 wait_ms(100);
potless 22:8e4ace42e4f5 412 Limit_max_S2 = 1-FeedBack2.read();
POTLESS_2 20:bb8d2cea2076 413
potless 22:8e4ace42e4f5 414 DEBUG(" FeedBack 1 Max = %f\n", Limit_max_S1);
potless 22:8e4ace42e4f5 415 DEBUG(" FeedBack 2 Max = %f\n", Limit_max_S2);
POTLESS_2 20:bb8d2cea2076 416 DEBUG("\r\n");
POTLESS_2 20:bb8d2cea2076 417
POTLESS_2 20:bb8d2cea2076 418 //Position milieu
potless 22:8e4ace42e4f5 419 servo1 = (Limit_min_S1+Limit_max_S1)*0.5;
potless 22:8e4ace42e4f5 420 servo2 = (Limit_min_S2+Limit_max_S2)*0.5;
potless 22:8e4ace42e4f5 421 wait(4);
POTLESS_2 20:bb8d2cea2076 422
POTLESS_2 19:31ac20c07bb2 423 //Mesure du delta consigne / feedback
potless 22:8e4ace42e4f5 424 Delta_FB_1 = abs(remap(FeedBack1, Limit_min_S1, Limit_max_S1, 0, 100)-50);
POTLESS_2 20:bb8d2cea2076 425 Delta_FB_2 = abs(remap(FeedBack2, Limit_max_S2, Limit_min_S2, 0, 100) - 50);
POTLESS_2 20:bb8d2cea2076 426
POTLESS_2 19:31ac20c07bb2 427 DEBUG(" Delta Servo 1 = %f\n", Delta_FB_1);
POTLESS_2 19:31ac20c07bb2 428 DEBUG(" Delta Servo 2 = %f\n", Delta_FB_2);
POTLESS_2 19:31ac20c07bb2 429
potless 22:8e4ace42e4f5 430 if(Delta_FB_1 > 10 || Delta_FB_2 > 10) DEBUG(" Delta Servos non satisfaisant...");
POTLESS_2 19:31ac20c07bb2 431 }
POTLESS_2 19:31ac20c07bb2 432
POTLESS_2 19:31ac20c07bb2 433 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 434 //// Fonction d'affichage de tout dans le moniteur série ou le traceur ////
POTLESS_2 19:31ac20c07bb2 435 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 436
POTLESS_2 19:31ac20c07bb2 437 void Debug_Complet()
POTLESS_2 19:31ac20c07bb2 438 {
POTLESS_2 20:bb8d2cea2076 439 //RTC
POTLESS_2 20:bb8d2cea2076 440 seconds = time(NULL);
POTLESS_2 19:31ac20c07bb2 441
POTLESS_2 19:31ac20c07bb2 442 DEBUG(" Date / Heure = %s\r\n", ctime(&seconds));
POTLESS_2 19:31ac20c07bb2 443
POTLESS_2 19:31ac20c07bb2 444 //Retour capteurs
POTLESS_2 19:31ac20c07bb2 445 DEBUG(" CO2 = %d\r\n" , co2);
POTLESS_2 19:31ac20c07bb2 446 DEBUG(" Humidite = %f\r\n" , Humi);
POTLESS_2 19:31ac20c07bb2 447 DEBUG(" Temperature = %f\r\n" ,Temp1);
POTLESS_2 19:31ac20c07bb2 448 //P / T sur MS5803
POTLESS_2 19:31ac20c07bb2 449 DEBUG(" Pression = %f\r\n", pression);
POTLESS_2 19:31ac20c07bb2 450 DEBUG(" Temperature = %f\r\n", Temp2);
POTLESS_2 19:31ac20c07bb2 451 //PPO2 sur ADS1015
POTLESS_2 19:31ac20c07bb2 452 DEBUG(" PPO2 = %d\r\n", ppO2);
POTLESS_2 19:31ac20c07bb2 453 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 454
POTLESS_2 19:31ac20c07bb2 455 //Retour position des servos
POTLESS_2 19:31ac20c07bb2 456 DEBUG(" FeedBack 1 = %3.2f%%\n", Servo1_POS);
POTLESS_2 19:31ac20c07bb2 457 DEBUG(" FeedBack 2 = %3.2f%%\n", Servo2_POS);
POTLESS_2 20:bb8d2cea2076 458 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 459
POTLESS_2 19:31ac20c07bb2 460 //Traceur
POTLESS_2 19:31ac20c07bb2 461 TRACE("%d" , co2);
POTLESS_2 19:31ac20c07bb2 462 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 463 TRACE("%d" , ppO2);
POTLESS_2 19:31ac20c07bb2 464 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 465 TRACE("%f" , Humi);
POTLESS_2 19:31ac20c07bb2 466 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 467 TRACE("%f" , Temp1);
POTLESS_2 19:31ac20c07bb2 468 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 469 TRACE("%f" , Temp2);
POTLESS_2 19:31ac20c07bb2 470 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 471 TRACE("%f" , pression);
POTLESS_2 19:31ac20c07bb2 472 TRACE("\r\n");
POTLESS_2 19:31ac20c07bb2 473 }
POTLESS_2 19:31ac20c07bb2 474
POTLESS_2 19:31ac20c07bb2 475 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 476 /// PAGE tft 1 //
POTLESS_2 21:28a3f60b4bc2 477 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 478
POTLESS_2 21:28a3f60b4bc2 479 void tft_page_1()
POTLESS_2 21:28a3f60b4bc2 480 {
POTLESS_2 21:28a3f60b4bc2 481 FLAG_PAGE_2 = false;
POTLESS_2 21:28a3f60b4bc2 482 FLAG_PAGE_1 = true;
POTLESS_2 21:28a3f60b4bc2 483
POTLESS_2 21:28a3f60b4bc2 484 //tft.clearScreen(BLACK);
POTLESS_2 21:28a3f60b4bc2 485
POTLESS_2 21:28a3f60b4bc2 486 if (!bmpReadHeader()) {
POTLESS_2 21:28a3f60b4bc2 487 return;
POTLESS_2 21:28a3f60b4bc2 488 }
POTLESS_2 21:28a3f60b4bc2 489
POTLESS_2 21:28a3f60b4bc2 490 drawBmpFromFlash(30, 2);
POTLESS_2 21:28a3f60b4bc2 491
POTLESS_2 21:28a3f60b4bc2 492 tft.drawString(5,35, "CO2 ");
POTLESS_2 21:28a3f60b4bc2 493 tft.drawString(90,35, " ppm");
POTLESS_2 21:28a3f60b4bc2 494
POTLESS_2 21:28a3f60b4bc2 495 tft.drawString(5,55, "ppO2 ");
POTLESS_2 21:28a3f60b4bc2 496 tft.drawString(90,55, " mb");
POTLESS_2 21:28a3f60b4bc2 497
POTLESS_2 21:28a3f60b4bc2 498 tft.drawString(5,75, "T_1 ");
POTLESS_2 21:28a3f60b4bc2 499 tft.drawString(90,75, " C");
POTLESS_2 21:28a3f60b4bc2 500
POTLESS_2 21:28a3f60b4bc2 501 tft.drawString(5,95, "T_2 ");
POTLESS_2 21:28a3f60b4bc2 502 tft.drawString(90,95, " C");
POTLESS_2 21:28a3f60b4bc2 503
POTLESS_2 21:28a3f60b4bc2 504 tft.drawString(5,115, "Hum ");
POTLESS_2 21:28a3f60b4bc2 505 tft.drawString(90,115, " %");
POTLESS_2 21:28a3f60b4bc2 506
POTLESS_2 21:28a3f60b4bc2 507 tft.drawString(5,135, "P ");
POTLESS_2 21:28a3f60b4bc2 508 tft.drawString(90,135, " m");
POTLESS_2 21:28a3f60b4bc2 509
POTLESS_2 21:28a3f60b4bc2 510 tft.drawRectangle(0,0,126,32, WHITE);
POTLESS_2 21:28a3f60b4bc2 511 tft.drawRectangle(0,32,126,52, WHITE);
POTLESS_2 21:28a3f60b4bc2 512 tft.drawRectangle(0,52,126,72, WHITE);
POTLESS_2 21:28a3f60b4bc2 513 tft.drawRectangle(0,72,126,92, WHITE);
POTLESS_2 21:28a3f60b4bc2 514 tft.drawRectangle(0,92,126,112, WHITE);
POTLESS_2 21:28a3f60b4bc2 515 tft.drawRectangle(0,112,126,132, WHITE);
POTLESS_2 21:28a3f60b4bc2 516 tft.drawRectangle(0,132,126,152, WHITE);
POTLESS_2 21:28a3f60b4bc2 517
POTLESS_2 21:28a3f60b4bc2 518
POTLESS_2 21:28a3f60b4bc2 519 }
POTLESS_2 21:28a3f60b4bc2 520
POTLESS_2 21:28a3f60b4bc2 521 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 522 /// PAGE tft 2 //
POTLESS_2 21:28a3f60b4bc2 523 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 524
POTLESS_2 21:28a3f60b4bc2 525 void tft_page_2()
POTLESS_2 21:28a3f60b4bc2 526 {
POTLESS_2 21:28a3f60b4bc2 527 FLAG_PAGE_1 = false;
POTLESS_2 21:28a3f60b4bc2 528 FLAG_PAGE_2 = true;
POTLESS_2 21:28a3f60b4bc2 529
POTLESS_2 21:28a3f60b4bc2 530 //tft.clearScreen(BLACK);
POTLESS_2 21:28a3f60b4bc2 531
POTLESS_2 21:28a3f60b4bc2 532 if (!bmpReadHeader()) {
POTLESS_2 21:28a3f60b4bc2 533 return;
POTLESS_2 21:28a3f60b4bc2 534 }
POTLESS_2 21:28a3f60b4bc2 535
POTLESS_2 21:28a3f60b4bc2 536 drawBmpFromFlash(30, 2);
POTLESS_2 21:28a3f60b4bc2 537
POTLESS_2 21:28a3f60b4bc2 538 tft.drawString(5,35, "CO2 ");
POTLESS_2 21:28a3f60b4bc2 539 tft.drawString(90,35, " ppm");
POTLESS_2 21:28a3f60b4bc2 540
POTLESS_2 21:28a3f60b4bc2 541 tft.drawRectangle(0,0,126,32, WHITE);
POTLESS_2 21:28a3f60b4bc2 542 tft.drawRectangle(0,32,126,52, WHITE);
POTLESS_2 21:28a3f60b4bc2 543 }
POTLESS_2 21:28a3f60b4bc2 544
POTLESS_2 21:28a3f60b4bc2 545 void pressed()
POTLESS_2 21:28a3f60b4bc2 546 {
POTLESS_2 21:28a3f60b4bc2 547 tft.clearScreen(BLACK);
POTLESS_2 21:28a3f60b4bc2 548
POTLESS_2 21:28a3f60b4bc2 549 if (FLAG_PAGE_1){
POTLESS_2 21:28a3f60b4bc2 550 tft_page_2();
POTLESS_2 21:28a3f60b4bc2 551 }
POTLESS_2 21:28a3f60b4bc2 552
POTLESS_2 21:28a3f60b4bc2 553 if (FLAG_PAGE_2){
POTLESS_2 21:28a3f60b4bc2 554 tft_page_1();
POTLESS_2 21:28a3f60b4bc2 555 }
POTLESS_2 21:28a3f60b4bc2 556 }
POTLESS_2 21:28a3f60b4bc2 557
POTLESS_2 21:28a3f60b4bc2 558 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 559 /// fonction initialisation //
POTLESS_2 19:31ac20c07bb2 560 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 561
POTLESS_2 19:31ac20c07bb2 562 void setup()
POTLESS_2 19:31ac20c07bb2 563 {
POTLESS_2 19:31ac20c07bb2 564 wait(2);
POTLESS_2 21:28a3f60b4bc2 565
POTLESS_2 19:31ac20c07bb2 566 //Réglage de l'heure
POTLESS_2 20:bb8d2cea2076 567 //SetTime();
POTLESS_2 19:31ac20c07bb2 568
POTLESS_2 19:31ac20c07bb2 569 //Calibration des limites des servos pour remapper les feedback
potless 22:8e4ace42e4f5 570 Calibration_servo();
potless 22:8e4ace42e4f5 571 //servo1.period(0.001); // a mettre si pas de calib
potless 22:8e4ace42e4f5 572 //servo2.period(0.001); // a mettre si pas de calib
POTLESS_2 19:31ac20c07bb2 573
POTLESS_2 21:28a3f60b4bc2 574 //Démarrage de l'écran
POTLESS_2 21:28a3f60b4bc2 575 DEBUG("Initialisation TFT\r\n");
POTLESS_2 21:28a3f60b4bc2 576 tft.init();
POTLESS_2 21:28a3f60b4bc2 577 tft_page_1();
POTLESS_2 21:28a3f60b4bc2 578
POTLESS_2 19:31ac20c07bb2 579 //Initialisation du Data log
POTLESS_2 19:31ac20c07bb2 580 if (NEED_SD_DATA_LOG == 1) init_DATALOG();
POTLESS_2 19:31ac20c07bb2 581
POTLESS_2 19:31ac20c07bb2 582 //Initialisation capteurs
POTLESS_2 19:31ac20c07bb2 583 arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
POTLESS_2 19:31ac20c07bb2 584 }
POTLESS_2 19:31ac20c07bb2 585
POTLESS_2 19:31ac20c07bb2 586 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 587 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 588
POTLESS_2 19:31ac20c07bb2 589 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 590 /// procédure principale ///
POTLESS_2 19:31ac20c07bb2 591 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 592
POTLESS_2 19:31ac20c07bb2 593 int main()
POTLESS_2 19:31ac20c07bb2 594 {
POTLESS_2 19:31ac20c07bb2 595 setup();
POTLESS_2 14:e6686a44db84 596
POTLESS_2 21:28a3f60b4bc2 597 //interruption sur le boutton user pour changer de page
POTLESS_2 21:28a3f60b4bc2 598 mybutton.fall(&pressed);
POTLESS_2 21:28a3f60b4bc2 599
POTLESS_2 21:28a3f60b4bc2 600 //Commande éventuelle pour les servos
POTLESS_2 21:28a3f60b4bc2 601 serialMonit.attach(&callbackServo, Serial::RxIrq);
POTLESS_2 21:28a3f60b4bc2 602
POTLESS_2 4:d84250f67dec 603 while (1) {
POTLESS_2 5:e1d0dc7940a6 604
POTLESS_2 4:d84250f67dec 605 //CO2 / H / T sur Cozir
POTLESS_2 6:1c2212891714 606 co2 = arnsrs.requestCO2();
POTLESS_2 6:1c2212891714 607 Humi = arnsrs.requestHUMI();
POTLESS_2 14:e6686a44db84 608 Temp1 = arnsrs.requestTEMP();
POTLESS_2 14:e6686a44db84 609
POTLESS_2 6:1c2212891714 610 //P / T sur MS5803_14BA
POTLESS_2 5:e1d0dc7940a6 611 pression = arnsrs.requestPress();
POTLESS_2 5:e1d0dc7940a6 612 Temp2 = arnsrs.requestTemp();
POTLESS_2 5:e1d0dc7940a6 613
POTLESS_2 5:e1d0dc7940a6 614 //PPO2 sur ADS1015
POTLESS_2 8:e864edfe656e 615 ppO2 = arnsrs.requestPpO2(false);
POTLESS_2 5:e1d0dc7940a6 616
POTLESS_2 19:31ac20c07bb2 617 //Retour position des servos
potless 22:8e4ace42e4f5 618 Servo1_POS = 1-FeedBack1;//remap(FeedBack1, Limit_max_S1, Limit_min_S1, 0, 100);
potless 22:8e4ace42e4f5 619 //Servo2_POS = remap(FeedBack2, Limit_max_S2, Limit_min_S2, 0, 100);
POTLESS_2 5:e1d0dc7940a6 620
POTLESS_2 19:31ac20c07bb2 621 //Debug
POTLESS_2 19:31ac20c07bb2 622 Debug_Complet();
POTLESS_2 19:31ac20c07bb2 623
POTLESS_2 7:c5a5d8f678ff 624 //Data LOG
POTLESS_2 15:c9205e490740 625 if (NEED_SD_DATA_LOG == 1) DATA_LOG();
POTLESS_2 19:31ac20c07bb2 626
POTLESS_2 17:6e0c4c0e0fe2 627 //En accord avec app Android
POTLESS_2 19:31ac20c07bb2 628 build_send_Message_int("t", co2, ppO2);
POTLESS_2 19:31ac20c07bb2 629 build_send_Message_float("u", Temp1, Temp2);
POTLESS_2 19:31ac20c07bb2 630 build_send_Message_float("v", Humi, pression);
POTLESS_2 21:28a3f60b4bc2 631 build_send_Message_float("f", Servo1_POS, Servo2_POS);
POTLESS_2 21:28a3f60b4bc2 632
potless 23:40a6039cb140 633 if (indexCommande>0){
potless 23:40a6039cb140 634 Servo_USB();
potless 23:40a6039cb140 635 strcpy(commande_servo," ");
potless 23:40a6039cb140 636 }
potless 23:40a6039cb140 637
POTLESS_2 21:28a3f60b4bc2 638
POTLESS_2 21:28a3f60b4bc2 639 if(FLAG_PAGE_1) {
POTLESS_2 21:28a3f60b4bc2 640 tft.drawNumber(65,35,co2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 641 tft.drawNumber(65,55,ppO2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 642 tft.drawNumber(65,75,Temp1 ,3, false);
POTLESS_2 21:28a3f60b4bc2 643 tft.drawNumber(65,95,Temp2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 644 tft.drawNumber(65,115,Humi ,3, false);
POTLESS_2 21:28a3f60b4bc2 645 tft.drawNumber(65,135,pression ,3, false);
POTLESS_2 21:28a3f60b4bc2 646 }
POTLESS_2 21:28a3f60b4bc2 647
POTLESS_2 21:28a3f60b4bc2 648 if(FLAG_PAGE_2) {
POTLESS_2 21:28a3f60b4bc2 649 tft.drawNumber(65,35,co2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 650 }
POTLESS_2 13:aa620707126d 651 }
POTLESS_2 4:d84250f67dec 652 }
POTLESS_2 19:31ac20c07bb2 653
POTLESS_2 19:31ac20c07bb2 654 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 655 ////////////////////////////////////////////////////////////////////////////////