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@22:8e4ace42e4f5, 2017-05-19 (annotated)
- 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?
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 | 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 | //////////////////////////////////////////////////////////////////////////////// |