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