avant le lab
Dependencies: X_NUCLEO_6180XA1 mbed
Fork of 247-436-M1-S1-LAB-1 by
main.cpp@1:90cc91745ff7, 2018-02-02 (annotated)
- Committer:
- YROY2004
- Date:
- Fri Feb 02 10:43:21 2018 +0000
- Revision:
- 1:90cc91745ff7
- Parent:
- 0:37eb67c8ebd0
pour le lab
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
YROY2004 | 0:37eb67c8ebd0 | 1 | #include "mbed.h" |
YROY2004 | 1:90cc91745ff7 | 2 | #include "XNucleo6180XA1.h" |
YROY2004 | 1:90cc91745ff7 | 3 | #include <string.h> |
YROY2004 | 1:90cc91745ff7 | 4 | #include <stdlib.h> |
YROY2004 | 1:90cc91745ff7 | 5 | #include <stdio.h> |
YROY2004 | 1:90cc91745ff7 | 6 | #include <assert.h> |
YROY2004 | 1:90cc91745ff7 | 7 | |
YROY2004 | 0:37eb67c8ebd0 | 8 | //options de compilation |
YROY2004 | 0:37eb67c8ebd0 | 9 | //#define TEST |
YROY2004 | 0:37eb67c8ebd0 | 10 | |
YROY2004 | 0:37eb67c8ebd0 | 11 | //intégration |
YROY2004 | 0:37eb67c8ebd0 | 12 | // représentation |
YROY2004 | 0:37eb67c8ebd0 | 13 | // G: gauche, D: droit, H: haut, B: bas |
YROY2004 | 0:37eb67c8ebd0 | 14 | // E: écran, T: touch |
YROY2004 | 0:37eb67c8ebd0 | 15 | // Ecran: |
YROY2004 | 0:37eb67c8ebd0 | 16 | // (XE_G,YE_H) ___ (XE_D,YE_H) |
YROY2004 | 0:37eb67c8ebd0 | 17 | // | | |
YROY2004 | 0:37eb67c8ebd0 | 18 | // | | |
YROY2004 | 0:37eb67c8ebd0 | 19 | // (XE_G,YE_B) |___| (XE_G,YE_B) |
YROY2004 | 0:37eb67c8ebd0 | 20 | // |
YROY2004 | 0:37eb67c8ebd0 | 21 | // représentation du touch |
YROY2004 | 0:37eb67c8ebd0 | 22 | // (XT_G,YT_H) ___ (XT_D,YT_H) |
YROY2004 | 0:37eb67c8ebd0 | 23 | // | | |
YROY2004 | 0:37eb67c8ebd0 | 24 | // | | |
YROY2004 | 0:37eb67c8ebd0 | 25 | // (XT_G,YT_B) |___| (XT_G,YT_B) |
YROY2004 | 0:37eb67c8ebd0 | 26 | |
YROY2004 | 0:37eb67c8ebd0 | 27 | // équations pour conversion |
YROY2004 | 0:37eb67c8ebd0 | 28 | // XT: x touch lu, YT: y touch lu, XE: x ecran, YE: y ecran |
YROY2004 | 0:37eb67c8ebd0 | 29 | // XE = (XE_D - XE_G)/(XT_D - XT_G)*(XT - XT_G) + XE_G |
YROY2004 | 0:37eb67c8ebd0 | 30 | // YE = (YE_H - YE_B)/(YT_H - YT_B)*(YT - YT_G) + YE_G |
YROY2004 | 0:37eb67c8ebd0 | 31 | |
YROY2004 | 0:37eb67c8ebd0 | 32 | // l'application présente 3 boutons et une surface de dessin |
YROY2004 | 0:37eb67c8ebd0 | 33 | // bouton noir: effacer |
YROY2004 | 0:37eb67c8ebd0 | 34 | // bouton rouge: dessiner en rouge |
YROY2004 | 0:37eb67c8ebd0 | 35 | // bouton blanc: dessiner en blanc |
YROY2004 | 0:37eb67c8ebd0 | 36 | |
YROY2004 | 0:37eb67c8ebd0 | 37 | //touchscreen |
YROY2004 | 0:37eb67c8ebd0 | 38 | #define IDLE 1 |
YROY2004 | 0:37eb67c8ebd0 | 39 | #define ACTIVE 0 |
YROY2004 | 0:37eb67c8ebd0 | 40 | #define COMMAND 0 |
YROY2004 | 0:37eb67c8ebd0 | 41 | #define DATA 1 |
YROY2004 | 0:37eb67c8ebd0 | 42 | |
YROY2004 | 0:37eb67c8ebd0 | 43 | #define YP A3 |
YROY2004 | 0:37eb67c8ebd0 | 44 | #define XM A2 |
YROY2004 | 0:37eb67c8ebd0 | 45 | #define YM D9 |
YROY2004 | 0:37eb67c8ebd0 | 46 | #define XP D8 |
YROY2004 | 0:37eb67c8ebd0 | 47 | |
YROY2004 | 0:37eb67c8ebd0 | 48 | #define TOUCH_SEUIL_HAUT 3000 |
YROY2004 | 0:37eb67c8ebd0 | 49 | #define TOUCH_SEUIL_BAS 16 |
YROY2004 | 0:37eb67c8ebd0 | 50 | |
YROY2004 | 0:37eb67c8ebd0 | 51 | |
YROY2004 | 0:37eb67c8ebd0 | 52 | #define TFTWIDTH 240 |
YROY2004 | 0:37eb67c8ebd0 | 53 | #define TFTHEIGHT 320 |
YROY2004 | 0:37eb67c8ebd0 | 54 | |
YROY2004 | 0:37eb67c8ebd0 | 55 | #define LCD_CS A3 |
YROY2004 | 0:37eb67c8ebd0 | 56 | #define LCD_CD A2 |
YROY2004 | 0:37eb67c8ebd0 | 57 | #define LCD_WR A1 |
YROY2004 | 0:37eb67c8ebd0 | 58 | #define LCD_RD A0 |
YROY2004 | 0:37eb67c8ebd0 | 59 | #define LCD_RESET A4 |
YROY2004 | 0:37eb67c8ebd0 | 60 | |
YROY2004 | 0:37eb67c8ebd0 | 61 | #define TFT_NORTH SPFD5408_MADCTL_MY | SPFD5408_MADCTL_BGR |
YROY2004 | 0:37eb67c8ebd0 | 62 | |
YROY2004 | 0:37eb67c8ebd0 | 63 | #define BLACK 0x0000 |
YROY2004 | 0:37eb67c8ebd0 | 64 | #define BLUE 0x001F |
YROY2004 | 0:37eb67c8ebd0 | 65 | #define RED 0xF800 |
YROY2004 | 0:37eb67c8ebd0 | 66 | #define GREEN 0x07E0 |
YROY2004 | 0:37eb67c8ebd0 | 67 | #define CYAN 0x07FF |
YROY2004 | 0:37eb67c8ebd0 | 68 | #define MAGENTA 0xF81F |
YROY2004 | 0:37eb67c8ebd0 | 69 | #define YELLOW 0xFFE0 |
YROY2004 | 0:37eb67c8ebd0 | 70 | #define WHITE 0xFFFF |
YROY2004 | 0:37eb67c8ebd0 | 71 | |
YROY2004 | 0:37eb67c8ebd0 | 72 | #define SPFD5408_SOFTRESET 0x01 |
YROY2004 | 0:37eb67c8ebd0 | 73 | #define SPFD5408_SLEEPOUT 0x11 |
YROY2004 | 0:37eb67c8ebd0 | 74 | |
YROY2004 | 0:37eb67c8ebd0 | 75 | #define SPFD5408_DISPLAYON 0x29 |
YROY2004 | 0:37eb67c8ebd0 | 76 | #define SPFD5408_COLADDRSET 0x2A |
YROY2004 | 0:37eb67c8ebd0 | 77 | #define SPFD5408_PAGEADDRSET 0x2B |
YROY2004 | 0:37eb67c8ebd0 | 78 | #define SPFD5408_MEMORYWRITE 0x2C |
YROY2004 | 0:37eb67c8ebd0 | 79 | #define SPFD5408_PIXELFORMAT 0x3A |
YROY2004 | 0:37eb67c8ebd0 | 80 | #define SPFD5408_FRAMECONTROL 0xB1 |
YROY2004 | 0:37eb67c8ebd0 | 81 | #define SPFD5408_MEMCONTROL 0x36 |
YROY2004 | 0:37eb67c8ebd0 | 82 | #define SPFD5408_MADCTL_MY 0x80 |
YROY2004 | 0:37eb67c8ebd0 | 83 | #define SPFD5408_MADCTL_BGR 0x08 |
YROY2004 | 0:37eb67c8ebd0 | 84 | |
YROY2004 | 0:37eb67c8ebd0 | 85 | #define IDLE 1 |
YROY2004 | 0:37eb67c8ebd0 | 86 | #define ACTIVE 0 |
YROY2004 | 0:37eb67c8ebd0 | 87 | #define COMMAND 0 |
YROY2004 | 0:37eb67c8ebd0 | 88 | #define DATA 1 |
YROY2004 | 0:37eb67c8ebd0 | 89 | |
YROY2004 | 0:37eb67c8ebd0 | 90 | #define TEMPS 40 |
YROY2004 | 0:37eb67c8ebd0 | 91 | |
YROY2004 | 1:90cc91745ff7 | 92 | //VL6180X |
YROY2004 | 1:90cc91745ff7 | 93 | #define VL6180X_I2C_SDA D14 |
YROY2004 | 1:90cc91745ff7 | 94 | #define VL6180X_I2C_SCL D15 |
YROY2004 | 1:90cc91745ff7 | 95 | |
YROY2004 | 1:90cc91745ff7 | 96 | #define VL6180X_I2C_SDA_MODE PullUp |
YROY2004 | 1:90cc91745ff7 | 97 | #define VL6180X_I2C_SCL_MODE PullUp |
YROY2004 | 1:90cc91745ff7 | 98 | |
YROY2004 | 0:37eb67c8ebd0 | 99 | |
YROY2004 | 0:37eb67c8ebd0 | 100 | //integration |
YROY2004 | 0:37eb67c8ebd0 | 101 | |
YROY2004 | 0:37eb67c8ebd0 | 102 | #define XE_G 0 |
YROY2004 | 0:37eb67c8ebd0 | 103 | #define XE_D 240 |
YROY2004 | 0:37eb67c8ebd0 | 104 | #define YE_H 0 |
YROY2004 | 0:37eb67c8ebd0 | 105 | #define YE_B 320 |
YROY2004 | 0:37eb67c8ebd0 | 106 | #define XT_G 3700 |
YROY2004 | 0:37eb67c8ebd0 | 107 | #define XT_D 600 |
YROY2004 | 0:37eb67c8ebd0 | 108 | #define YT_H 600 |
YROY2004 | 0:37eb67c8ebd0 | 109 | #define YT_B 3700 |
YROY2004 | 0:37eb67c8ebd0 | 110 | |
YROY2004 | 1:90cc91745ff7 | 111 | #define MODE_COULEUR_CONSTANTE 0 |
YROY2004 | 1:90cc91745ff7 | 112 | #define MODE_COULEUR_VARIABLE 1 |
YROY2004 | 0:37eb67c8ebd0 | 113 | //definitions de variables |
YROY2004 | 0:37eb67c8ebd0 | 114 | //touchscreen |
YROY2004 | 0:37eb67c8ebd0 | 115 | uint16_t x; |
YROY2004 | 0:37eb67c8ebd0 | 116 | uint16_t y; |
YROY2004 | 0:37eb67c8ebd0 | 117 | uint16_t z; |
YROY2004 | 0:37eb67c8ebd0 | 118 | |
YROY2004 | 0:37eb67c8ebd0 | 119 | //tftspfd5408 |
YROY2004 | 0:37eb67c8ebd0 | 120 | DigitalOut pinRD(LCD_RD); //PA_0; |
YROY2004 | 0:37eb67c8ebd0 | 121 | DigitalOut pinWR(LCD_WR); //PA_1; |
YROY2004 | 0:37eb67c8ebd0 | 122 | DigitalOut pinCD(LCD_CD); //PA_4; |
YROY2004 | 0:37eb67c8ebd0 | 123 | DigitalOut pinCS(LCD_CS); //PB_0; |
YROY2004 | 0:37eb67c8ebd0 | 124 | DigitalOut pinReset(LCD_RESET); //PC_1; |
YROY2004 | 0:37eb67c8ebd0 | 125 | |
YROY2004 | 1:90cc91745ff7 | 126 | //VL6180X |
YROY2004 | 1:90cc91745ff7 | 127 | DigitalOut enableVL6180X(D12); |
YROY2004 | 1:90cc91745ff7 | 128 | static XNucleo6180XA1 *board = NULL; |
YROY2004 | 1:90cc91745ff7 | 129 | uint32_t dist; |
YROY2004 | 1:90cc91745ff7 | 130 | |
YROY2004 | 1:90cc91745ff7 | 131 | |
YROY2004 | 0:37eb67c8ebd0 | 132 | //integration |
YROY2004 | 1:90cc91745ff7 | 133 | #ifdef TEST |
YROY2004 | 1:90cc91745ff7 | 134 | Serial pc(USBTX, USBRX, 9600); //SERIAL_TX, SERIAL_RX, 9600); |
YROY2004 | 1:90cc91745ff7 | 135 | #endif |
YROY2004 | 0:37eb67c8ebd0 | 136 | DigitalOut myled(LED1); |
YROY2004 | 0:37eb67c8ebd0 | 137 | uint16_t couleurVariable; |
YROY2004 | 0:37eb67c8ebd0 | 138 | uint16_t tableDeCouleur[]= |
YROY2004 | 0:37eb67c8ebd0 | 139 | { |
YROY2004 | 1:90cc91745ff7 | 140 | BLACK, RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA, WHITE |
YROY2004 | 0:37eb67c8ebd0 | 141 | }; |
YROY2004 | 0:37eb67c8ebd0 | 142 | |
YROY2004 | 0:37eb67c8ebd0 | 143 | |
YROY2004 | 0:37eb67c8ebd0 | 144 | //declarations de fonctions |
YROY2004 | 0:37eb67c8ebd0 | 145 | //touchscreen |
YROY2004 | 0:37eb67c8ebd0 | 146 | void restoreXY(void); |
YROY2004 | 0:37eb67c8ebd0 | 147 | uint16_t readTouchX(void); |
YROY2004 | 0:37eb67c8ebd0 | 148 | uint16_t readTouchY(void); |
YROY2004 | 0:37eb67c8ebd0 | 149 | uint16_t detectTouch(void); |
YROY2004 | 0:37eb67c8ebd0 | 150 | |
YROY2004 | 0:37eb67c8ebd0 | 151 | //tftspfd5408 |
YROY2004 | 0:37eb67c8ebd0 | 152 | void WriteCommand(uint8_t c); |
YROY2004 | 0:37eb67c8ebd0 | 153 | void WriteData(uint8_t d); |
YROY2004 | 0:37eb67c8ebd0 | 154 | void begin(void); |
YROY2004 | 0:37eb67c8ebd0 | 155 | void setAddrWindow(int x1, int y1, int x2, int y2); |
YROY2004 | 0:37eb67c8ebd0 | 156 | void fillRect(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h, uint16_t fillcolor); |
YROY2004 | 0:37eb67c8ebd0 | 157 | |
YROY2004 | 0:37eb67c8ebd0 | 158 | //definitions de fonctions |
YROY2004 | 0:37eb67c8ebd0 | 159 | //touchscreen |
YROY2004 | 0:37eb67c8ebd0 | 160 | void restoreXY(void) |
YROY2004 | 0:37eb67c8ebd0 | 161 | { |
YROY2004 | 0:37eb67c8ebd0 | 162 | DigitalOut pinXP(XP); |
YROY2004 | 0:37eb67c8ebd0 | 163 | DigitalOut pinXM(XM); |
YROY2004 | 0:37eb67c8ebd0 | 164 | DigitalOut pinYP(YP); |
YROY2004 | 0:37eb67c8ebd0 | 165 | DigitalOut pinYM(YM); |
YROY2004 | 0:37eb67c8ebd0 | 166 | |
YROY2004 | 0:37eb67c8ebd0 | 167 | pinXP = 1; |
YROY2004 | 0:37eb67c8ebd0 | 168 | pinXM = 1; |
YROY2004 | 0:37eb67c8ebd0 | 169 | pinYP = 1; |
YROY2004 | 0:37eb67c8ebd0 | 170 | pinYM = 1; |
YROY2004 | 0:37eb67c8ebd0 | 171 | wait_ms(1); |
YROY2004 | 0:37eb67c8ebd0 | 172 | } |
YROY2004 | 0:37eb67c8ebd0 | 173 | |
YROY2004 | 0:37eb67c8ebd0 | 174 | uint16_t readTouchX(void) |
YROY2004 | 0:37eb67c8ebd0 | 175 | { |
YROY2004 | 0:37eb67c8ebd0 | 176 | uint16_t value; |
YROY2004 | 0:37eb67c8ebd0 | 177 | DigitalOut pinXP(XP); |
YROY2004 | 0:37eb67c8ebd0 | 178 | DigitalOut pinXM(XM); |
YROY2004 | 0:37eb67c8ebd0 | 179 | AnalogIn pinYP(YP); |
YROY2004 | 0:37eb67c8ebd0 | 180 | DigitalIn pinYM(YM); |
YROY2004 | 0:37eb67c8ebd0 | 181 | |
YROY2004 | 0:37eb67c8ebd0 | 182 | pinXP = 0; |
YROY2004 | 0:37eb67c8ebd0 | 183 | pinXM = 1; |
YROY2004 | 0:37eb67c8ebd0 | 184 | pinYM.mode(OpenDrain); |
YROY2004 | 0:37eb67c8ebd0 | 185 | value = pinYP.read_u16() >> 4; |
YROY2004 | 0:37eb67c8ebd0 | 186 | restoreXY(); |
YROY2004 | 0:37eb67c8ebd0 | 187 | return value; |
YROY2004 | 0:37eb67c8ebd0 | 188 | } |
YROY2004 | 0:37eb67c8ebd0 | 189 | |
YROY2004 | 0:37eb67c8ebd0 | 190 | uint16_t readTouchY(void) |
YROY2004 | 0:37eb67c8ebd0 | 191 | { |
YROY2004 | 0:37eb67c8ebd0 | 192 | uint16_t value; |
YROY2004 | 0:37eb67c8ebd0 | 193 | DigitalIn pinXP(XP); |
YROY2004 | 0:37eb67c8ebd0 | 194 | AnalogIn pinXM(XM); |
YROY2004 | 0:37eb67c8ebd0 | 195 | DigitalOut pinYP(YP); |
YROY2004 | 0:37eb67c8ebd0 | 196 | DigitalOut pinYM(YM); |
YROY2004 | 0:37eb67c8ebd0 | 197 | |
YROY2004 | 0:37eb67c8ebd0 | 198 | pinYP = 1; |
YROY2004 | 0:37eb67c8ebd0 | 199 | pinYM = 0; |
YROY2004 | 0:37eb67c8ebd0 | 200 | pinXP.mode(OpenDrain); |
YROY2004 | 0:37eb67c8ebd0 | 201 | value = pinXM.read_u16() >> 4; |
YROY2004 | 0:37eb67c8ebd0 | 202 | restoreXY(); |
YROY2004 | 0:37eb67c8ebd0 | 203 | return value; |
YROY2004 | 0:37eb67c8ebd0 | 204 | } |
YROY2004 | 0:37eb67c8ebd0 | 205 | |
YROY2004 | 0:37eb67c8ebd0 | 206 | uint16_t detectTouch(void) |
YROY2004 | 0:37eb67c8ebd0 | 207 | { |
YROY2004 | 0:37eb67c8ebd0 | 208 | uint16_t firstValue; |
YROY2004 | 0:37eb67c8ebd0 | 209 | uint16_t secondValue; |
YROY2004 | 0:37eb67c8ebd0 | 210 | DigitalOut pinXP(XP); |
YROY2004 | 0:37eb67c8ebd0 | 211 | DigitalOut pinXM(XM); |
YROY2004 | 0:37eb67c8ebd0 | 212 | AnalogIn pinYP(YP); |
YROY2004 | 0:37eb67c8ebd0 | 213 | DigitalIn pinYM(YM); |
YROY2004 | 0:37eb67c8ebd0 | 214 | |
YROY2004 | 0:37eb67c8ebd0 | 215 | pinYM.mode(OpenDrain); |
YROY2004 | 0:37eb67c8ebd0 | 216 | pinXP = 1; |
YROY2004 | 0:37eb67c8ebd0 | 217 | pinXM = 0; |
YROY2004 | 0:37eb67c8ebd0 | 218 | firstValue = pinYP.read_u16() >> 4; |
YROY2004 | 0:37eb67c8ebd0 | 219 | |
YROY2004 | 0:37eb67c8ebd0 | 220 | pinXP = 0; |
YROY2004 | 0:37eb67c8ebd0 | 221 | pinXM = 1; |
YROY2004 | 0:37eb67c8ebd0 | 222 | secondValue = pinYP.read_u16() >> 4; |
YROY2004 | 0:37eb67c8ebd0 | 223 | |
YROY2004 | 0:37eb67c8ebd0 | 224 | restoreXY(); |
YROY2004 | 0:37eb67c8ebd0 | 225 | |
YROY2004 | 0:37eb67c8ebd0 | 226 | if (secondValue > firstValue) |
YROY2004 | 0:37eb67c8ebd0 | 227 | { |
YROY2004 | 0:37eb67c8ebd0 | 228 | return firstValue; |
YROY2004 | 0:37eb67c8ebd0 | 229 | } |
YROY2004 | 0:37eb67c8ebd0 | 230 | return secondValue; |
YROY2004 | 0:37eb67c8ebd0 | 231 | } |
YROY2004 | 0:37eb67c8ebd0 | 232 | |
YROY2004 | 0:37eb67c8ebd0 | 233 | //tftspfd5408 |
YROY2004 | 0:37eb67c8ebd0 | 234 | void WriteCommand(uint8_t c) |
YROY2004 | 0:37eb67c8ebd0 | 235 | { |
YROY2004 | 0:37eb67c8ebd0 | 236 | BusInOut portTFT(D8, D9, D2, D3, D4, D5, D6, D7); |
YROY2004 | 0:37eb67c8ebd0 | 237 | portTFT.output(); |
YROY2004 | 0:37eb67c8ebd0 | 238 | pinCD = COMMAND; |
YROY2004 | 0:37eb67c8ebd0 | 239 | pinWR = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 240 | portTFT = c; |
YROY2004 | 0:37eb67c8ebd0 | 241 | pinWR = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 242 | } |
YROY2004 | 0:37eb67c8ebd0 | 243 | |
YROY2004 | 0:37eb67c8ebd0 | 244 | void WriteData(uint8_t d) |
YROY2004 | 0:37eb67c8ebd0 | 245 | { |
YROY2004 | 0:37eb67c8ebd0 | 246 | BusInOut portTFT(D8, D9, D2, D3, D4, D5, D6, D7); |
YROY2004 | 0:37eb67c8ebd0 | 247 | portTFT.output(); |
YROY2004 | 0:37eb67c8ebd0 | 248 | pinCD = DATA; |
YROY2004 | 0:37eb67c8ebd0 | 249 | pinWR = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 250 | portTFT = d; |
YROY2004 | 0:37eb67c8ebd0 | 251 | pinWR = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 252 | } |
YROY2004 | 0:37eb67c8ebd0 | 253 | |
YROY2004 | 0:37eb67c8ebd0 | 254 | void begin(void) |
YROY2004 | 0:37eb67c8ebd0 | 255 | { |
YROY2004 | 0:37eb67c8ebd0 | 256 | pinCS = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 257 | pinCD = DATA; |
YROY2004 | 0:37eb67c8ebd0 | 258 | pinWR = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 259 | pinRD = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 260 | |
YROY2004 | 0:37eb67c8ebd0 | 261 | pinReset = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 262 | wait_ms(100); |
YROY2004 | 0:37eb67c8ebd0 | 263 | pinReset = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 264 | wait_ms(100); |
YROY2004 | 0:37eb67c8ebd0 | 265 | pinCS = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 266 | |
YROY2004 | 0:37eb67c8ebd0 | 267 | WriteCommand(SPFD5408_SOFTRESET); |
YROY2004 | 0:37eb67c8ebd0 | 268 | WriteData(0); |
YROY2004 | 0:37eb67c8ebd0 | 269 | wait_ms(50); |
YROY2004 | 0:37eb67c8ebd0 | 270 | |
YROY2004 | 0:37eb67c8ebd0 | 271 | WriteCommand(SPFD5408_MEMCONTROL); |
YROY2004 | 0:37eb67c8ebd0 | 272 | WriteData(TFT_NORTH); //(SPFD5408_MADCTL_MY | SPFD5408_MADCTL_BGR); |
YROY2004 | 0:37eb67c8ebd0 | 273 | |
YROY2004 | 0:37eb67c8ebd0 | 274 | WriteCommand(SPFD5408_PIXELFORMAT); |
YROY2004 | 0:37eb67c8ebd0 | 275 | WriteData(0x55); |
YROY2004 | 0:37eb67c8ebd0 | 276 | |
YROY2004 | 0:37eb67c8ebd0 | 277 | WriteCommand(SPFD5408_FRAMECONTROL); |
YROY2004 | 0:37eb67c8ebd0 | 278 | WriteData(0x00); |
YROY2004 | 0:37eb67c8ebd0 | 279 | WriteData(0x1B); |
YROY2004 | 0:37eb67c8ebd0 | 280 | |
YROY2004 | 0:37eb67c8ebd0 | 281 | WriteCommand(SPFD5408_SLEEPOUT); |
YROY2004 | 0:37eb67c8ebd0 | 282 | WriteData(0); |
YROY2004 | 0:37eb67c8ebd0 | 283 | |
YROY2004 | 0:37eb67c8ebd0 | 284 | WriteCommand(SPFD5408_DISPLAYON); |
YROY2004 | 0:37eb67c8ebd0 | 285 | WriteData(0); |
YROY2004 | 0:37eb67c8ebd0 | 286 | } |
YROY2004 | 0:37eb67c8ebd0 | 287 | |
YROY2004 | 0:37eb67c8ebd0 | 288 | void setAddrWindow(int x1, int y1, int x2, int y2) { |
YROY2004 | 0:37eb67c8ebd0 | 289 | pinCS = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 290 | wait_us(TEMPS); |
YROY2004 | 0:37eb67c8ebd0 | 291 | WriteCommand(SPFD5408_COLADDRSET); |
YROY2004 | 0:37eb67c8ebd0 | 292 | WriteData(x1 >> 8); |
YROY2004 | 0:37eb67c8ebd0 | 293 | WriteData(x1); |
YROY2004 | 0:37eb67c8ebd0 | 294 | WriteData(x2 >> 8); |
YROY2004 | 0:37eb67c8ebd0 | 295 | WriteData(x2); |
YROY2004 | 0:37eb67c8ebd0 | 296 | wait_us(TEMPS); |
YROY2004 | 0:37eb67c8ebd0 | 297 | pinCS = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 298 | |
YROY2004 | 0:37eb67c8ebd0 | 299 | pinCS = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 300 | wait_us(TEMPS); |
YROY2004 | 0:37eb67c8ebd0 | 301 | WriteCommand(SPFD5408_PAGEADDRSET); |
YROY2004 | 0:37eb67c8ebd0 | 302 | WriteData(y1 >> 8); |
YROY2004 | 0:37eb67c8ebd0 | 303 | WriteData(y1); |
YROY2004 | 0:37eb67c8ebd0 | 304 | WriteData(y2 >> 8); |
YROY2004 | 0:37eb67c8ebd0 | 305 | WriteData(y2); |
YROY2004 | 0:37eb67c8ebd0 | 306 | pinCS = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 307 | } |
YROY2004 | 0:37eb67c8ebd0 | 308 | |
YROY2004 | 0:37eb67c8ebd0 | 309 | void fillRect(uint16_t x1, uint16_t y1, uint16_t w, uint16_t h, uint16_t fillcolor) |
YROY2004 | 0:37eb67c8ebd0 | 310 | { |
YROY2004 | 0:37eb67c8ebd0 | 311 | BusInOut portTFT(D8, D9, D2, D3, D4, D5, D6, D7); |
YROY2004 | 0:37eb67c8ebd0 | 312 | uint8_t hi, lo; |
YROY2004 | 0:37eb67c8ebd0 | 313 | uint16_t x2, y2; |
YROY2004 | 0:37eb67c8ebd0 | 314 | uint16_t i, j; |
YROY2004 | 0:37eb67c8ebd0 | 315 | |
YROY2004 | 0:37eb67c8ebd0 | 316 | portTFT.output(); |
YROY2004 | 0:37eb67c8ebd0 | 317 | |
YROY2004 | 0:37eb67c8ebd0 | 318 | x2 = x1 + w - 1; |
YROY2004 | 0:37eb67c8ebd0 | 319 | y2 = y1 + h - 1; |
YROY2004 | 0:37eb67c8ebd0 | 320 | setAddrWindow(x1, y1, x2, y2); |
YROY2004 | 0:37eb67c8ebd0 | 321 | |
YROY2004 | 0:37eb67c8ebd0 | 322 | hi = fillcolor >> 8; |
YROY2004 | 0:37eb67c8ebd0 | 323 | lo = fillcolor; |
YROY2004 | 0:37eb67c8ebd0 | 324 | |
YROY2004 | 0:37eb67c8ebd0 | 325 | pinCS = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 326 | |
YROY2004 | 0:37eb67c8ebd0 | 327 | WriteCommand(SPFD5408_MEMORYWRITE); |
YROY2004 | 0:37eb67c8ebd0 | 328 | pinCD = DATA; |
YROY2004 | 0:37eb67c8ebd0 | 329 | for (i = h; i > 0; i--) |
YROY2004 | 0:37eb67c8ebd0 | 330 | { |
YROY2004 | 0:37eb67c8ebd0 | 331 | for (j = w; j > 0; j--) |
YROY2004 | 0:37eb67c8ebd0 | 332 | |
YROY2004 | 0:37eb67c8ebd0 | 333 | { |
YROY2004 | 0:37eb67c8ebd0 | 334 | pinWR = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 335 | portTFT = hi; |
YROY2004 | 0:37eb67c8ebd0 | 336 | pinWR = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 337 | pinWR = ACTIVE; |
YROY2004 | 0:37eb67c8ebd0 | 338 | portTFT = lo; |
YROY2004 | 0:37eb67c8ebd0 | 339 | pinWR = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 340 | } |
YROY2004 | 0:37eb67c8ebd0 | 341 | } |
YROY2004 | 0:37eb67c8ebd0 | 342 | pinCS = IDLE; |
YROY2004 | 0:37eb67c8ebd0 | 343 | } |
YROY2004 | 0:37eb67c8ebd0 | 344 | |
YROY2004 | 0:37eb67c8ebd0 | 345 | //intégration |
YROY2004 | 0:37eb67c8ebd0 | 346 | |
YROY2004 | 0:37eb67c8ebd0 | 347 | int32_t conversion(int32_t x, int32_t x0, int32_t y0, int32_t x1, int32_t y1) |
YROY2004 | 0:37eb67c8ebd0 | 348 | { |
YROY2004 | 0:37eb67c8ebd0 | 349 | int32_t retour; |
YROY2004 | 0:37eb67c8ebd0 | 350 | int32_t limiteInferieure; |
YROY2004 | 0:37eb67c8ebd0 | 351 | int32_t limiteSuperieure; |
YROY2004 | 0:37eb67c8ebd0 | 352 | if (y0 < y1) |
YROY2004 | 0:37eb67c8ebd0 | 353 | { |
YROY2004 | 0:37eb67c8ebd0 | 354 | limiteInferieure = y0; |
YROY2004 | 0:37eb67c8ebd0 | 355 | limiteSuperieure = y1; |
YROY2004 | 0:37eb67c8ebd0 | 356 | } |
YROY2004 | 0:37eb67c8ebd0 | 357 | else |
YROY2004 | 0:37eb67c8ebd0 | 358 | { |
YROY2004 | 0:37eb67c8ebd0 | 359 | limiteInferieure = y1; |
YROY2004 | 0:37eb67c8ebd0 | 360 | limiteSuperieure = y0; |
YROY2004 | 0:37eb67c8ebd0 | 361 | } |
YROY2004 | 0:37eb67c8ebd0 | 362 | retour = (x - x0) * (y1 -y0) / (x1 -x0) + y0; |
YROY2004 | 0:37eb67c8ebd0 | 363 | |
YROY2004 | 0:37eb67c8ebd0 | 364 | if (retour < limiteInferieure) |
YROY2004 | 0:37eb67c8ebd0 | 365 | { |
YROY2004 | 0:37eb67c8ebd0 | 366 | return limiteInferieure; |
YROY2004 | 0:37eb67c8ebd0 | 367 | } |
YROY2004 | 0:37eb67c8ebd0 | 368 | if (retour > limiteSuperieure) |
YROY2004 | 0:37eb67c8ebd0 | 369 | { |
YROY2004 | 0:37eb67c8ebd0 | 370 | return limiteSuperieure; |
YROY2004 | 0:37eb67c8ebd0 | 371 | } |
YROY2004 | 0:37eb67c8ebd0 | 372 | return retour; |
YROY2004 | 0:37eb67c8ebd0 | 373 | }; |
YROY2004 | 0:37eb67c8ebd0 | 374 | |
YROY2004 | 0:37eb67c8ebd0 | 375 | uint16_t determineLaCouleur(void) |
YROY2004 | 0:37eb67c8ebd0 | 376 | { |
YROY2004 | 1:90cc91745ff7 | 377 | board->sensor_top->get_distance(&dist); |
YROY2004 | 1:90cc91745ff7 | 378 | if (dist > 210) //en millimetres |
YROY2004 | 1:90cc91745ff7 | 379 | { |
YROY2004 | 1:90cc91745ff7 | 380 | dist = 210; |
YROY2004 | 1:90cc91745ff7 | 381 | } |
YROY2004 | 1:90cc91745ff7 | 382 | // board->sensor_top->get_lux(&lux); |
YROY2004 | 1:90cc91745ff7 | 383 | |
YROY2004 | 1:90cc91745ff7 | 384 | return tableDeCouleur[(int)(dist/30)]; |
YROY2004 | 0:37eb67c8ebd0 | 385 | } |
YROY2004 | 0:37eb67c8ebd0 | 386 | |
YROY2004 | 0:37eb67c8ebd0 | 387 | int main() |
YROY2004 | 1:90cc91745ff7 | 388 | { |
YROY2004 | 1:90cc91745ff7 | 389 | //variables locales du touchscreen |
YROY2004 | 0:37eb67c8ebd0 | 390 | uint16_t couleur; |
YROY2004 | 1:90cc91745ff7 | 391 | |
YROY2004 | 1:90cc91745ff7 | 392 | //variables locales du tftspfd5408 |
YROY2004 | 1:90cc91745ff7 | 393 | |
YROY2004 | 1:90cc91745ff7 | 394 | //variables locales pour le VL6180X |
YROY2004 | 1:90cc91745ff7 | 395 | int status; |
YROY2004 | 1:90cc91745ff7 | 396 | uint32_t lux; |
YROY2004 | 1:90cc91745ff7 | 397 | |
YROY2004 | 1:90cc91745ff7 | 398 | DevI2C *device_i2c = new DevI2C(VL6180X_I2C_SDA, VL6180X_I2C_SCL); |
YROY2004 | 1:90cc91745ff7 | 399 | //variables locales pour l'integration |
YROY2004 | 1:90cc91745ff7 | 400 | uint32_t mode; |
YROY2004 | 1:90cc91745ff7 | 401 | |
YROY2004 | 0:37eb67c8ebd0 | 402 | //initialisation du touchscreen |
YROY2004 | 0:37eb67c8ebd0 | 403 | restoreXY(); |
YROY2004 | 0:37eb67c8ebd0 | 404 | |
YROY2004 | 0:37eb67c8ebd0 | 405 | //initialisation du tftspfd5408 |
YROY2004 | 0:37eb67c8ebd0 | 406 | begin(); |
YROY2004 | 0:37eb67c8ebd0 | 407 | |
YROY2004 | 1:90cc91745ff7 | 408 | //initialisation du VL6180X |
YROY2004 | 1:90cc91745ff7 | 409 | // printf ("Initialisation *********\n"); |
YROY2004 | 1:90cc91745ff7 | 410 | //yr |
YROY2004 | 1:90cc91745ff7 | 411 | // pin_mode(VL6180X_I2C_SDA, (PinMode)PullUp); |
YROY2004 | 1:90cc91745ff7 | 412 | // pin_mode(VL6180X_I2C_SCL, (PinMode)PullUp); |
YROY2004 | 1:90cc91745ff7 | 413 | |
YROY2004 | 1:90cc91745ff7 | 414 | enableVL6180X = 1; |
YROY2004 | 1:90cc91745ff7 | 415 | wait_ms(1); |
YROY2004 | 1:90cc91745ff7 | 416 | enableVL6180X = 0; |
YROY2004 | 1:90cc91745ff7 | 417 | wait_ms(1); |
YROY2004 | 1:90cc91745ff7 | 418 | enableVL6180X = 1; |
YROY2004 | 1:90cc91745ff7 | 419 | wait_ms(1); |
YROY2004 | 1:90cc91745ff7 | 420 | |
YROY2004 | 1:90cc91745ff7 | 421 | /* Creates the 6180XA1 expansion board singleton obj. */ |
YROY2004 | 1:90cc91745ff7 | 422 | board = XNucleo6180XA1::instance(device_i2c, D11, D10, D13, D2); |
YROY2004 | 1:90cc91745ff7 | 423 | |
YROY2004 | 1:90cc91745ff7 | 424 | /* Initializes the 6180XA1 expansion board with default values. */ |
YROY2004 | 1:90cc91745ff7 | 425 | status = board->init_board(); |
YROY2004 | 1:90cc91745ff7 | 426 | if (status) { |
YROY2004 | 1:90cc91745ff7 | 427 | printf("Failed to init board!\n\r"); |
YROY2004 | 1:90cc91745ff7 | 428 | return 0; |
YROY2004 | 1:90cc91745ff7 | 429 | } |
YROY2004 | 1:90cc91745ff7 | 430 | |
YROY2004 | 0:37eb67c8ebd0 | 431 | //intégration |
YROY2004 | 1:90cc91745ff7 | 432 | mode = MODE_COULEUR_CONSTANTE; |
YROY2004 | 0:37eb67c8ebd0 | 433 | couleur = RED; |
YROY2004 | 0:37eb67c8ebd0 | 434 | couleurVariable = BLUE; |
YROY2004 | 0:37eb67c8ebd0 | 435 | fillRect(0, 0, 240, 280, BLACK); //surface de dessin |
YROY2004 | 0:37eb67c8ebd0 | 436 | //bouton noir |
YROY2004 | 0:37eb67c8ebd0 | 437 | fillRect(0, 280, 80, 2, WHITE); // ligne horizontale haut |
YROY2004 | 0:37eb67c8ebd0 | 438 | fillRect(0, 282, 2, 38, WHITE); // ligne verticale gauche |
YROY2004 | 0:37eb67c8ebd0 | 439 | fillRect(79, 282, 1, 38, WHITE); // ligne verticale droite |
YROY2004 | 0:37eb67c8ebd0 | 440 | fillRect(2, 318, 77, 2, WHITE); //ligne horizontale bas |
YROY2004 | 0:37eb67c8ebd0 | 441 | fillRect(2, 282, 77, 36, BLACK); // centre noir |
YROY2004 | 0:37eb67c8ebd0 | 442 | //bouton rouge |
YROY2004 | 0:37eb67c8ebd0 | 443 | fillRect(80, 280, 80, 40, WHITE); // moins d'instructions mais plus long |
YROY2004 | 0:37eb67c8ebd0 | 444 | fillRect(81, 282, 78, 36, RED); // bouton rouge |
YROY2004 | 0:37eb67c8ebd0 | 445 | //bouton cyan |
YROY2004 | 0:37eb67c8ebd0 | 446 | fillRect(160, 280, 80, 40, WHITE); // moins d'instructions mais plus long |
YROY2004 | 0:37eb67c8ebd0 | 447 | fillRect(161, 282, 77, 36, BLUE); //bouton bleu |
YROY2004 | 0:37eb67c8ebd0 | 448 | //indicateur |
YROY2004 | 0:37eb67c8ebd0 | 449 | fillRect(81, 282, 10, 10, GREEN); //couleur rouge par défaut |
YROY2004 | 0:37eb67c8ebd0 | 450 | |
YROY2004 | 0:37eb67c8ebd0 | 451 | while(1) { |
YROY2004 | 1:90cc91745ff7 | 452 | |
YROY2004 | 1:90cc91745ff7 | 453 | #ifdef TEST |
YROY2004 | 1:90cc91745ff7 | 454 | printf ("Distance: %d, Lux: %d\n\r", dist, lux); |
YROY2004 | 1:90cc91745ff7 | 455 | #endif |
YROY2004 | 1:90cc91745ff7 | 456 | |
YROY2004 | 0:37eb67c8ebd0 | 457 | //tâches du touchscreen |
YROY2004 | 0:37eb67c8ebd0 | 458 | myled = !myled; |
YROY2004 | 0:37eb67c8ebd0 | 459 | |
YROY2004 | 0:37eb67c8ebd0 | 460 | x = readTouchX(); |
YROY2004 | 0:37eb67c8ebd0 | 461 | y = readTouchY(); |
YROY2004 | 0:37eb67c8ebd0 | 462 | z = detectTouch(); |
YROY2004 | 0:37eb67c8ebd0 | 463 | //tâches du tftspfd5408 |
YROY2004 | 0:37eb67c8ebd0 | 464 | |
YROY2004 | 0:37eb67c8ebd0 | 465 | |
YROY2004 | 0:37eb67c8ebd0 | 466 | //tâches d'intégration |
YROY2004 | 0:37eb67c8ebd0 | 467 | couleurVariable = determineLaCouleur(); |
YROY2004 | 1:90cc91745ff7 | 468 | // fillRect(228, 282, 10, 10, couleurVariable); //indicateur de couleur |
YROY2004 | 0:37eb67c8ebd0 | 469 | |
YROY2004 | 0:37eb67c8ebd0 | 470 | if ((z > TOUCH_SEUIL_BAS)&&(z < TOUCH_SEUIL_HAUT)) |
YROY2004 | 0:37eb67c8ebd0 | 471 | { |
YROY2004 | 0:37eb67c8ebd0 | 472 | #ifdef TEST |
YROY2004 | 0:37eb67c8ebd0 | 473 | pc.printf("x lu %u\t ", x); |
YROY2004 | 0:37eb67c8ebd0 | 474 | pc.printf("y lu %u\t ", y); |
YROY2004 | 0:37eb67c8ebd0 | 475 | pc.printf("z lu %u\t ", z); |
YROY2004 | 0:37eb67c8ebd0 | 476 | #endif |
YROY2004 | 0:37eb67c8ebd0 | 477 | float u = conversion((float)x, XT_G, XE_G, XT_D, XE_D); |
YROY2004 | 0:37eb67c8ebd0 | 478 | float v = conversion((float)y, YT_B, YE_B, YT_H, YE_H); |
YROY2004 | 0:37eb67c8ebd0 | 479 | |
YROY2004 | 0:37eb67c8ebd0 | 480 | #ifdef TEST |
YROY2004 | 0:37eb67c8ebd0 | 481 | pc.printf("x ecran %f\t ", u); |
YROY2004 | 0:37eb67c8ebd0 | 482 | pc.printf("y ecran %f\r\n", v); |
YROY2004 | 0:37eb67c8ebd0 | 483 | #endif |
YROY2004 | 0:37eb67c8ebd0 | 484 | if (v < 280) |
YROY2004 | 0:37eb67c8ebd0 | 485 | { |
YROY2004 | 1:90cc91745ff7 | 486 | if (mode == MODE_COULEUR_CONSTANTE) |
YROY2004 | 1:90cc91745ff7 | 487 | { |
YROY2004 | 1:90cc91745ff7 | 488 | fillRect(u, v, 3, 3, couleur); |
YROY2004 | 1:90cc91745ff7 | 489 | } |
YROY2004 | 1:90cc91745ff7 | 490 | else |
YROY2004 | 1:90cc91745ff7 | 491 | { |
YROY2004 | 1:90cc91745ff7 | 492 | fillRect(u, v, 3, 3, couleurVariable); |
YROY2004 | 1:90cc91745ff7 | 493 | } |
YROY2004 | 0:37eb67c8ebd0 | 494 | } |
YROY2004 | 0:37eb67c8ebd0 | 495 | else |
YROY2004 | 0:37eb67c8ebd0 | 496 | { |
YROY2004 | 0:37eb67c8ebd0 | 497 | if (u < 80) |
YROY2004 | 0:37eb67c8ebd0 | 498 | { |
YROY2004 | 0:37eb67c8ebd0 | 499 | fillRect(0, 0, 240, 280, BLACK); |
YROY2004 | 0:37eb67c8ebd0 | 500 | } |
YROY2004 | 0:37eb67c8ebd0 | 501 | else |
YROY2004 | 0:37eb67c8ebd0 | 502 | { |
YROY2004 | 0:37eb67c8ebd0 | 503 | if (u < 160) |
YROY2004 | 0:37eb67c8ebd0 | 504 | { |
YROY2004 | 1:90cc91745ff7 | 505 | mode = MODE_COULEUR_CONSTANTE; |
YROY2004 | 0:37eb67c8ebd0 | 506 | //indicateur RED |
YROY2004 | 0:37eb67c8ebd0 | 507 | fillRect(81, 282, 10, 10, GREEN); //couleur rouge par défaut |
YROY2004 | 1:90cc91745ff7 | 508 | fillRect(161,282, 10, 10, BLUE); |
YROY2004 | 0:37eb67c8ebd0 | 509 | |
YROY2004 | 1:90cc91745ff7 | 510 | #ifdef TEST |
YROY2004 | 0:37eb67c8ebd0 | 511 | pc.printf("couleur: rouge\n\r"); |
YROY2004 | 1:90cc91745ff7 | 512 | #endif |
YROY2004 | 0:37eb67c8ebd0 | 513 | } |
YROY2004 | 0:37eb67c8ebd0 | 514 | else |
YROY2004 | 0:37eb67c8ebd0 | 515 | { |
YROY2004 | 1:90cc91745ff7 | 516 | mode = MODE_COULEUR_VARIABLE; |
YROY2004 | 0:37eb67c8ebd0 | 517 | //indicateur AUTRE |
YROY2004 | 0:37eb67c8ebd0 | 518 | fillRect(81, 282, 10, 10, RED); |
YROY2004 | 1:90cc91745ff7 | 519 | fillRect(161, 282, 77, 36, BLUE); |
YROY2004 | 1:90cc91745ff7 | 520 | fillRect(161, 282, 10, 10, GREEN); |
YROY2004 | 1:90cc91745ff7 | 521 | |
YROY2004 | 1:90cc91745ff7 | 522 | #ifdef TEST |
YROY2004 | 0:37eb67c8ebd0 | 523 | pc.printf("couleur variable\n\r"); |
YROY2004 | 1:90cc91745ff7 | 524 | #endif |
YROY2004 | 0:37eb67c8ebd0 | 525 | } |
YROY2004 | 0:37eb67c8ebd0 | 526 | } |
YROY2004 | 0:37eb67c8ebd0 | 527 | } |
YROY2004 | 0:37eb67c8ebd0 | 528 | } |
YROY2004 | 0:37eb67c8ebd0 | 529 | } |
YROY2004 | 0:37eb67c8ebd0 | 530 | } |