2022-03-09 10:37:11 +01:00

171 lines
5.9 KiB
C

/**
******************************************************************************
* @file BSP/Src/touchscreen.c
* @author MCD Application Team
* @brief This example code shows how to use the touchscreen driver.
******************************************************************************
* @attention
*
* Copyright (c) 2017 STMicroelectronics.
* All rights reserved.
*
* This software is licensed under terms that can be found in the LICENSE file
* in the root directory of this software component.
* If no LICENSE file comes with this software, it is provided AS-IS.
*
******************************************************************************
*/
/* Includes ------------------------------------------------------------------*/
#include "main.h"
/** @addtogroup STM32F7xx_HAL_Examples
* @{
*/
/** @addtogroup BSP
* @{
*/
/* Private typedef -----------------------------------------------------------*/
/* Private define ------------------------------------------------------------*/
#define CIRCLE_RADIUS 37
#define LINE_LENGHT 30
/* Private macro -------------------------------------------------------------*/
#define CIRCLE_XPOS(i) ((i * BSP_LCD_GetXSize()) / 5)
#define CIRCLE_YPOS(i) (BSP_LCD_GetYSize() - CIRCLE_RADIUS - 60)
/* Private Structures and Enumerations ------------------------------------------------------------*/
/* Global variables ---------------------------------------------------------*/
TS_StateTypeDef TS_State = {0};
/* Private variables ---------------------------------------------------------*/
/* Private function prototypes -----------------------------------------------*/
static void Touchscreen_SetHint_Demo(void);
/* Private functions ---------------------------------------------------------*/
/**
* @brief Touchscreen Demo : test touchscreen calibration and single touch in polling mode
* @param None
* @retval None
*/
void TS_demo(void)
{
uint16_t x1, y1;
uint32_t ts_status = TS_OK;
/* Touchscreen initialization */
ts_status = BSP_TS_Init(BSP_LCD_GetXSize(), BSP_LCD_GetYSize());
if(ts_status == TS_OK)
{
/* Display touch screen demo description */
Touchscreen_SetHint_Demo();
while (CheckForUserInput() == 0)
{
/* Check in polling mode in touch screen the touch status and coordinates */
/* of touches if touch occurred */
ts_status = BSP_TS_GetState(&TS_State);
if(TS_State.touchDetected)
{
/* One or dual touch have been detected */
/* Only take into account the first touch so far */
/* Get X and Y position of the first touch post calibrated */
x1 = TS_State.touchX[0];
y1 = TS_State.touchY[0];
if((y1>83) && (y1<157))
{
if ((x1 > 23) && (x1 < 97))
{
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_FillCircle(60, 120, CIRCLE_RADIUS);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_FillCircle(180, 120, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(60, 200, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(180, 200, CIRCLE_RADIUS-1);
}
if ((x1 > 143) && (x1 < 217))
{
BSP_LCD_SetTextColor(LCD_COLOR_RED);
BSP_LCD_FillCircle(180, 120, CIRCLE_RADIUS);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_FillCircle(60, 120, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(60, 200, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(180, 200, CIRCLE_RADIUS-1);
}
}
if((y1>163) && (y1<237))
{
if ((x1 > 23) && (x1 < 97))
{
BSP_LCD_SetTextColor(LCD_COLOR_YELLOW);
BSP_LCD_FillCircle(60, 200, CIRCLE_RADIUS);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_FillCircle(180, 120, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(60, 120, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(180, 200, CIRCLE_RADIUS-1);
}
if ((x1 > 143) && (x1 < 217))
{
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_FillCircle(180, 200, CIRCLE_RADIUS);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_FillCircle(180, 120, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(60, 120, CIRCLE_RADIUS-1);
BSP_LCD_FillCircle(60, 200, CIRCLE_RADIUS-1);
}
}
}
}
return;
}
}
/**
* @brief Display TS Demo Hint for all touchscreen demos depending on passed
* demoIndex in parameter.
* @param demoIndex : parameter of type @ref TouchScreenDemoTypeDef
* @retval None
*/
static void Touchscreen_SetHint_Demo(void)
{
/* Clear the LCD */
BSP_LCD_Clear(LCD_COLOR_WHITE);
/* Set Touchscreen Demo1 description */
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_FillRect(0, 0, BSP_LCD_GetXSize(), 80);
BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
BSP_LCD_SetBackColor(LCD_COLOR_BLUE);
BSP_LCD_SetFont(&Font16);
BSP_LCD_DisplayStringAt(0, 0, (uint8_t *)"TS basic polling", CENTER_MODE);
BSP_LCD_SetFont(&Font12);
BSP_LCD_DisplayStringAt(0, 30, (uint8_t *)"Touch the screen to activate", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, 45, (uint8_t *)"the colored circle inside the", CENTER_MODE);
BSP_LCD_DisplayStringAt(0, 60, (uint8_t *)"rectangle. Then press User button", CENTER_MODE);
BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
BSP_LCD_DrawCircle(60, 120, CIRCLE_RADIUS);
BSP_LCD_SetTextColor(LCD_COLOR_RED);
BSP_LCD_DrawCircle(180, 120, CIRCLE_RADIUS);
BSP_LCD_SetTextColor(LCD_COLOR_YELLOW);
BSP_LCD_DrawCircle(60, 200, CIRCLE_RADIUS);
BSP_LCD_SetTextColor(LCD_COLOR_GREEN);
BSP_LCD_DrawCircle(180, 200, CIRCLE_RADIUS);
}
/**
* @}
*/
/**
* @}
*/