Projet d'interfaçage avec le joystick réalisé par Ronan CHERIAUX

Dependencies:   BSP_DISCO_F746NG

main.cpp

Committer:
cheriauxlpsesam
Date:
2020-06-26
Revision:
0:1c8761215497

File content as of revision 0:1c8761215497:

#include "mbed.h"
#include "stm32746g_discovery_lcd.h"
#include "stm32746g_discovery_ts.h"
#include "fleche_g.h"
#include "fleche_d.h"
#include "fleche_b.h"
#include "fleche_h.h"
#include "modf_code.h"
#include "retour.h"
#include "drawBitmap.h"

//On assigne les deux ports analogiques du joystick en sorti
AnalogIn inX(A4);
AnalogIn inY(A5);
int main()
{
//Variable d'initialisation
    TS_StateTypeDef TS_State;
    uint16_t x, y;
    uint8_t text[30];
    uint8_t status;
    uint8_t idx;
    uint8_t cleared = 0;
    uint8_t prev_nb_touches = 0;
//Valeur des 2 axes du joystick
    float axeX;
    float axeY;
    
//Code a faire pour deverouillez l'electro-aimant
    char code_a = 2; //gauche 
    char code_b = 4;//droite
    char code_c = 2;//gauche
    char code_d = 4;//droite
    
//Variable qui vont varié via la position du Joystick
    char essai_a = 0;
    char essai_b = 0;
    char essai_c = 0;
    char essai_d = 0;

//Variables qui vont servir à bloquer des parties du programme    
    char bloque = 0;
    char bloque_bouton = 0;
    char reset_mdp = 0;
    char victoire = 0;

//Variable utilisé pour connaitre le nombre de valeur deja selectionner pour le score
    char nombre = 0;
//Permet de positionner les images de fleche sur l'ecran
    int col = 60;

//Variable permettant de donner un resultat a chaque variable d'essais
    char val = 0;

    
//Variable utilisé pour le retour en arriere
    char val_a =0;
    char val_b =0;
    char val_c =0;
    char val_d =0;
    char i;
    
    BSP_LCD_Init();
    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
    BSP_LCD_Clear(LCD_COLOR_WHITE);
    BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN DEMO " , CENTER_MODE);
    HAL_Delay(1000);
//Initialisation de l'ecran
    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
    if (status != TS_OK) {
        BSP_LCD_SetFont(&Font24);
        BSP_LCD_Clear(LCD_COLOR_GREEN);
        BSP_LCD_SetBackColor(LCD_COLOR_GREEN);
        BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
    }  
    BSP_LCD_Clear(LCD_COLOR_WHITE);
    
    
    while(1){
        BSP_TS_GetState(&TS_State);
        //Cette partie represente les boutons ainsi que l'utilisation du joystick, ils ne sont pas utilisable en cas de victoire
        if(victoire == 0){
            BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
            BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)"Chercher le code ", CENTER_MODE);
            //Creation d'un bouton tactile
            drawBitmap(0,0,(const uint8_t *)modf_code);
            uint16_t x = TS_State.touchX[0];
            uint16_t y = TS_State.touchY[0];
            //Cette partie est pour modifier le mot de passe
            if (TS_State.touchDetected) {
                if(((x > 0) && (x < 100)) &&((y > 0) && (y<50))){
                        BSP_LCD_Clear(LCD_COLOR_WHITE);
                        BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
                        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
                        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)"Modification mot de passe ", CENTER_MODE);
                        reset_mdp = 1;
                        code_a = 0;
                        code_b = 0;
                        code_c = 0;
                        code_d = 0;
                        col = 60;
                        nombre = 0;
                        
                        while(reset_mdp ==1){
                            //On recupere la valeur des 2 axes du joystick
                            axeX = inX.read();
                            axeY = inY.read();
                            if( axeX == 1.0){
                                if (bloque == 0 ){
                                    drawBitmap(col,100,(const uint8_t *)fleche_h);
                                    val = 1;
                                    bloque = 1;
                                    nombre = nombre + 1;
                                    col = col + 90;
                                    wait_us(200000);
                                }
                            }
                            if( axeY <= 0.40){
                                if (bloque == 0 ){
                                    drawBitmap(col,100,(const uint8_t *)fleche_g);
                                    val = 2;
                                    bloque = 1;
                                    nombre = nombre + 1;
                                    col = col + 90;
                                    wait_us(200000);
                                }
                            }
                            if( axeX <= 0.40){
                                if (bloque == 0 ){
                                    drawBitmap(col,100,(const uint8_t *)fleche_b);
                                    val = 3;
                                    bloque = 1;
                                    nombre = nombre + 1;
                                    col = col + 90;
                                    wait_us(200000);
                                }
                            }
                            if( axeY == 1.0){
                                if (bloque == 0 ){
                                    drawBitmap(col,100,(const uint8_t *)fleche_d);
                                    val = 4;
                                    bloque = 1;
                                    nombre = nombre + 1;
                                    col = col + 90;
                                    wait_us(200000);
                                }
                            }
                            if (bloque == 1){
                                switch(nombre) {
                                    case 1:
                                        code_a = val;
                                        bloque = 0;
                                        break;
                                    case 2:
                                        code_b = val;
                                        bloque = 0;
                                        break;
                                    case 3:
                                        code_c = val;
                                        bloque = 0;
                                        break;
                                    case 4:
                                        code_d = val;
                                        nombre = 0;
                                        reset_mdp = 0;
                                        col = 60;
                                        bloque = 0;
                                        BSP_LCD_Clear(LCD_COLOR_WHITE);
                                        break;

                                    }
                                }
                            }
                        }
                    }
            //Bouton pour supprimer le dernier resultat
            if(nombre > 0){
                drawBitmap(380,0,(const uint8_t *)retour);
                uint16_t x = TS_State.touchX[0];
                uint16_t y = TS_State.touchY[0];
                if (TS_State.touchDetected) {
                    if(((x > 380) && (x < 480)) &&((y > 0) && (y<100))){
                        col = 60;
                        //On réaffiche les anciens résultats grace val_a, val_b
                        for( i =0; i< nombre ; i++){
                            switch(i) {
                                case 0:
                            
                                    val = 0;
                                    break;
                                case 1:
                                
                                    essai_a = val_a;
                                    val = val_a;
                                    break;
                                case 2:
                                
                                    essai_b = val_b;
                                    val = val_b;
                                    break;
                                default :
                                    wait_us(5000);
                            }    
                            switch(val){
                                case 0:
                                    BSP_LCD_Clear(LCD_COLOR_WHITE);
                                    break;
                                case 1:
                                    drawBitmap(col,100,(const uint8_t *)fleche_h);
                                    col = col +90;
                                    break;
                                case 2:
                                    drawBitmap(col,100,(const uint8_t *)fleche_g);
                                    col = col +90;
                                    break;
                                case 3:
                                    drawBitmap(col,100,(const uint8_t *)fleche_b);
                                    col = col +90;
                                    break;
                                case 4:
                                    drawBitmap(col,100,(const uint8_t *)fleche_d);
                                    col = col +90;
                                    break;
                                default :
                                    wait_us(5000);
                                }
                            }
                            nombre = nombre - 1;
                            wait_us(200000);
                        }
                    }
                }
            }

        wait_us(200000);
        axeX = inX.read();
        axeY = inY.read();
        //Utilisation du joystick pour tenter de trouver le bon mot de passe
        //Si l'on fait varier la position du joystick selon la position x ou y alors les valeurs vont varier d'environ 0.30 jusqu'à 1
        if(bloque_bouton == 0){
            if( axeX == 1.0){
                if (bloque == 0 ){
                    drawBitmap(col,100,(const uint8_t *)fleche_h);
                    val = 1;
                    bloque = 1;
                    bloque_bouton = 1;
                    nombre = nombre + 1;
                    col = col + 90;
                }
            }
            if( axeY <= 0.40){
                if (bloque == 0 ){
                    drawBitmap(col,100,(const uint8_t *)fleche_g);
                    val = 2;
                    bloque = 1;
                    bloque_bouton = 1;
                    nombre = nombre + 1;
                    col = col + 90;
                }
            }
            if( axeX <= 0.40){
                if (bloque == 0 ){
                    drawBitmap(col,100,(const uint8_t *)fleche_b);
                    val = 3;
                    bloque = 1;
                    bloque_bouton = 1;
                    nombre = nombre + 1;
                    col = col + 90;
                }
            }
            if( axeY == 1.0){
                if (bloque == 0 ){
                    drawBitmap(col,100,(const uint8_t *)fleche_d);
                    val = 4;
                    bloque = 1;
                    bloque_bouton = 1;
                    nombre = nombre + 1;
                    col = col + 90;
                }
            }
        }
        if (bloque == 1){
            switch(nombre) {
                case 0:
                    BSP_LCD_Clear(LCD_COLOR_WHITE);
                    break;
                case 1:
                
                    essai_a = val;
                    val_a = val;
                    bloque = 0;
                    bloque_bouton = 0;
                    break;
                case 2:
                
                    essai_b = val;
                    val_b = val;
                    bloque = 0;
                    bloque_bouton = 0;
                    break;
                case 3:
                
                    essai_c = val;
                    val_c = val;
                    bloque = 0;
                    bloque_bouton = 0;
                    break;
                    
                case 4:
                    
                    essai_d = val;
                    break;
                    
            }
            //Une fois positions mise on verifie si le code correspond au mot de passe
            if(essai_d != 0){
                //Si le code est bon on affiche un ecran vert avec ecrit victoire et on fait varier la variable "victoire" pour desactiver l'utilisation des bouton ainsi que du joystick
                if(essai_a == code_a && essai_b == code_b && essai_c == code_c && essai_d == code_d){
                    if ( victoire == 0){
                        BSP_LCD_Clear(LCD_COLOR_GREEN);
                        BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
                        BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
                        BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)"VICTOIRE", CENTER_MODE);
                    }
                    victoire = 1;
                }
                //Si il ne s'agit pas du mot de passe un ecran rouge apparait avec ecrit "FAUX" et le joueur est invité à reessayer
                else{
                    wait_us(200000);
                    BSP_LCD_Clear(LCD_COLOR_RED);
                    BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
                    BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
                    BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)"FAUX ", CENTER_MODE);
                    wait_us(500000);
                    essai_a = 0;
                    essai_b = 0;
                    essai_c = 0;
                    essai_d = 0;
                    nombre = 0;
                    col = 60;
                    BSP_LCD_Clear(LCD_COLOR_WHITE);
                    bloque = 0;
                    bloque_bouton = 0;
                }
            }
        }
    }
}