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 11:44:13 2018 +0000
Revision:
3:b115775ee641
Parent:
1:90cc91745ff7
Child:
4:8c64f7896cbf
VERSION pour NUCLEO F302R8 test? avec circuits et GPIO.

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