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:
Fri May 19 00:01:17 2017 +0000
Revision:
22:8e4ace42e4f5
Parent:
21:28a3f60b4bc2
Child:
23:40a6039cb140
petit bug servo corrig?

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_2 21:28a3f60b4bc2 262 void Servo_USB(char message_Android [])
POTLESS_2 19:31ac20c07bb2 263 {
POTLESS_2 19:31ac20c07bb2 264
POTLESS_2 19:31ac20c07bb2 265 //Variables pour décomposition du message
potless 22:8e4ace42e4f5 266 char *commande=" ";
potless 22:8e4ace42e4f5 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 22:8e4ace42e4f5 271
POTLESS_2 19:31ac20c07bb2 272 commande = strtok(message_Android, ",;");
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_2 13:aa620707126d 299 {
POTLESS_2 21:28a3f60b4bc2 300
POTLESS_2 21:28a3f60b4bc2 301 commande_servo [indexCommande++] = serialMonit.getc();
POTLESS_2 21:28a3f60b4bc2 302
POTLESS_2 19:31ac20c07bb2 303 }
POTLESS_2 14:e6686a44db84 304
POTLESS_2 19:31ac20c07bb2 305 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 306 //// Fonction qui change le nom du fichier ouvert pour le LOG ////
POTLESS_2 19:31ac20c07bb2 307 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 17:6e0c4c0e0fe2 308
POTLESS_2 7:c5a5d8f678ff 309 FILE *nextLogFile(void)
POTLESS_2 7:c5a5d8f678ff 310 {
POTLESS_2 7:c5a5d8f678ff 311 static unsigned int fileNumber = 0;
POTLESS_2 7:c5a5d8f678ff 312 FILE *filePtr = NULL;
POTLESS_2 7:c5a5d8f678ff 313 do {
POTLESS_2 7:c5a5d8f678ff 314 if (filePtr != NULL)
POTLESS_2 7:c5a5d8f678ff 315 fclose(filePtr);
POTLESS_2 7:c5a5d8f678ff 316 sprintf(fileName,"/sd/LOG_Capteurs_%04u.txt",fileNumber++);
POTLESS_2 7:c5a5d8f678ff 317 filePtr = fopen(fileName,"r");
POTLESS_2 7:c5a5d8f678ff 318 } while (filePtr != NULL);
POTLESS_2 7:c5a5d8f678ff 319 return fopen( fileName,"w");
POTLESS_2 7:c5a5d8f678ff 320 }
POTLESS_2 15:c9205e490740 321
POTLESS_2 19:31ac20c07bb2 322 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 323 //// Réglage de l'heure par le moniteur série ////
POTLESS_2 19:31ac20c07bb2 324 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 325
POTLESS_2 14:e6686a44db84 326 void SetTime()
POTLESS_2 14:e6686a44db84 327 {
POTLESS_2 14:e6686a44db84 328 //Reglage date / heure depuis le terminal
POTLESS_2 7:c5a5d8f678ff 329 struct tm t;
POTLESS_2 20:bb8d2cea2076 330 serialMonit.printf("Entrer la date et l'heure :\n");
POTLESS_2 20:bb8d2cea2076 331 serialMonit.printf("YYYY MM DD HH MM SS [enter]\n");
POTLESS_2 20:bb8d2cea2076 332 serialMonit.scanf("%d %d %d %d %d %d", &t.tm_year, &t.tm_mon, &t.tm_mday
POTLESS_2 20:bb8d2cea2076 333 , &t.tm_hour, &t.tm_min, &t.tm_sec);
POTLESS_2 7:c5a5d8f678ff 334 t.tm_year = t.tm_year - 1900;
POTLESS_2 7:c5a5d8f678ff 335 t.tm_mon = t.tm_mon - 1;
POTLESS_2 14:e6686a44db84 336
POTLESS_2 7:c5a5d8f678ff 337 // set the time
POTLESS_2 14:e6686a44db84 338 set_time(mktime(&t));
POTLESS_2 20:bb8d2cea2076 339
POTLESS_2 20:bb8d2cea2076 340 if(NEED_CONSOLE_OUTPUT == 0) serialMonit.printf("OK. Vous pouvez fermer le moniteur serie");
POTLESS_2 12:9ac5be447764 341 }
POTLESS_2 12:9ac5be447764 342
POTLESS_2 19:31ac20c07bb2 343 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 344 //// Initialisation DATA LOG ////
POTLESS_2 19:31ac20c07bb2 345 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 346
POTLESS_2 14:e6686a44db84 347 void init_DATALOG()
POTLESS_2 14:e6686a44db84 348 {
POTLESS_2 14:e6686a44db84 349 DEBUG("Initialisation SD card\r\n");
POTLESS_2 15:c9205e490740 350 DEBUG("\r\n", "");
POTLESS_2 12:9ac5be447764 351 fp = nextLogFile();
POTLESS_2 14:e6686a44db84 352
POTLESS_2 14:e6686a44db84 353 if (!fp) {
POTLESS_2 14:e6686a44db84 354 DEBUG("Probleme SD card...Fin du programme...\r\n");
POTLESS_2 14:e6686a44db84 355 //exit(0);
POTLESS_2 14:e6686a44db84 356 } else {
POTLESS_2 14:e6686a44db84 357 DEBUG("Nouveau fichier LOG cree = %s\r\n", fileName);
POTLESS_2 14:e6686a44db84 358 DEBUG("\r\n", "");
POTLESS_2 12:9ac5be447764 359 }
POTLESS_2 14:e6686a44db84 360 }
POTLESS_2 14:e6686a44db84 361
POTLESS_2 19:31ac20c07bb2 362 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 363 //// Fonction d'enregistrement des données sur carte SD ////
POTLESS_2 19:31ac20c07bb2 364 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 365
POTLESS_2 19:31ac20c07bb2 366 void DATA_LOG()
POTLESS_2 19:31ac20c07bb2 367 {
POTLESS_2 20:bb8d2cea2076 368 seconds = time(NULL);
POTLESS_2 20:bb8d2cea2076 369
POTLESS_2 19:31ac20c07bb2 370 if (fp) {
POTLESS_2 19:31ac20c07bb2 371 fprintf(fp, "%s,%d,%d,%f,%f,%f,%f\r\n", ctime(&seconds), co2 , ppO2, pression, Temp1, Temp2, Humi);
POTLESS_2 19:31ac20c07bb2 372 DEBUG(" Enregistrement d'un point sur la carte SD\r\n");
POTLESS_2 19:31ac20c07bb2 373 DEBUG(" Nombre de points = %d\r\n", points);
POTLESS_2 19:31ac20c07bb2 374 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 375 points++;
POTLESS_2 19:31ac20c07bb2 376 } else {
POTLESS_2 19:31ac20c07bb2 377 DEBUG(" Probleme carte SD\r\n");
POTLESS_2 19:31ac20c07bb2 378 }
POTLESS_2 19:31ac20c07bb2 379 }
POTLESS_2 19:31ac20c07bb2 380
POTLESS_2 19:31ac20c07bb2 381 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 382 //// Calibration des limites de feedback des servos ////
POTLESS_2 19:31ac20c07bb2 383 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 384
POTLESS_2 19:31ac20c07bb2 385 void Calibration_servo()
POTLESS_2 19:31ac20c07bb2 386 {
POTLESS_2 19:31ac20c07bb2 387 //Servos, calibration du feedback
potless 22:8e4ace42e4f5 388 DEBUG(" Check Servos :\r\n");
POTLESS_2 20:bb8d2cea2076 389 DEBUG("\r\n");
potless 22:8e4ace42e4f5 390 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 391 servo2.period(0.001);
POTLESS_2 20:bb8d2cea2076 392 //Rentrer les servos à fond
POTLESS_2 19:31ac20c07bb2 393 servo1 = 0;
POTLESS_2 19:31ac20c07bb2 394 servo2 = 0;
POTLESS_2 19:31ac20c07bb2 395 wait(4);
potless 22:8e4ace42e4f5 396 Limit_min_S1 = 1-FeedBack1.read();
potless 22:8e4ace42e4f5 397
POTLESS_2 20:bb8d2cea2076 398 wait_ms(100);
potless 22:8e4ace42e4f5 399 Limit_min_S2 = 1-FeedBack2.read();
POTLESS_2 20:bb8d2cea2076 400
potless 22:8e4ace42e4f5 401 DEBUG(" FeedBack 1 min = %f\n", Limit_min_S1);
potless 22:8e4ace42e4f5 402 DEBUG(" FeedBack 2 min = %f\n", Limit_min_S2);
POTLESS_2 20:bb8d2cea2076 403 DEBUG("\r\n");
POTLESS_2 20:bb8d2cea2076 404
POTLESS_2 20:bb8d2cea2076 405 //Sortir les servos à fond
POTLESS_2 19:31ac20c07bb2 406 servo1 = 1;
POTLESS_2 19:31ac20c07bb2 407 servo2 = 1;
POTLESS_2 19:31ac20c07bb2 408 wait(4);
potless 22:8e4ace42e4f5 409 Limit_max_S1 = 1-FeedBack1.read();
POTLESS_2 20:bb8d2cea2076 410 wait_ms(100);
potless 22:8e4ace42e4f5 411 Limit_max_S2 = 1-FeedBack2.read();
POTLESS_2 20:bb8d2cea2076 412
potless 22:8e4ace42e4f5 413 DEBUG(" FeedBack 1 Max = %f\n", Limit_max_S1);
potless 22:8e4ace42e4f5 414 DEBUG(" FeedBack 2 Max = %f\n", Limit_max_S2);
POTLESS_2 20:bb8d2cea2076 415 DEBUG("\r\n");
POTLESS_2 20:bb8d2cea2076 416
POTLESS_2 20:bb8d2cea2076 417 //Position milieu
potless 22:8e4ace42e4f5 418 servo1 = (Limit_min_S1+Limit_max_S1)*0.5;
potless 22:8e4ace42e4f5 419 servo2 = (Limit_min_S2+Limit_max_S2)*0.5;
potless 22:8e4ace42e4f5 420 wait(4);
POTLESS_2 20:bb8d2cea2076 421
POTLESS_2 19:31ac20c07bb2 422 //Mesure du delta consigne / feedback
potless 22:8e4ace42e4f5 423 Delta_FB_1 = abs(remap(FeedBack1, Limit_min_S1, Limit_max_S1, 0, 100)-50);
POTLESS_2 20:bb8d2cea2076 424 Delta_FB_2 = abs(remap(FeedBack2, Limit_max_S2, Limit_min_S2, 0, 100) - 50);
POTLESS_2 20:bb8d2cea2076 425
POTLESS_2 19:31ac20c07bb2 426 DEBUG(" Delta Servo 1 = %f\n", Delta_FB_1);
POTLESS_2 19:31ac20c07bb2 427 DEBUG(" Delta Servo 2 = %f\n", Delta_FB_2);
POTLESS_2 19:31ac20c07bb2 428
potless 22:8e4ace42e4f5 429 if(Delta_FB_1 > 10 || Delta_FB_2 > 10) DEBUG(" Delta Servos non satisfaisant...");
POTLESS_2 19:31ac20c07bb2 430 }
POTLESS_2 19:31ac20c07bb2 431
POTLESS_2 19:31ac20c07bb2 432 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 433 //// Fonction d'affichage de tout dans le moniteur série ou le traceur ////
POTLESS_2 19:31ac20c07bb2 434 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 435
POTLESS_2 19:31ac20c07bb2 436 void Debug_Complet()
POTLESS_2 19:31ac20c07bb2 437 {
POTLESS_2 20:bb8d2cea2076 438 //RTC
POTLESS_2 20:bb8d2cea2076 439 seconds = time(NULL);
POTLESS_2 19:31ac20c07bb2 440
POTLESS_2 19:31ac20c07bb2 441 DEBUG(" Date / Heure = %s\r\n", ctime(&seconds));
POTLESS_2 19:31ac20c07bb2 442
POTLESS_2 19:31ac20c07bb2 443 //Retour capteurs
POTLESS_2 19:31ac20c07bb2 444 DEBUG(" CO2 = %d\r\n" , co2);
POTLESS_2 19:31ac20c07bb2 445 DEBUG(" Humidite = %f\r\n" , Humi);
POTLESS_2 19:31ac20c07bb2 446 DEBUG(" Temperature = %f\r\n" ,Temp1);
POTLESS_2 19:31ac20c07bb2 447 //P / T sur MS5803
POTLESS_2 19:31ac20c07bb2 448 DEBUG(" Pression = %f\r\n", pression);
POTLESS_2 19:31ac20c07bb2 449 DEBUG(" Temperature = %f\r\n", Temp2);
POTLESS_2 19:31ac20c07bb2 450 //PPO2 sur ADS1015
POTLESS_2 19:31ac20c07bb2 451 DEBUG(" PPO2 = %d\r\n", ppO2);
POTLESS_2 19:31ac20c07bb2 452 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 453
POTLESS_2 19:31ac20c07bb2 454 //Retour position des servos
POTLESS_2 19:31ac20c07bb2 455 DEBUG(" FeedBack 1 = %3.2f%%\n", Servo1_POS);
POTLESS_2 19:31ac20c07bb2 456 DEBUG(" FeedBack 2 = %3.2f%%\n", Servo2_POS);
POTLESS_2 20:bb8d2cea2076 457 DEBUG("\r\n", "");
POTLESS_2 19:31ac20c07bb2 458
POTLESS_2 19:31ac20c07bb2 459 //Traceur
POTLESS_2 19:31ac20c07bb2 460 TRACE("%d" , co2);
POTLESS_2 19:31ac20c07bb2 461 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 462 TRACE("%d" , ppO2);
POTLESS_2 19:31ac20c07bb2 463 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 464 TRACE("%f" , Humi);
POTLESS_2 19:31ac20c07bb2 465 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 466 TRACE("%f" , Temp1);
POTLESS_2 19:31ac20c07bb2 467 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 468 TRACE("%f" , Temp2);
POTLESS_2 19:31ac20c07bb2 469 TRACE(", ");
POTLESS_2 19:31ac20c07bb2 470 TRACE("%f" , pression);
POTLESS_2 19:31ac20c07bb2 471 TRACE("\r\n");
POTLESS_2 19:31ac20c07bb2 472 }
POTLESS_2 19:31ac20c07bb2 473
POTLESS_2 19:31ac20c07bb2 474 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 475 /// PAGE tft 1 //
POTLESS_2 21:28a3f60b4bc2 476 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 477
POTLESS_2 21:28a3f60b4bc2 478 void tft_page_1()
POTLESS_2 21:28a3f60b4bc2 479 {
POTLESS_2 21:28a3f60b4bc2 480 FLAG_PAGE_2 = false;
POTLESS_2 21:28a3f60b4bc2 481 FLAG_PAGE_1 = true;
POTLESS_2 21:28a3f60b4bc2 482
POTLESS_2 21:28a3f60b4bc2 483 //tft.clearScreen(BLACK);
POTLESS_2 21:28a3f60b4bc2 484
POTLESS_2 21:28a3f60b4bc2 485 if (!bmpReadHeader()) {
POTLESS_2 21:28a3f60b4bc2 486 return;
POTLESS_2 21:28a3f60b4bc2 487 }
POTLESS_2 21:28a3f60b4bc2 488
POTLESS_2 21:28a3f60b4bc2 489 drawBmpFromFlash(30, 2);
POTLESS_2 21:28a3f60b4bc2 490
POTLESS_2 21:28a3f60b4bc2 491 tft.drawString(5,35, "CO2 ");
POTLESS_2 21:28a3f60b4bc2 492 tft.drawString(90,35, " ppm");
POTLESS_2 21:28a3f60b4bc2 493
POTLESS_2 21:28a3f60b4bc2 494 tft.drawString(5,55, "ppO2 ");
POTLESS_2 21:28a3f60b4bc2 495 tft.drawString(90,55, " mb");
POTLESS_2 21:28a3f60b4bc2 496
POTLESS_2 21:28a3f60b4bc2 497 tft.drawString(5,75, "T_1 ");
POTLESS_2 21:28a3f60b4bc2 498 tft.drawString(90,75, " C");
POTLESS_2 21:28a3f60b4bc2 499
POTLESS_2 21:28a3f60b4bc2 500 tft.drawString(5,95, "T_2 ");
POTLESS_2 21:28a3f60b4bc2 501 tft.drawString(90,95, " C");
POTLESS_2 21:28a3f60b4bc2 502
POTLESS_2 21:28a3f60b4bc2 503 tft.drawString(5,115, "Hum ");
POTLESS_2 21:28a3f60b4bc2 504 tft.drawString(90,115, " %");
POTLESS_2 21:28a3f60b4bc2 505
POTLESS_2 21:28a3f60b4bc2 506 tft.drawString(5,135, "P ");
POTLESS_2 21:28a3f60b4bc2 507 tft.drawString(90,135, " m");
POTLESS_2 21:28a3f60b4bc2 508
POTLESS_2 21:28a3f60b4bc2 509 tft.drawRectangle(0,0,126,32, WHITE);
POTLESS_2 21:28a3f60b4bc2 510 tft.drawRectangle(0,32,126,52, WHITE);
POTLESS_2 21:28a3f60b4bc2 511 tft.drawRectangle(0,52,126,72, WHITE);
POTLESS_2 21:28a3f60b4bc2 512 tft.drawRectangle(0,72,126,92, WHITE);
POTLESS_2 21:28a3f60b4bc2 513 tft.drawRectangle(0,92,126,112, WHITE);
POTLESS_2 21:28a3f60b4bc2 514 tft.drawRectangle(0,112,126,132, WHITE);
POTLESS_2 21:28a3f60b4bc2 515 tft.drawRectangle(0,132,126,152, WHITE);
POTLESS_2 21:28a3f60b4bc2 516
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 /// PAGE tft 2 //
POTLESS_2 21:28a3f60b4bc2 522 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 21:28a3f60b4bc2 523
POTLESS_2 21:28a3f60b4bc2 524 void tft_page_2()
POTLESS_2 21:28a3f60b4bc2 525 {
POTLESS_2 21:28a3f60b4bc2 526 FLAG_PAGE_1 = false;
POTLESS_2 21:28a3f60b4bc2 527 FLAG_PAGE_2 = true;
POTLESS_2 21:28a3f60b4bc2 528
POTLESS_2 21:28a3f60b4bc2 529 //tft.clearScreen(BLACK);
POTLESS_2 21:28a3f60b4bc2 530
POTLESS_2 21:28a3f60b4bc2 531 if (!bmpReadHeader()) {
POTLESS_2 21:28a3f60b4bc2 532 return;
POTLESS_2 21:28a3f60b4bc2 533 }
POTLESS_2 21:28a3f60b4bc2 534
POTLESS_2 21:28a3f60b4bc2 535 drawBmpFromFlash(30, 2);
POTLESS_2 21:28a3f60b4bc2 536
POTLESS_2 21:28a3f60b4bc2 537 tft.drawString(5,35, "CO2 ");
POTLESS_2 21:28a3f60b4bc2 538 tft.drawString(90,35, " ppm");
POTLESS_2 21:28a3f60b4bc2 539
POTLESS_2 21:28a3f60b4bc2 540 tft.drawRectangle(0,0,126,32, WHITE);
POTLESS_2 21:28a3f60b4bc2 541 tft.drawRectangle(0,32,126,52, WHITE);
POTLESS_2 21:28a3f60b4bc2 542 }
POTLESS_2 21:28a3f60b4bc2 543
POTLESS_2 21:28a3f60b4bc2 544 void pressed()
POTLESS_2 21:28a3f60b4bc2 545 {
POTLESS_2 21:28a3f60b4bc2 546 tft.clearScreen(BLACK);
POTLESS_2 21:28a3f60b4bc2 547
POTLESS_2 21:28a3f60b4bc2 548 if (FLAG_PAGE_1){
POTLESS_2 21:28a3f60b4bc2 549 tft_page_2();
POTLESS_2 21:28a3f60b4bc2 550 }
POTLESS_2 21:28a3f60b4bc2 551
POTLESS_2 21:28a3f60b4bc2 552 if (FLAG_PAGE_2){
POTLESS_2 21:28a3f60b4bc2 553 tft_page_1();
POTLESS_2 21:28a3f60b4bc2 554 }
POTLESS_2 21:28a3f60b4bc2 555 }
POTLESS_2 21:28a3f60b4bc2 556
POTLESS_2 21:28a3f60b4bc2 557 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 558 /// fonction initialisation //
POTLESS_2 19:31ac20c07bb2 559 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 560
POTLESS_2 19:31ac20c07bb2 561 void setup()
POTLESS_2 19:31ac20c07bb2 562 {
POTLESS_2 19:31ac20c07bb2 563 wait(2);
POTLESS_2 21:28a3f60b4bc2 564
POTLESS_2 19:31ac20c07bb2 565 //Réglage de l'heure
POTLESS_2 20:bb8d2cea2076 566 //SetTime();
POTLESS_2 19:31ac20c07bb2 567
POTLESS_2 19:31ac20c07bb2 568 //Calibration des limites des servos pour remapper les feedback
potless 22:8e4ace42e4f5 569 Calibration_servo();
potless 22:8e4ace42e4f5 570 //servo1.period(0.001); // a mettre si pas de calib
potless 22:8e4ace42e4f5 571 //servo2.period(0.001); // a mettre si pas de calib
POTLESS_2 19:31ac20c07bb2 572
POTLESS_2 21:28a3f60b4bc2 573 //Démarrage de l'écran
POTLESS_2 21:28a3f60b4bc2 574 DEBUG("Initialisation TFT\r\n");
POTLESS_2 21:28a3f60b4bc2 575 tft.init();
POTLESS_2 21:28a3f60b4bc2 576 tft_page_1();
POTLESS_2 21:28a3f60b4bc2 577
POTLESS_2 19:31ac20c07bb2 578 //Initialisation du Data log
POTLESS_2 19:31ac20c07bb2 579 if (NEED_SD_DATA_LOG == 1) init_DATALOG();
POTLESS_2 19:31ac20c07bb2 580
POTLESS_2 19:31ac20c07bb2 581 //Initialisation capteurs
POTLESS_2 19:31ac20c07bb2 582 arnsrs.Sensors_INIT(false, 5, SPOOLING, DIGI_FILTER32, CALIB_AIR);
POTLESS_2 19:31ac20c07bb2 583 }
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 /// procédure principale ///
POTLESS_2 19:31ac20c07bb2 590 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 591
POTLESS_2 19:31ac20c07bb2 592 int main()
POTLESS_2 19:31ac20c07bb2 593 {
POTLESS_2 19:31ac20c07bb2 594 setup();
POTLESS_2 14:e6686a44db84 595
POTLESS_2 21:28a3f60b4bc2 596 //interruption sur le boutton user pour changer de page
POTLESS_2 21:28a3f60b4bc2 597 mybutton.fall(&pressed);
POTLESS_2 21:28a3f60b4bc2 598
POTLESS_2 21:28a3f60b4bc2 599 //Commande éventuelle pour les servos
POTLESS_2 21:28a3f60b4bc2 600 serialMonit.attach(&callbackServo, Serial::RxIrq);
POTLESS_2 21:28a3f60b4bc2 601
POTLESS_2 4:d84250f67dec 602 while (1) {
POTLESS_2 5:e1d0dc7940a6 603
POTLESS_2 4:d84250f67dec 604 //CO2 / H / T sur Cozir
POTLESS_2 6:1c2212891714 605 co2 = arnsrs.requestCO2();
POTLESS_2 6:1c2212891714 606 Humi = arnsrs.requestHUMI();
POTLESS_2 14:e6686a44db84 607 Temp1 = arnsrs.requestTEMP();
POTLESS_2 14:e6686a44db84 608
POTLESS_2 6:1c2212891714 609 //P / T sur MS5803_14BA
POTLESS_2 5:e1d0dc7940a6 610 pression = arnsrs.requestPress();
POTLESS_2 5:e1d0dc7940a6 611 Temp2 = arnsrs.requestTemp();
POTLESS_2 5:e1d0dc7940a6 612
POTLESS_2 5:e1d0dc7940a6 613 //PPO2 sur ADS1015
POTLESS_2 8:e864edfe656e 614 ppO2 = arnsrs.requestPpO2(false);
POTLESS_2 5:e1d0dc7940a6 615
POTLESS_2 19:31ac20c07bb2 616 //Retour position des servos
potless 22:8e4ace42e4f5 617 Servo1_POS = 1-FeedBack1;//remap(FeedBack1, Limit_max_S1, Limit_min_S1, 0, 100);
potless 22:8e4ace42e4f5 618 //Servo2_POS = remap(FeedBack2, Limit_max_S2, Limit_min_S2, 0, 100);
POTLESS_2 5:e1d0dc7940a6 619
POTLESS_2 19:31ac20c07bb2 620 //Debug
POTLESS_2 19:31ac20c07bb2 621 Debug_Complet();
POTLESS_2 19:31ac20c07bb2 622
POTLESS_2 7:c5a5d8f678ff 623 //Data LOG
POTLESS_2 15:c9205e490740 624 if (NEED_SD_DATA_LOG == 1) DATA_LOG();
POTLESS_2 19:31ac20c07bb2 625
POTLESS_2 17:6e0c4c0e0fe2 626 //En accord avec app Android
POTLESS_2 19:31ac20c07bb2 627 build_send_Message_int("t", co2, ppO2);
POTLESS_2 19:31ac20c07bb2 628 build_send_Message_float("u", Temp1, Temp2);
POTLESS_2 19:31ac20c07bb2 629 build_send_Message_float("v", Humi, pression);
POTLESS_2 21:28a3f60b4bc2 630 build_send_Message_float("f", Servo1_POS, Servo2_POS);
POTLESS_2 21:28a3f60b4bc2 631
potless 22:8e4ace42e4f5 632 if (indexCommande>0) Servo_USB(commande_servo);
POTLESS_2 21:28a3f60b4bc2 633
POTLESS_2 21:28a3f60b4bc2 634 if(FLAG_PAGE_1) {
POTLESS_2 21:28a3f60b4bc2 635 tft.drawNumber(65,35,co2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 636 tft.drawNumber(65,55,ppO2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 637 tft.drawNumber(65,75,Temp1 ,3, false);
POTLESS_2 21:28a3f60b4bc2 638 tft.drawNumber(65,95,Temp2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 639 tft.drawNumber(65,115,Humi ,3, false);
POTLESS_2 21:28a3f60b4bc2 640 tft.drawNumber(65,135,pression ,3, false);
POTLESS_2 21:28a3f60b4bc2 641 }
POTLESS_2 21:28a3f60b4bc2 642
POTLESS_2 21:28a3f60b4bc2 643 if(FLAG_PAGE_2) {
POTLESS_2 21:28a3f60b4bc2 644 tft.drawNumber(65,35,co2 ,3, false);
POTLESS_2 21:28a3f60b4bc2 645 }
POTLESS_2 13:aa620707126d 646 }
POTLESS_2 4:d84250f67dec 647 }
POTLESS_2 19:31ac20c07bb2 648
POTLESS_2 19:31ac20c07bb2 649 ////////////////////////////////////////////////////////////////////////////////
POTLESS_2 19:31ac20c07bb2 650 ////////////////////////////////////////////////////////////////////////////////