UART : Fingerprint Locker

HAL_UART_Transmit(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_UART_Receive(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size, uint32_t Timeout);
HAL_UART_Transmit_IT(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
HAL_UART_Receive_IT(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_UART_Transmit_DMA(UART_HandleTypeDef *huart, const uint8_t *pData, uint16_t Size);
HAL_UART_Receive_DMA(UART_HandleTypeDef *huart, uint8_t *pData, uint16_t Size);
HAL_UART_DMAPause(UART_HandleTypeDef *huart);
HAL_UART_DMAResume(UART_HandleTypeDef *huart);
HAL_UART_DMAStop(UART_HandleTypeDef *huart);
#define SELECTION      HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_0)
#define ARROW_UP       HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_1)
#define ARROW_DOWN     HAL_GPIO_ReadPin(GPIOA, GPIO_PIN_2)
uint8_t digit_1,digit_2,digit_3

if(!SELECTION){ digit_1++; HAL_Delay(1); if(digit_1==10) digit_1=0;}
if(!ARROW_UP && digit_1==2) {digit_2++; HAL_Delay(1);if(digit_2==10) digit_2=0;}
if(!ARROW_DOWN && digit_1==2 && digit_2==2){digit_3++; HAL_Delay(1);if(digit_3==10) digit_3=0;}
sprintf(display_time,"Setting %d:%d:%d  ",digit_1,digit_2,digit_3);
OLCD_write_string(7,0,display_time);
    if(digit_3==2){
			setting_bit=1;digit_1=0;digit_2=0;digit_3=0;
			OLCD_write_string(7,0,"S. M. Activate  ");
			selectFunc();
		     }
#define ENROLL         1
#define DELETE_ID      2
#define EMPETY_FP_LIB  3
void selectFunc(void)
{
	OLCD_write_string(6,0,"Select <- ->  ");
	HAL_Delay(100);
while(SELECTION) // Pin for selection finger
	{
	if(!ARROW_UP) // For Up Arrow
	   {
			scan++;
			HAL_Delay(200);
			if(scan>=4) scan=1;
			switch(scan)
		  {
			case ENROLL: OLCD_write_string(7,0,"ENROLL UR FINGER");
			break;
			case DELETE_ID: OLCD_write_string(7,0,"DELETE ID NO    ");
			break;
			case EMPETY_FP_LIB: OLCD_write_string(7,0,"EMPTY LIBRARY   ");
			break;
		  }
	   }
	else if(!ARROW_DOWN)
	   {
			scan--;
			HAL_Delay(200);
			if(scan==0) scan=3;
			switch(scan)
		  {
			case ENROLL: OLCD_write_string(7,0,"ENROLL UR FINGER");
			break;
			case DELETE_ID: OLCD_write_string(7,0,"DELETE ID NO    ");
			break;
			case EMPETY_FP_LIB: OLCD_write_string(7,0,"EMPTY LIBRARY   ");
			break;
		  }
	   }
	}
HAL_Delay(200);
switch(scan)
{
	case ENROLL: enroll();
	break;
	case DELETE_ID: sendcmd2fp(FP_delete);
	break;
	case EMPETY_FP_LIB: sendcmd2fp(FP_empty);
	break;
}
}
const char fp_VfyPwd_Tx[16]={0xEF, 0x1,0xFF, 0xFF, 0xFF, 0xFF,0x1, 0x00,0x7, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1B };
char recive[20], rx_char, arr_size;
HAL_UART_Receive_IT(&huart1,&rx_char,1);
	while(1)
	{
	  OLCD_write_string(0,0,"Searching...  ");
	  arr_size = (sizeof(fp_VfyPwd_Tx)) / sizeof((fp_VfyPwd_Tx)[0]);
      HAL_UART_Transmit_IT(&huart1,&fp_VfyPwd_Tx,arr_size);
	  HAL_Delay(1000);
	  if(recive[9]) OLCD_write_string(0,0,"Connect Device"); // Device not connected
	  else   {
			OLCD_write_string(0,0,"Device Found");
			HAL_Delay(2000);
			clear_display();
			logo_write(1); // Finger Print Sensor Logo
			HAL_Delay(5000);
			clear_display();
			break;
		}
	}
extern UART_HandleTypeDef huart1; 
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{
  if(huart->Instance==USART1 )
  {
    recive[cont++]=rx_char;
    HAL_UART_Receive_IT(&huart1,&rx_char,1);
  }
}