Add V2 implementation (not tested)
This commit is contained in:
parent
8c10217a89
commit
cf3ebbc7e0
@ -23,6 +23,7 @@
|
|||||||
/* USER CODE BEGIN Includes */
|
/* USER CODE BEGIN Includes */
|
||||||
#include "display.h"
|
#include "display.h"
|
||||||
#include "fonts.h"
|
#include "fonts.h"
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
/* USER CODE END Includes */
|
/* USER CODE END Includes */
|
||||||
|
|
||||||
@ -41,6 +42,17 @@
|
|||||||
|
|
||||||
#define BUTTON_GPIO_PORT GPIOA
|
#define BUTTON_GPIO_PORT GPIOA
|
||||||
#define BUTTON_GPIO_PIN GPIO_PIN_0
|
#define BUTTON_GPIO_PIN GPIO_PIN_0
|
||||||
|
|
||||||
|
#define TOUCH_EVENT_IS_PRESSED 8
|
||||||
|
#define TOUCH_EVENT_NOT_PRESSED 4
|
||||||
|
#define TOUCH_EVENT_JUST_PRESSED 0
|
||||||
|
|
||||||
|
// calibrate touch display
|
||||||
|
#define CAL_TOUCH_TOP_LEFT_X 0
|
||||||
|
#define CAL_TOUCH_TOP_LEFT_Y 0
|
||||||
|
#define CAL_TOUCH_BOT_RIGHT_X 200
|
||||||
|
#define CAL_TOUCH_BOT_RIGHT_Y 200
|
||||||
|
|
||||||
/* USER CODE END PD */
|
/* USER CODE END PD */
|
||||||
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
/* Private macro -------------------------------------------------------------*/
|
||||||
@ -87,6 +99,26 @@ uint32_t time_msPassedSince(uint32_t timestampOld)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static inline int32_t clamp_i16(int32_t value, int32_t min, int32_t max)
|
||||||
|
{
|
||||||
|
if (value < min) return min;
|
||||||
|
if (value > max) return max;
|
||||||
|
return value;
|
||||||
|
}
|
||||||
|
|
||||||
|
// function for drawing a button either pressed or released
|
||||||
|
void drawButton(bool isPressed){
|
||||||
|
if (isPressed){
|
||||||
|
Display_FillRect( 75, 130, 100, 100, LCD_COLOR_RED );
|
||||||
|
Display_DrawRect( 74, 129, 102, 102, LCD_COLOR_RED );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Display_FillRect( 75, 130, 100, 100, LCD_COLOR_BLACK );
|
||||||
|
Display_DrawRect( 74, 129, 102, 102, LCD_COLOR_RED );
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END 0 */
|
/* USER CODE END 0 */
|
||||||
|
|
||||||
@ -126,10 +158,18 @@ int main(void)
|
|||||||
|
|
||||||
Display_Init();
|
Display_Init();
|
||||||
// local variables
|
// local variables
|
||||||
uint32_t timestamp_lastBlinked = HAL_GetTick();
|
uint32_t timestamp_lastCounted = HAL_GetTick();
|
||||||
uint32_t timestamp_lastButtonPolled = timestamp_lastBlinked;
|
uint32_t timestamp_lastTouchRead = HAL_GetTick();
|
||||||
uint32_t timestamp_lastHelloPrinted = timestamp_lastBlinked;
|
uint8_t i = 100;
|
||||||
uint8_t printCount = 0;
|
uint8_t DataRx[4];
|
||||||
|
uint8_t Eventflag = TOUCH_EVENT_NOT_PRESSED, EventflagLast = TOUCH_EVENT_NOT_PRESSED;
|
||||||
|
uint16_t xRaw, yRaw;
|
||||||
|
int32_t xTouch, yTouch;
|
||||||
|
bool buttonIsPressed;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
drawButton(false);
|
||||||
|
|
||||||
/* USER CODE END 2 */
|
/* USER CODE END 2 */
|
||||||
|
|
||||||
@ -137,44 +177,72 @@ int main(void)
|
|||||||
/* USER CODE BEGIN WHILE */
|
/* USER CODE BEGIN WHILE */
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
|
// display 100 count down
|
||||||
|
if (time_msPassedSince(timestamp_lastCounted) >= 100) {
|
||||||
|
timestamp_lastCounted = HAL_GetTick();
|
||||||
|
Display_Printf( 0, 10,
|
||||||
|
LCD_COLOR_WHITE, LCD_COLOR_BLACK,
|
||||||
|
&FontBig,
|
||||||
|
"Zahl %d", i
|
||||||
|
);
|
||||||
|
if (i == 0) i = 100;
|
||||||
|
else i--;
|
||||||
|
}
|
||||||
|
|
||||||
uint8_t DataRx[4];
|
|
||||||
//...
|
|
||||||
uint8_t Eventflag;
|
|
||||||
uint16_t xTouch, yTouch;
|
|
||||||
|
|
||||||
|
|
||||||
|
// every 20ms: read touch, print values, convert values, draw pixel, handle button
|
||||||
|
if (time_msPassedSince(timestamp_lastTouchRead) >= 20) { // run this block every 20ms
|
||||||
|
timestamp_lastTouchRead = HAL_GetTick();
|
||||||
|
// read touch register
|
||||||
|
HAL_I2C_Mem_Read(I2C3, 112, 3, I2C_MEMADD_SIZE_8BIT, DataRx, 4, 1000);
|
||||||
|
|
||||||
|
// interpret received data
|
||||||
|
EventflagLast = Eventflag;
|
||||||
Eventflag = (uint8_t)(DataRx[0] >> 4);
|
Eventflag = (uint8_t)(DataRx[0] >> 4);
|
||||||
|
yRaw = (uint16_t)((DataRx[0] & 0b00001111) << 8) | (uint16_t)DataRx[1];
|
||||||
|
xRaw = (uint16_t)((DataRx[2] & 0b00001111) << 8) | (uint16_t)DataRx[3];
|
||||||
|
|
||||||
yTouch = (uint16_t)((DataRx[0] & 0b00001111) << 8) | (uint16_t)DataRx[1];
|
// show pos values on display
|
||||||
|
if (Eventflag == TOUCH_EVENT_IS_PRESSED) printf("is pressed \n");
|
||||||
|
Display_Printf( 0, 30,
|
||||||
|
LCD_COLOR_WHITE, LCD_COLOR_BLACK,
|
||||||
|
&FontBig,
|
||||||
|
"x=%d y=%d", xRaw, yRaw
|
||||||
|
);
|
||||||
|
|
||||||
xTouch = (uint16_t)((DataRx[2] & 0b00001111) << 8) | (uint16_t)DataRx[3];
|
//scale to display size
|
||||||
|
xTouch = 239 * ((int32_t)xRaw - CAL_TOUCH_TOP_LEFT_X) / ((int32_t)CAL_TOUCH_BOT_RIGHT_X - CAL_TOUCH_TOP_LEFT_X);
|
||||||
|
yTouch = 239 * ((int32_t)yRaw - CAL_TOUCH_TOP_LEFT_Y) / ((int32_t)CAL_TOUCH_BOT_RIGHT_Y - CAL_TOUCH_TOP_LEFT_Y);
|
||||||
|
xTouch = clamp_i16(xTouch, 0, 239);
|
||||||
|
yTouch = clamp_i16(yTouch, 0, 239);
|
||||||
|
|
||||||
// blink blue led (toggle state every 500ms)
|
|
||||||
if (time_msPassedSince(timestamp_lastBlinked) >= 500) {
|
// draw position when pressed
|
||||||
//HAL_GPIO_TogglePin(LED_BLUE_GPIO_PORT, LED_BLUE_GPIO_PIN);
|
if (Eventflag == TOUCH_EVENT_IS_PRESSED){
|
||||||
HAL_GPIO_TogglePin(LED_BLUE_GPIO_PORT, LED_BLUE_GPIO_PIN);
|
Display_DrawPixel( (uint16_t)xTouch, (uint16_t)yTouch, LCD_COLOR_WHITE );
|
||||||
//printf("toggle blue led\n\r");
|
|
||||||
timestamp_lastBlinked = HAL_GetTick();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// poll button every 25ms and set red-led accordingly
|
|
||||||
if (time_msPassedSince(timestamp_lastButtonPolled) >= 25) {
|
|
||||||
GPIO_PinState buttonState = HAL_GPIO_ReadPin(BUTTON_GPIO_PORT, BUTTON_GPIO_PIN);
|
|
||||||
//printf("buttonState = %d\n\r", buttonState);
|
|
||||||
HAL_GPIO_WritePin(LED_RED_GPIO_PORT, LED_RED_GPIO_PIN, buttonState);
|
|
||||||
timestamp_lastButtonPolled = HAL_GetTick();
|
|
||||||
}
|
|
||||||
|
|
||||||
// print "Hallo Welt" via UART every 1000ms
|
// determine button pressed condition
|
||||||
if (time_msPassedSince(timestamp_lastHelloPrinted) >= 1000) {
|
bool isInsideButtonArea = xTouch > 75 && xTouch < (75+100) && yTouch > 130 && yTouch < (130+100);
|
||||||
printf("Hallo Welt %d\n\r", printCount++);
|
bool touchIsPressed = Eventflag == TOUCH_EVENT_IS_PRESSED;
|
||||||
timestamp_lastHelloPrinted = HAL_GetTick();
|
|
||||||
}
|
bool buttonIsPressedLast = buttonIsPressed;
|
||||||
|
buttonIsPressed = isInsideButtonArea && touchIsPressed;
|
||||||
|
|
||||||
|
// just got pressed -> draw pressed button
|
||||||
|
if (buttonIsPressed && !buttonIsPressedLast) drawButton(true);
|
||||||
|
// just got released -> draw released button
|
||||||
|
if (!buttonIsPressed && buttonIsPressedLast) drawButton(false);
|
||||||
|
|
||||||
|
} // end "run every 20ms"
|
||||||
|
|
||||||
|
|
||||||
/* USER CODE END WHILE */
|
/* USER CODE END WHILE */
|
||||||
|
|
||||||
/* USER CODE BEGIN 3 */
|
/* USER CODE BEGIN 3 */
|
||||||
}
|
} //end while(1)
|
||||||
/* USER CODE END 3 */
|
/* USER CODE END 3 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
../Core/Src/main.c:76:5:_write 1
|
../Core/Src/main.c:81:5:_write 1
|
||||||
../Core/Src/main.c:83:10:time_msPassedSince 1
|
../Core/Src/main.c:88:10:time_msPassedSince 1
|
||||||
../Core/Src/main.c:97:5:main 4
|
../Core/Src/main.c:95:23:clamp_i16 3
|
||||||
../Core/Src/main.c:185:6:SystemClock_Config 4
|
../Core/Src/main.c:103:6:drawButton 2
|
||||||
../Core/Src/main.c:242:13:MX_I2C3_Init 4
|
../Core/Src/main.c:122:5:main 16
|
||||||
../Core/Src/main.c:290:13:MX_USART6_UART_Init 2
|
../Core/Src/main.c:249:6:SystemClock_Config 4
|
||||||
../Core/Src/main.c:321:13:MX_FMC_Init 2
|
../Core/Src/main.c:306:13:MX_I2C3_Init 4
|
||||||
../Core/Src/main.c:379:13:MX_GPIO_Init 1
|
../Core/Src/main.c:354:13:MX_USART6_UART_Init 2
|
||||||
../Core/Src/main.c:757:6:HAL_TIM_PeriodElapsedCallback 2
|
../Core/Src/main.c:385:13:MX_FMC_Init 2
|
||||||
../Core/Src/main.c:775:6:Error_Handler 1
|
../Core/Src/main.c:443:13:MX_GPIO_Init 1
|
||||||
|
../Core/Src/main.c:821:6:HAL_TIM_PeriodElapsedCallback 2
|
||||||
|
../Core/Src/main.c:839:6:Error_Handler 1
|
||||||
|
|||||||
@ -1,10 +1,12 @@
|
|||||||
../Core/Src/main.c:76:5:_write 24 static
|
../Core/Src/main.c:81:5:_write 24 static
|
||||||
../Core/Src/main.c:83:10:time_msPassedSince 16 static
|
../Core/Src/main.c:88:10:time_msPassedSince 16 static
|
||||||
../Core/Src/main.c:97:5:main 32 static
|
../Core/Src/main.c:95:23:clamp_i16 24 static
|
||||||
../Core/Src/main.c:185:6:SystemClock_Config 88 static
|
../Core/Src/main.c:103:6:drawButton 24 static
|
||||||
../Core/Src/main.c:242:13:MX_I2C3_Init 8 static
|
../Core/Src/main.c:122:5:main 56 static
|
||||||
../Core/Src/main.c:290:13:MX_USART6_UART_Init 8 static
|
../Core/Src/main.c:249:6:SystemClock_Config 88 static
|
||||||
../Core/Src/main.c:321:13:MX_FMC_Init 40 static
|
../Core/Src/main.c:306:13:MX_I2C3_Init 8 static
|
||||||
../Core/Src/main.c:379:13:MX_GPIO_Init 64 static
|
../Core/Src/main.c:354:13:MX_USART6_UART_Init 8 static
|
||||||
../Core/Src/main.c:757:6:HAL_TIM_PeriodElapsedCallback 16 static
|
../Core/Src/main.c:385:13:MX_FMC_Init 40 static
|
||||||
../Core/Src/main.c:775:6:Error_Handler 4 static,ignoring_inline_asm
|
../Core/Src/main.c:443:13:MX_GPIO_Init 64 static
|
||||||
|
../Core/Src/main.c:821:6:HAL_TIM_PeriodElapsedCallback 16 static
|
||||||
|
../Core/Src/main.c:839:6:Error_Handler 4 static,ignoring_inline_asm
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
Loading…
x
Reference in New Issue
Block a user