
Identification_GT-521F52
Dependencies: BSP_DISCO_F746NG GT511C3
main.cpp
- Committer:
- ROUCHDI
- Date:
- 2020-06-24
- Revision:
- 2:baaccd9cb124
- Parent:
- 0:e0918584a802
File content as of revision 2:baaccd9cb124:
#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); } } } // 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); BSP_LCD_ClearStringLine(2); 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(); }