Code_capteur-APDS9960_ecran-STM32F746G-DISCO
Dependencies: TS_DISCO_F746NG LCD_DISCO_F746NG BSP_DISCO_F746NG BUTTON_GROUP
main.cpp
- Committer:
- darkseb
- Date:
- 2020-06-22
- Revision:
- 0:5d88688340fc
File content as of revision 0:5d88688340fc:
#include "mbed.h" #include "stm32746g_discovery_lcd.h" #include "stm32746g_discovery_ts.h" #include "button_group.hpp" #include "Adafruit_APDS9960.h" Serial pc(USBTX, USBRX); // tx, rx I2C * i2c_sensor; Adafruit_APDS9960 *sensor; using namespace Mikami; TS_DISCO_F746NG ts_; LCD_DISCO_F746NG lcd_; void init_sensor() { i2c_sensor = new I2C(I2C_SDA, I2C_SCL); sensor = new Adafruit_APDS9960(&pc); bool initok = sensor->begin(i2c_sensor); if (!initok) { pc.printf("\n\rErreur avec l'initialisation du capteur de couleur\n\r"); }else pc.printf("\n\rLe capteur de couleur a ete initialise\n\r"); sensor->enableColor(true); } int main() { init_sensor(); unsigned int boutton_commencer = 0; unsigned int boutton_reset = 0; unsigned int nbAlea = 0; unsigned int couleur; unsigned int couleur1; unsigned int couleur2; unsigned int couleur3; unsigned int couleur4; unsigned int sequence = 0; unsigned int i = 0; unsigned int reponse; unsigned int reponse1; unsigned int reponse2; unsigned int reponse3; unsigned int reponse4; unsigned int sequence_reponse = 0; unsigned int j = 0; BSP_LCD_Init(); BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS); BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER); while(1) { //Ecran d'acceuil BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_SetFont(&LCD_DEFAULT_FONT); BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAt(0, 40, (uint8_t *)"BIENVENUE", CENTER_MODE); HAL_Delay(2000); BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, 90, (uint8_t *)"SUR UN", CENTER_MODE); HAL_Delay(2000); BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, 140, (uint8_t *)"CAPTEUR DE COULEUR", CENTER_MODE); HAL_Delay(2000); //Bouton commencer la partie Button commencer(lcd_, ts_, 88, 205, 300, 50, LCD_COLOR_BLUE, LCD_COLOR_BLACK, "Commencer la partie", Font20); commencer.Draw(LCD_COLOR_WHITE, LCD_COLOR_BLACK); while(boutton_commencer == 0) { if(commencer.Touched()) { boutton_commencer = 1; } } boutton_commencer = 0; //Ecran montrant la séquence à répéter pour gagner BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAt(0, 40, (uint8_t *)"Repeter la sequence", CENTER_MODE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, 80, (uint8_t *)"une fois celle-ci", CENTER_MODE); BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, 120, (uint8_t *)"terminee", CENTER_MODE); HAL_Delay(4000); //Initialisation de la séquence while(sequence == 0){ srand(time(NULL)); nbAlea=rand()%4; //nbAlea=rand()%3; switch(nbAlea){ case 0: couleur = LCD_COLOR_RED; i = i + 1; break; case 1: couleur = LCD_COLOR_GREEN; i = i + 1; break; case 2: couleur = LCD_COLOR_BLUE; i = i + 1; break; case 3: couleur = LCD_COLOR_WHITE; i = i + 1; break; } switch(i){ case 1: couleur1 = couleur; BSP_LCD_SetTextColor(couleur1); BSP_LCD_FillRect(50, 170, 70, 70); HAL_Delay(1000); break; case 2: couleur2 = couleur; BSP_LCD_SetTextColor(couleur2); BSP_LCD_FillRect(150, 170, 70, 70); HAL_Delay(1000); break; case 3: couleur3 = couleur; BSP_LCD_SetTextColor(couleur3); BSP_LCD_FillRect(250, 170, 70, 70); HAL_Delay(1000); break; case 4: couleur4 = couleur; BSP_LCD_SetTextColor(couleur4); BSP_LCD_FillRect(350, 170, 70, 70); HAL_Delay(1000); sequence = 1; i = 0; break; } wait_us(2000000); } sequence = 0; //Ecran "tour de l'utilisateur" BSP_LCD_Clear(LCD_COLOR_BLACK); BSP_LCD_SetBackColor(LCD_COLOR_WHITE); BSP_LCD_SetTextColor(LCD_COLOR_BLUE); BSP_LCD_DisplayStringAt(0, 40, (uint8_t *)"A vous de jouer !", CENTER_MODE); BSP_LCD_SetTextColor(LCD_COLOR_RED); BSP_LCD_DisplayStringAt(0, 80, (uint8_t *)"Quelle etait la sequence ?", CENTER_MODE); //BSP_LCD_SetTextColor(LCD_COLOR_GREEN); //BSP_LCD_DisplayStringAt(0, 120, (uint8_t *)"Appuyer sur le bouton de couleur correspondant", CENTER_MODE); HAL_Delay(4000); //create some variables to store the color data in uint16_t r, g, b, c; //wait for color data to be ready while(!sensor->colorDataReady()){ wait_us(5000); } while(sequence_reponse == 0){ //get the data and print the different channels sensor->getColorData(&r, &g, &b, &c); pc.printf("red: "); pc.printf("%u ", r); pc.printf(" green: "); pc.printf("%u ", g); pc.printf(" blue: "); pc.printf("%u ", b); pc.printf(" clear: "); pc.printf("%u ", c); pc.printf("\r\n"); if(r>400 && g>400 && b>400) { pc.printf("Test 0: blanc\r\n"); reponse = LCD_COLOR_WHITE; j = j + 1; } else if(r>g && r>b && r>100) { pc.printf("Test 1: rouge\r\n"); reponse = LCD_COLOR_RED; j = j + 1; } else if(b>r && b>g && b>100) { pc.printf("Test 2: bleu\r\n"); reponse = LCD_COLOR_BLUE; j = j + 1; } else if(g>r && g>b && g>100) { pc.printf("Test 3: vert\r\n"); reponse = LCD_COLOR_GREEN; j = j + 1; } switch(j){ case 1: reponse1 = reponse; BSP_LCD_SetTextColor(reponse1); BSP_LCD_FillRect(50, 170, 70, 70); HAL_Delay(1000); break; case 2: reponse2 = reponse; BSP_LCD_SetTextColor(reponse2); BSP_LCD_FillRect(150, 170, 70, 70); HAL_Delay(1000); break; case 3: reponse3 = reponse; BSP_LCD_SetTextColor(reponse3); BSP_LCD_FillRect(250, 170, 70, 70); HAL_Delay(1000); break; case 4: reponse4 = reponse; BSP_LCD_SetTextColor(reponse4); BSP_LCD_FillRect(350, 170, 70, 70); HAL_Delay(1000); sequence_reponse = 1; j = 0; break; } wait_us(1000000); } sequence_reponse = 0; if(couleur1==reponse1 && couleur2==reponse2 && couleur3==reponse3 && couleur4==reponse4) { BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, 120, (uint8_t *)"VOUS AVEZ GAGNE", CENTER_MODE); } else { BSP_LCD_SetTextColor(LCD_COLOR_GREEN); BSP_LCD_DisplayStringAt(0, 120, (uint8_t *)"VOUS AVEZ PERDU", CENTER_MODE); } //Bouton rejouer la partie Button reset(lcd_, ts_, 410, 5, 60, 40, LCD_COLOR_BLUE, LCD_COLOR_BLACK, "Rejouer", Font12); reset.Draw(LCD_COLOR_WHITE, LCD_COLOR_BLACK); while(boutton_reset == 0) { if(reset.Touched()) { boutton_reset = 1; } } boutton_reset = 0; } }