POUR NUCLEO-F302R8

Dependencies:   X_NUCLEO_6180XA1 mbed

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

Revision:
1:90cc91745ff7
Parent:
0:37eb67c8ebd0
Child:
3:b115775ee641
diff -r 37eb67c8ebd0 -r 90cc91745ff7 main.cpp
--- a/main.cpp	Fri Jan 26 13:56:42 2018 +0000
+++ b/main.cpp	Fri Feb 02 10:43:21 2018 +0000
@@ -1,10 +1,13 @@
 #include "mbed.h"
+#include "XNucleo6180XA1.h"
+#include <string.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <assert.h>
+
 //options de compilation
 //#define TEST
 
-
-#define TFT_SPDF5408
-
 //intégration
 // représentation
 // G: gauche, D: droit, H: haut, B: bas
@@ -37,25 +40,15 @@
 #define COMMAND 0
 #define DATA    1
 
-#ifdef TFT_SPDF5408
 #define YP A3
 #define XM A2 
 #define YM D9  
 #define XP D8 
-#endif
-
-#ifdef MON_TFT
-#define YP A1  // must be an analog pin, use "An" notation!
-#define YM D7   // can be a digital pin
-#define XP D6   // can be a digital pin
-#define XM A2  // must be an analog pin, use "An" notation!
-#endif
 
 #define TOUCH_SEUIL_HAUT    3000
 #define TOUCH_SEUIL_BAS     16
 
 
-//tftspfd5408
 #define TFTWIDTH  240
 #define TFTHEIGHT 320
 
@@ -67,12 +60,6 @@
 
 #define TFT_NORTH SPFD5408_MADCTL_MY | SPFD5408_MADCTL_BGR
 
-#if 0
-#define TFT_EAST  {SPFD5408_MADCTL_MX | SPFD5408_MADCTL_MY | SPFD5408_MADCTL_MV | SPFD5408_MADCTL_BGR}
-#define TFT_SOUTH {SPFD5408_MADCTL_MX | SPFD5408_MADCTL_BGR}
-#define TFT_WEST  {SPFD5408_MADCTL_MV | SPFD5408_MADCTL_BGR}
-#endif
-
 #define BLACK   0x0000
 #define BLUE    0x001F
 #define RED     0xF800
@@ -85,41 +72,15 @@
 #define SPFD5408_SOFTRESET          0x01
 #define SPFD5408_SLEEPOUT           0x11
 
-#if 0
-#define SPFD5408_SLEEPIN            0x10
-#define SPFD5408_NORMALDISP         0x13
-#define SPFD5408_INVERTOFF          0x20
-#define SPFD5408_INVERTON           0x21
-#define SPFD5408_GAMMASET           0x26
-#define SPFD5408_DISPLAYOFF         0x28
-#endif
-
 #define SPFD5408_DISPLAYON          0x29
 #define SPFD5408_COLADDRSET         0x2A
 #define SPFD5408_PAGEADDRSET        0x2B
 #define SPFD5408_MEMORYWRITE        0x2C
 #define SPFD5408_PIXELFORMAT        0x3A
 #define SPFD5408_FRAMECONTROL       0xB1
-#if 0
-#define SPFD5408_DISPLAYFUNC        0xB6
-#define SPFD5408_ENTRYMODE          0xB7
-#define SPFD5408_POWERCONTROL1      0xC0
-#define SPFD5408_POWERCONTROL2      0xC1
-#define SPFD5408_VCOMCONTROL1       0xC5
-#define SPFD5408_VCOMCONTROL2       0xC7
-
-#define SPFD5408_MADCTL             0x36
-#define SPFD5408_MADCTL_MX          0x40
-#define SPFD5408_MADCTL_MV          0x20
-#define SPFD5408_MADCTL_ML          0x10
-#define SPFD5408_MADCTL_RGB         0x00
-#endif
 #define SPFD5408_MEMCONTROL         0x36
 #define SPFD5408_MADCTL_MY          0x80
 #define SPFD5408_MADCTL_BGR         0x08
-#if 0
-#define SPFD5408_MADCTL_MH          0x04
-#endif
 
 #define IDLE    1
 #define ACTIVE  0
@@ -128,6 +89,13 @@
 
 #define TEMPS   40
 
+//VL6180X
+#define VL6180X_I2C_SDA   D14 
+#define VL6180X_I2C_SCL   D15 
+
+#define VL6180X_I2C_SDA_MODE    PullUp
+#define VL6180X_I2C_SCL_MODE    PullUp
+
 
 //integration
 
@@ -140,6 +108,8 @@
 #define YT_H    600
 #define YT_B    3700
 
+#define MODE_COULEUR_CONSTANTE  0
+#define MODE_COULEUR_VARIABLE   1
 //definitions de variables
 //touchscreen
 uint16_t x;
@@ -153,13 +123,21 @@
 DigitalOut pinCS(LCD_CS);       //PB_0;
 DigitalOut pinReset(LCD_RESET); //PC_1;
 
+//VL6180X
+DigitalOut enableVL6180X(D12);
+static XNucleo6180XA1 *board = NULL;
+uint32_t dist;
+
+
 //integration
-Serial pc(SERIAL_TX, SERIAL_RX, 9600);
+#ifdef TEST
+    Serial pc(USBTX, USBRX, 9600); //SERIAL_TX, SERIAL_RX, 9600);
+#endif
 DigitalOut myled(LED1);
 uint16_t couleurVariable;
 uint16_t tableDeCouleur[]=
     {
-       WHITE, YELLOW, GREEN, BLUE, CYAN, MAGENTA, RED
+       BLACK, RED, YELLOW, GREEN, CYAN, BLUE, MAGENTA, WHITE
     };   
 
 
@@ -396,19 +374,62 @@
 
 uint16_t determineLaCouleur(void)
 {
-        return tableDeCouleur[3];
+    board->sensor_top->get_distance(&dist);
+    if (dist > 210) //en millimetres
+    {
+        dist = 210;
+    }
+//    board->sensor_top->get_lux(&lux);
+        
+        return tableDeCouleur[(int)(dist/30)];
 }
 
 int main()
-{ 
+{
+//variables locales du touchscreen 
 uint16_t couleur;
+
+//variables locales du tftspfd5408
+
+//variables locales pour le VL6180X
+int status;
+uint32_t lux;
+
+DevI2C *device_i2c = new DevI2C(VL6180X_I2C_SDA, VL6180X_I2C_SCL);
+//variables locales pour l'integration
+uint32_t mode;
+
 //initialisation du touchscreen
     restoreXY();
    
 //initialisation du tftspfd5408
     begin();
 
+//initialisation du VL6180X
+//    printf ("Initialisation *********\n");  
+//yr
+//    pin_mode(VL6180X_I2C_SDA, (PinMode)PullUp);
+//    pin_mode(VL6180X_I2C_SCL, (PinMode)PullUp);
+
+    enableVL6180X = 1;
+    wait_ms(1); 
+    enableVL6180X = 0;
+    wait_ms(1); 
+    enableVL6180X = 1;
+    wait_ms(1);
+
+    /* Creates the 6180XA1 expansion board singleton obj. */
+    board = XNucleo6180XA1::instance(device_i2c, D11, D10, D13, D2);
+
+    /* Initializes the 6180XA1 expansion board with default values. */
+    status = board->init_board();
+    if (status) {
+        printf("Failed to init board!\n\r");
+        return 0;
+    }
+
 //intégration
+    mode = MODE_COULEUR_CONSTANTE;
     couleur = RED;
     couleurVariable = BLUE;
     fillRect(0, 0, 240, 280, BLACK); //surface de dessin  
@@ -428,7 +449,11 @@
     fillRect(81, 282, 10, 10, GREEN); //couleur rouge par défaut
 
     while(1) {
-
+        
+#ifdef TEST
+    printf ("Distance: %d, Lux: %d\n\r", dist, lux);
+#endif
+            
 //tâches du touchscreen
         myled = !myled;
 
@@ -440,7 +465,7 @@
 
 //tâches d'intégration
         couleurVariable = determineLaCouleur();
-        fillRect(228, 282, 10, 10, couleurVariable); //indicateur de couleur
+//        fillRect(228, 282, 10, 10, couleurVariable); //indicateur de couleur
 
         if ((z > TOUCH_SEUIL_BAS)&&(z < TOUCH_SEUIL_HAUT))
         {
@@ -458,7 +483,14 @@
 #endif
             if (v < 280)
             {
-                fillRect(u, v, 1, 1, couleur);    
+                if (mode == MODE_COULEUR_CONSTANTE)
+                {
+                    fillRect(u, v, 3, 3, couleur);    
+                }
+                else
+                {
+                    fillRect(u, v, 3, 3, couleurVariable);                   
+                }
             }
             else
             {
@@ -470,21 +502,26 @@
                 {
                     if (u < 160)
                     {
+                        mode = MODE_COULEUR_CONSTANTE;
                         //indicateur RED
                         fillRect(81, 282, 10, 10, GREEN); //couleur rouge par défaut
-                        fillRect(161,282, 10, 10, couleurVariable);
+                        fillRect(161,282, 10, 10, BLUE);
 
-                        couleur = RED;
+#ifdef TEST
                         pc.printf("couleur: rouge\n\r");
+#endif
                     }
                     else
                     {
+                        mode = MODE_COULEUR_VARIABLE;
                         //indicateur AUTRE
-                        fillRect(161, 282, 77, 36, couleurVariable);
-                        fillRect(161, 282, 10, 10, GREEN); //bouton bleu pale
                         fillRect(81, 282, 10, 10, RED);
-                        couleur = couleurVariable;
+                        fillRect(161, 282, 77, 36, BLUE);
+                        fillRect(161, 282, 10, 10, GREEN);
+                        
+#ifdef TEST
                         pc.printf("couleur variable\n\r");
+#endif
                     }
                 }
             }