POUR NUCLEO-F302R8

Dependencies:   X_NUCLEO_6180XA1 mbed

Fork of 247-436-M1-S2-LAB-A by Yves Roy

Committer:
YROY2004
Date:
Fri Feb 02 10:43:21 2018 +0000
Revision:
1:90cc91745ff7
Parent:
0:37eb67c8ebd0
Child:
3:b115775ee641
pour le lab

Who changed what in which revision?

UserRevisionLine numberNew 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 }