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