Dependencies:   BSP_DISCO_F746NG GT511C3

Revision:
0:e0918584a802
Child:
2:baaccd9cb124
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Wed Jun 24 15:21:29 2020 +0000
@@ -0,0 +1,1029 @@
+#include "mbed.h"
+#include "logo.h"
+#include "GT511C3.hpp"
+#include "stm32746g_discovery_lcd.h"
+#include "stm32746g_discovery_ts.h"
+
+// init la com serie et du capteur
+Serial pc(USBTX, USBRX,9600); // tx, rx
+GT511C3 finger(D1,D0);
+
+int pass = 2606;
+int code = 0;
+int multi = 1;
+int id;
+uint8_t text[30];
+int EnrollID = -1;
+unsigned char data[498];
+int identificateur;
+//variable
+
+void touch_screen();
+void init_lcd();
+void font_clavier(int on_off);
+void font_menu_principal_simple(int on_off);
+void font_menu_principal_add(int on_off);
+void font_menu_principal(int on_off);
+void touch_screen_simple();
+void touch_screen_add();
+void menu_principal();
+void identifier();
+void identifier_add();
+void ajouter_finger();
+void init_finger();
+void drawImageLogo(int offsetX, int offsetY);
+void codetouche(int touche,int multi);
+int menu_clavier();
+int progress(int status,char *msg);
+//fonction
+
+
+//affichage de message
+int progress(int status,char *msg)
+{
+    pc.printf("%s\r\n",msg);
+    BSP_LCD_ClearStringLine(1);
+    sprintf((char*)text,"%s",msg);
+    BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, CENTER_MODE );
+    return 0;
+}
+// recuperation du code taper
+void codetouche(int touche,int multi)
+{
+    if (code == 0) {
+        code = touche;
+        pc.printf("code: %d",code);
+        sprintf((char*)text,"code: %d",code);//valider
+        BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, RIGHT_MODE);
+    } else {
+        code *= multi;
+        code += touche;
+        pc.printf("code: %d",code);
+        sprintf((char*)text,"code: %d ",code);//valider
+        BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, RIGHT_MODE);
+    }
+    if(code == pass) {
+        code = 0;
+        identificateur = 1;
+    }
+}
+// affiche le logo de l'IUT
+void drawImageLogo(int offsetX, int offsetY)
+{
+    int x = 0;
+    int y = 0;
+    uint32_t* dataPtr = (uint32_t*)logo.data;
+    while(y < logo.height) {
+        while(x < logo.width) {
+            BSP_LCD_DrawPixel(x + offsetX, y + offsetY, *dataPtr);
+            dataPtr++;
+            x++;
+        }
+        x = 0;
+        y++;
+    }
+}
+// initialisation du capteur
+void init_finger()
+{
+    int sts = 0;
+    //int EnrollID = -1;
+    unsigned char data[498];
+
+    pc.format(8,Serial::None,1);
+    pc.printf("Hello World\n\r");
+    pc.printf("Fingerprint reader module \"GT-511C3 / GT-511C31\" test program.\n\r");
+    pc.printf("Build: %s %s\n\r",__DATE__,__TIME__);
+    pc.printf("Open\n\r");
+    sts = finger.Open();
+    pc.printf("sts = %d\n\r",sts);
+
+    if(sts == 0) {
+        int i;
+        pc.printf("FirmwareVersion = %lx\n\r",finger.FirmwareVersion);
+        pc.printf("IsoAreaMaxSize = %ld\n\r",finger.IsoAreaMaxSize);
+        pc.printf("DeviceSerialNumber = ");
+        for(i = 0; i < sizeof(finger.DeviceSerialNumber); i++) {
+            pc.printf("%02X",finger.DeviceSerialNumber[i]);
+        }
+        pc.printf("\n\r");
+    }
+}
+// ajout d'empreinte
+void ajouter_finger()
+{
+    EnrollID++;
+    finger.CmosLed( 1);
+    finger.Enroll(EnrollID, progress);
+    pc.printf("SetTemplate = %d\n", finger.SetTemplate(11,data,498));
+    finger.CmosLed(0);
+}
+// fond pour le menu ajouter empreinte
+void font_menu_principal_add(int on_off)
+{
+    uint8_t text[30];
+    int touche = 0;
+
+    if (on_off == 1) {
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(6), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(7), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(8), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(9), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(11), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(12), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(13), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(15), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(16), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(17), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(18), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(19), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "   AJOUTER   ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, LEFT_MODE );
+        sprintf((char*)text, "   SUPPRIMER   ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE);
+        sprintf((char*)text, "|   BACK  |");
+        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, RIGHT_MODE );
+    }
+}
+// permet de detecter les touches appuyer dans le menu ajouter
+void touch_screen_add()
+{
+    TS_StateTypeDef TS_State;
+    int touche= -1;
+    uint16_t x, y;
+    uint8_t text[30];
+    uint8_t status;
+    uint8_t idx;
+    uint8_t cleared = 0;
+    uint8_t prev_nb_touches = 0;
+
+    BSP_LCD_Init();
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
+    BSP_LCD_SetFont(&Font12);
+    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+    BSP_LCD_Clear(LCD_COLOR_BLUE);
+    while(1) {
+        BSP_TS_GetState(&TS_State);
+        font_menu_principal_add(1);
+        if (TS_State.touchDetected) {
+            if (TS_State.touchDetected < prev_nb_touches) {
+                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
+                    BSP_LCD_ClearStringLine(idx);
+                }
+            }
+            prev_nb_touches = TS_State.touchDetected;
+
+            cleared = 0;
+
+            //sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
+            //BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+
+            for (idx = 0; idx < TS_State.touchDetected; idx++) {
+                x = TS_State.touchX[idx];
+                y = TS_State.touchY[idx];
+                //sprintf((char*)text, "Touch %d: x=%d y=%d    ", touche, x, y);
+                //BSP_LCD_DisplayStringAt(0, LINE(0)/*LINE(idx+1)*/, (uint8_t *)&text, LEFT_MODE);
+            }
+
+            if((x>=1 &&x<=70)&&(y>=120&&y<=140)) {
+
+                sprintf((char*)text, "ajouter ");//1
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                ajouter_finger();
+                BSP_LCD_Clear(LCD_COLOR_BLUE);
+            }  else if((x>=380 &&x<=500)&&(y>=120&&y<=140)) {
+                sprintf((char*)text,"Suprimer id");
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                finger.DeleteID(id);
+                EnrollID = -1;
+                touch_screen_simple();
+            }  else if((x>=410 &&x<=500)&&(y>=20&&y<=40)) {
+                sprintf((char*)text,"Back");
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                touch_screen_simple();
+            }
+        } else {
+            //sprintf((char*)text,"code: %d",0);//valider
+            //BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, RIGHT_MODE);
+        }
+    }
+}
+
+void touch_screen_2()
+{
+    TS_StateTypeDef TS_State;
+    int touche= -1;
+    uint16_t x, y;
+    uint8_t text[30];
+    uint8_t status;
+    uint8_t idx;
+    uint8_t cleared = 0;
+    uint8_t prev_nb_touches = 0;
+
+    BSP_LCD_Init();
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
+    BSP_LCD_SetFont(&Font12);
+    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+    BSP_LCD_Clear(LCD_COLOR_BLUE);
+    while(1) {
+        BSP_TS_GetState(&TS_State);
+        font_menu_principal_add(1);
+        if (TS_State.touchDetected) {
+            if (TS_State.touchDetected < prev_nb_touches) {
+                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
+                    BSP_LCD_ClearStringLine(idx);
+                }
+            }
+            prev_nb_touches = TS_State.touchDetected;
+
+            cleared = 0;
+
+            //sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
+            //BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+
+            for (idx = 0; idx < TS_State.touchDetected; idx++) {
+                x = TS_State.touchX[idx];
+                y = TS_State.touchY[idx];
+                //sprintf((char*)text, "Touch %d: x=%d y=%d    ", touche, x, y);
+                //BSP_LCD_DisplayStringAt(0, LINE(0)/*LINE(idx+1)*/, (uint8_t *)&text, LEFT_MODE);
+            }
+
+            if((x>=1 &&x<=70)&&(y>=120&&y<=140)) {
+
+                sprintf((char*)text, "ajouter ");//1
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                ajouter_finger();
+                BSP_LCD_Clear(LCD_COLOR_BLUE);
+            }  else if((x>=380 &&x<=500)&&(y>=120&&y<=140)) {
+                sprintf((char*)text,"Suprimer id");
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                finger.DeleteID(id);
+                EnrollID = -1;
+                touch_screen();
+            }  else if((x>=410 &&x<=500)&&(y>=20&&y<=40)) {
+                sprintf((char*)text,"Back");
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                touch_screen();
+            }
+        } else {
+            //sprintf((char*)text,"code: %d",0);//valider
+            //BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, RIGHT_MODE);
+        }
+    }
+}
+
+//permet d'identifier si l'empreinte est bien enregistre ou pas pour le menu ajouter
+void identifier_add()
+{
+    finger.CmosLed(1);
+    finger.WaitPress(1);
+    if (finger.IsPress()!= 0) {
+        finger.Capture(false);
+        id = finger.Identify();
+        if(id!=-1) {
+            pc.printf("Student found!");
+            BSP_LCD_SetFont(&Font24);
+            BSP_LCD_SetBackColor(LCD_COLOR_GREEN);
+            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+            BSP_LCD_Clear(LCD_COLOR_GREEN);
+            sprintf((char*)text, "VALIDER");
+            BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+            HAL_Delay(1000);
+            BSP_LCD_SetFont(&Font12);
+            BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+            BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+            finger.CmosLed(0);
+            touch_screen_add();
+        } else {
+            pc.printf("Student not found");
+            BSP_LCD_SetFont(&Font24);
+            BSP_LCD_SetBackColor(LCD_COLOR_RED);
+            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+            BSP_LCD_Clear(LCD_COLOR_RED);
+            sprintf((char*)text, "REFUSER");
+            BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+            HAL_Delay(1000);
+            BSP_LCD_SetFont(&Font12);
+            BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+            BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+        }
+        if (id <300) {
+            pc.printf("Verified ID:%d",id);
+        } else {
+            pc.printf("Finger not found");
+        }
+    }
+    finger.CmosLed(0);
+}
+//permet d'identifier si l'empreinte est bien enregistre ou pas
+void identifier()
+{
+    finger.CmosLed(1);
+    finger.WaitPress(1);
+    if (finger.IsPress()!= 0) {
+        finger.Capture(false);
+        int id = finger.Identify();
+        if(id!=-1) {
+            pc.printf("Student found!");
+            BSP_LCD_SetFont(&Font24);
+            BSP_LCD_SetBackColor(LCD_COLOR_GREEN);
+            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+            BSP_LCD_Clear(LCD_COLOR_GREEN);
+            sprintf((char*)text, "VALIDER");
+            BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+            HAL_Delay(1000);
+            BSP_LCD_SetFont(&Font12);
+            BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+            BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+            identificateur = 2;
+        } else {
+            pc.printf("Student not found");
+            BSP_LCD_SetFont(&Font24);
+            BSP_LCD_SetBackColor(LCD_COLOR_RED);
+            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+            BSP_LCD_Clear(LCD_COLOR_RED);
+            sprintf((char*)text, "REFUSER");
+            BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+            HAL_Delay(1000);
+            BSP_LCD_SetFont(&Font12);
+            BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+            BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+        }
+        if ((id <300)&& (id > -1)) {
+            pc.printf("Verified ID:%d",id);
+            BSP_LCD_SetFont(&Font24);
+            BSP_LCD_SetBackColor(LCD_COLOR_GREEN);
+            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+            BSP_LCD_Clear(LCD_COLOR_GREEN);
+            sprintf((char*)text, "Verified ID:%d",id);
+            BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE );
+            HAL_Delay(1000);
+            BSP_LCD_SetFont(&Font12);
+            BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+            BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+            identificateur = 2;
+        } else {
+            pc.printf("Finger not found");
+            BSP_LCD_SetFont(&Font24);
+            BSP_LCD_SetBackColor(LCD_COLOR_RED);
+            BSP_LCD_SetTextColor(LCD_COLOR_BLACK);
+            BSP_LCD_Clear(LCD_COLOR_RED);
+            sprintf((char*)text, "Finger not found");
+            BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE );
+            HAL_Delay(1000);
+            BSP_LCD_SetFont(&Font12);
+            BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+            BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+        }
+    }
+    finger.CmosLed(0);
+}
+//fond pour le menu simple identification
+void font_menu_principal_simple(int on_off)
+{
+    uint8_t text[30];
+    int touche = 0;
+
+    if (on_off == 1) {
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(6), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(7), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(8), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(9), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(11), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(12), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(13), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(15), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(16), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(17), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(18), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(19), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "   IDENTIFICATION    ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, LEFT_MODE );
+        sprintf((char*)text, "        BACK         ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE );
+    }
+}
+//fond pour le menu ajouter empreinte
+void font_menu_add(int on_off)
+{
+    uint8_t text[30];
+    int touche = 0;
+
+    if (on_off == 1) {
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(6), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(7), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(8), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(9), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(11), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(12), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(13), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(15), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(16), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(17), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(18), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(19), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "    IDENTIFICATION SIMPLE    ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE );
+        sprintf((char*)text, "    DOUBLE IDENTIFICATION    ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, LEFT_MODE );
+    }
+}
+//fond pour le menu principal
+void font_menu_principal(int on_off)
+{
+    uint8_t text[30];
+    int touche = 0;
+
+    if (on_off == 1) {
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(3), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(4), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(6), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(7), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(8), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(9), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(11), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(12), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(13), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(14), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(15), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(16), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(17), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(18), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(19), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+        sprintf((char*)text, "|");
+        BSP_LCD_DisplayStringAt(0, LINE(21), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "    IDENTIFICATION SIMPLE    ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE );
+        sprintf((char*)text, "    DOUBLE IDENTIFICATION    ");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, LEFT_MODE );
+    }
+}
+//fond pour le clavier
+void font_clavier(int on_off)
+{
+    uint8_t text[30];
+    int touche = 0;
+
+    if (on_off == 1) {
+        sprintf((char*)text, "|   DEL   |");
+        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, LEFT_MODE );
+
+        sprintf((char*)text, "|   Back  |");
+        BSP_LCD_DisplayStringAt(0, LINE(1), (uint8_t *)&text, RIGHT_MODE );
+
+        sprintf((char*)text, "|   1   |");
+        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, LEFT_MODE );
+
+        sprintf((char*)text, "|   2   |");
+        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "|   3   |");
+        BSP_LCD_DisplayStringAt(0, LINE(5), (uint8_t *)&text, RIGHT_MODE );
+
+        sprintf((char*)text, "|   4   |");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, LEFT_MODE );
+
+        sprintf((char*)text, "|   5   |");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "|   6   |");
+        BSP_LCD_DisplayStringAt(0, LINE(10), (uint8_t *)&text, RIGHT_MODE );
+
+        sprintf((char*)text, "|   7   |");
+        BSP_LCD_DisplayStringAt(0, LINE(15), (uint8_t *)&text, LEFT_MODE );
+
+        sprintf((char*)text, "|   8   |");
+        BSP_LCD_DisplayStringAt(0, LINE(15), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "|   9   |");
+        BSP_LCD_DisplayStringAt(0, LINE(15), (uint8_t *)&text, RIGHT_MODE );
+
+        sprintf((char*)text, "|   0   |");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, CENTER_MODE );
+
+        sprintf((char*)text, "|   Valider   |");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, RIGHT_MODE );
+
+        //sprintf((char*)text, "|   Finger   |");
+        sprintf((char*)text, "|   Annuler   |");
+        BSP_LCD_DisplayStringAt(0, LINE(20), (uint8_t *)&text, LEFT_MODE );
+    }
+}
+//permet de detecter les touches appuyer dans le menu principal
+void menu_principal()
+{
+    TS_StateTypeDef TS_State;
+    int touche;
+    uint16_t x, y;
+    uint8_t text[30];
+    uint8_t status;
+    uint8_t idx;
+    uint8_t cleared = 0;
+    uint8_t prev_nb_touches = 0;
+
+    BSP_LCD_Init();
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+
+    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
+    BSP_LCD_SetFont(&Font12);
+    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+    BSP_LCD_Clear(LCD_COLOR_BLUE);
+
+    drawImageLogo(320,0);
+
+    while(1) {
+        BSP_TS_GetState(&TS_State);
+        font_menu_principal(1);
+        if (TS_State.touchDetected) {
+            if (TS_State.touchDetected < prev_nb_touches) {
+                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
+                    BSP_LCD_ClearStringLine(idx);
+                }
+            }
+            prev_nb_touches = TS_State.touchDetected;
+
+            cleared = 0;
+
+            //sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
+            //BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+
+            for (idx = 0; idx < TS_State.touchDetected; idx++) {
+                x = TS_State.touchX[idx];
+                y = TS_State.touchY[idx];
+                //sprintf((char*)text, "Touch %d: x=%d y=%d    ", touche, x, y);
+                //BSP_LCD_DisplayStringAt(0, LINE(0)/*LINE(idx+1)*/, (uint8_t *)&text, LEFT_MODE);
+            }
+
+            if(x<=200) {
+                touch_screen();
+            } else if(x>=210) {
+                touch_screen_simple();
+            }
+        } else {
+            //sprintf((char*)text,"code: %d",0);//valider
+            //BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, RIGHT_MODE);
+        }
+    }
+}
+// permet de detecter les touches appuyer dans le menu simple identification
+void touch_screen_simple()
+{
+    TS_StateTypeDef TS_State;
+    int touche= -1;
+    uint16_t x, y;
+    uint8_t text[30];
+    uint8_t status;
+    uint8_t idx;
+    uint8_t cleared = 0;
+    uint8_t prev_nb_touches = 0;
+
+    BSP_LCD_Init();
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
+    BSP_LCD_SetFont(&Font12);
+    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+    BSP_LCD_Clear(LCD_COLOR_BLUE);
+    while(1) {
+        BSP_TS_GetState(&TS_State);
+        font_menu_principal_simple(1);
+        if (TS_State.touchDetected) {
+            if (TS_State.touchDetected < prev_nb_touches) {
+                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
+                    BSP_LCD_ClearStringLine(idx);
+                }
+            }
+            prev_nb_touches = TS_State.touchDetected;
+
+            cleared = 0;
+
+            //sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
+            //BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+
+            for (idx = 0; idx < TS_State.touchDetected; idx++) {
+                x = TS_State.touchX[idx];
+                y = TS_State.touchY[idx];
+                //sprintf((char*)text, "Touch %d: x=%d y=%d    ", touche, x, y);
+                //BSP_LCD_DisplayStringAt(0, LINE(0)/*LINE(idx+1)*/, (uint8_t *)&text, LEFT_MODE);
+            }
+
+            if(x<=200) {
+                //finger.DeleteAllIDs();
+                sprintf((char*)text, "Identification ");//1
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                identifier_add();
+                BSP_LCD_Clear(LCD_COLOR_BLUE);
+
+            }  else if(x>=210) {
+                sprintf((char*)text,"Back");
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                menu_principal();
+            }
+        } else {
+            //sprintf((char*)text,"code: %d",0);//valider
+            //BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, RIGHT_MODE);
+        }
+    }
+}
+
+/*void touch_screen_double()
+{
+    TS_StateTypeDef TS_State;
+    int touche= -1;
+    uint16_t x, y;
+    uint8_t text[30];
+    uint8_t status;
+    uint8_t idx;
+    uint8_t cleared = 0;
+    uint8_t prev_nb_touches = 0;
+
+    BSP_LCD_Init();
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
+    BSP_LCD_SetFont(&Font12);
+    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+    BSP_LCD_Clear(LCD_COLOR_BLUE);
+    while(1) {
+        BSP_TS_GetState(&TS_State);
+        font_menu_principal_simple(1);
+        if (TS_State.touchDetected) {
+            if (TS_State.touchDetected < prev_nb_touches) {
+                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
+                    BSP_LCD_ClearStringLine(idx);
+                }
+            }
+            prev_nb_touches = TS_State.touchDetected;
+
+            cleared = 0;
+
+            //sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
+            //BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+
+            for (idx = 0; idx < TS_State.touchDetected; idx++) {
+                x = TS_State.touchX[idx];
+                y = TS_State.touchY[idx];
+                //sprintf((char*)text, "Touch %d: x=%d y=%d    ", touche, x, y);
+                //BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+            }
+
+            if(x<=200) {
+                //finger.DeleteAllIDs();
+                sprintf((char*)text, "Identification ");//1
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                identifier_add();
+                BSP_LCD_Clear(LCD_COLOR_BLUE);
+
+            }  else if(x>=210) {
+                sprintf((char*)text,"Back");
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, RIGHT_MODE);
+                menu_principal();
+            }
+        } else {
+            //sprintf((char*)text,"code: %d",0);//valider
+            //BSP_LCD_DisplayStringAt(0, LINE(2), (uint8_t *)&text, RIGHT_MODE);
+        }
+    }
+}*/
+
+
+// mise en place de la detection des touches
+void touch_screen()
+{
+    TS_StateTypeDef TS_State;
+    int touche= -1;
+    uint16_t x, y;
+    uint8_t text[30];
+    uint8_t status;
+    uint8_t idx;
+    uint8_t cleared = 0;
+    uint8_t prev_nb_touches = 0;
+
+    BSP_LCD_Init();
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
+    BSP_LCD_SetFont(&Font12);
+    BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
+    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+    BSP_LCD_Clear(LCD_COLOR_BLUE);
+    while(1) {
+        BSP_TS_GetState(&TS_State);
+        font_clavier(1);
+        if (TS_State.touchDetected) {
+            if (TS_State.touchDetected < prev_nb_touches) {
+                for (idx = (TS_State.touchDetected + 1); idx <= 5; idx++) {
+                    BSP_LCD_ClearStringLine(idx);
+                }
+            }
+            prev_nb_touches = TS_State.touchDetected;
+
+            cleared = 0;
+            touche = -1;
+            //sprintf((char*)text, "Touches: %d", TS_State.touchDetected);
+            //BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, LEFT_MODE);
+
+            for (idx = 0; idx < TS_State.touchDetected; idx++) {
+                x = TS_State.touchX[idx];
+                y = TS_State.touchY[idx];
+                //sprintf((char*)text, "Touch %d: x=%d y=%d    ", touche, x, y);
+                // BSP_LCD_DisplayStringAt(0, LINE(0)/*LINE(idx+1)*/, (uint8_t *)&text, LEFT_MODE);
+            }
+
+            if((x>=1 &&x<=60)&&(y>=20&&y<=40)) {
+                finger.DeleteAllIDs();
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text, "Delete all id ");
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                //BSP_LCD_ClearStringLine(0);
+                code = 0;
+            }  else if((x>=410 &&x<=500)&&(y>=20&&y<=40)) {
+                sprintf((char*)text,"BACK");
+                BSP_LCD_ClearStringLine(0);
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                menu_principal();
+                code = 0;
+            } else if((x>=1 &&x<=60)&&(y>=60&&y<=80)) {
+                touche=1;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text, "Touches: %d",touche);//1
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=200 &&x<=260)&&(y>=60&&y<=80)) {
+                touche=2;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//2
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=410 &&x<=500)&&(y>=60&&y<=80)) {
+                touche=3;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//3
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=1 &&x<=60)&&(y>=120&&y<=140)) {
+                touche=4;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//4
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=200 &&x<=260)&&(y>=115&&y<=135)) {
+                touche=5;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//5
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=410 &&x<=500)&&(y>=115&&y<=130)) {
+                touche=6;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//6
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=1 &&x<=60)&&(y>=170&&y<=190)) {
+                touche=7;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//7
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=200 &&x<=260)&&(y>=180&&y<=200)) {
+                touche=8;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//8
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=410 &&x<=500)&&(y>=180&&y<=210)) {
+                touche=9;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//9
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=190 &&x<=260)&&(y>=230&&y<=260)) {
+                touche=0;
+                BSP_LCD_ClearStringLine(0);
+                sprintf((char*)text,"Touches: %d",touche);//0
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                do {} while (!TS_State.touchDetected);
+            } else if((x>=1 &&x<=60)&&(y>=230&&y<=260)) {
+                sprintf((char*)text,"Touches: Annuler");//finger
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                BSP_LCD_ClearStringLine(2);
+                code = 0;
+            } else if((x>=370 &&x<=500)&&(y>=230&&y<=260)) {
+                sprintf((char*)text,"Touches: valider");//valider
+                BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+
+                if(identificateur == 0) {
+                    sprintf((char*)text,"Saisir Code SVP");//valider
+                    BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                } else if(identificateur == 1) {
+                    if(EnrollID == -1) {
+                        sprintf((char*)text,"Ajouter empreinte SVP");//valider
+                        BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                        ajouter_finger();
+                    }
+                    sprintf((char*)text,"Saisir empreinte SVP");//valider
+                    BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                    identifier();
+                }
+            if(identificateur == 2) {
+                    sprintf((char*)text,"Bienvenue");//valider
+                    BSP_LCD_DisplayStringAt(0, LINE(0), (uint8_t *)&text, CENTER_MODE);
+                    code = 0;
+                    identificateur=0;
+                    touch_screen_2();
+                } else {
+                    code = 0;
+                }
+            }
+            if(code == pass) {
+                code = 0;
+                identificateur = 1;
+            }
+        } else {
+            //code = code*multi + touche;
+            if (touche != -1) {
+                codetouche(touche,multi);
+            }
+            if(multi < 10) {
+                multi *= 10;
+            }
+            touche =-1;
+        }
+    }
+}
+// initialisation du LCD
+void init_lcd()
+{
+    uint8_t status;
+    int touche = -1;
+
+    BSP_LCD_Init();
+    finger.CmosLed(0);
+    BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
+    BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
+    status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
+    HAL_Delay(1000);
+    BSP_LCD_SetFont(&Font12);
+    BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
+    BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
+}
+// main principal
+int main()
+{
+    init_lcd();
+    init_finger();
+    menu_principal();
+}
\ No newline at end of file