From 2f796255f6918644f7325441193d90c2f3d982a8 Mon Sep 17 00:00:00 2001 From: Dmitry Maylarov Date: Fri, 12 Jul 2019 11:00:27 +0300 Subject: [PATCH] usability fixes --- Core/Inc/game.h | 2 +- Core/Src/lcd.c | 5 +++++ Core/Src/main.c | 20 +++++++++++--------- 3 files changed, 17 insertions(+), 10 deletions(-) diff --git a/Core/Inc/game.h b/Core/Inc/game.h index 249a008..a772304 100644 --- a/Core/Inc/game.h +++ b/Core/Inc/game.h @@ -2,7 +2,7 @@ #define __GAME_H #define MAX_PLAYERS 6 #define TIMER_MAX 180 -#define TIMER_STEP 5 +#define TIMER_STEP 10 #include #include diff --git a/Core/Src/lcd.c b/Core/Src/lcd.c index e1085a9..122f92c 100644 --- a/Core/Src/lcd.c +++ b/Core/Src/lcd.c @@ -98,6 +98,11 @@ void LCD_MoveCursor(LCD_HandleTypeDef *lcd, uint8_t line, uint8_t column) { LCD_SendCommand(lcd, LCD_SETDDRAMADDR | (LINE_BEGIN[line] + column) ); } +void LCD_MoveHome(LCD_HandleTypeDef *lcd) { + LCD_SendCommand(lcd, LCD_RETURNHOME ); + vTaskDelay(2); +} + void LCD_Init(LCD_HandleTypeDef *lcd) { //http://easyelectronics.ru/avr-uchebnyj-kurs-podklyuchenie-k-avr-lcd-displeya-hd44780.html //http://nerdralph.blogspot.com/2014/07/controlling-hd44780-displays.html diff --git a/Core/Src/main.c b/Core/Src/main.c index fb3c66c..144bbb5 100644 --- a/Core/Src/main.c +++ b/Core/Src/main.c @@ -456,13 +456,13 @@ void vTaskPlayerSetup(void *parameter) vTaskDelay(50); LCD_Init(&hlcd); vTaskDelay(50); - LCD_MoveCursor(&hlcd, 0, 0); + LCD_MoveHome(&hlcd); LCD_SendString(&hlcd, "Settings"); LCD_MoveCursor(&hlcd, 1, 0); while (1) { LCD_MoveCursor(&hlcd, 1, 0); - sprintf(lcdBuffer, "Players: %d ", game.activePlayers); + sprintf(lcdBuffer, "Players: %1d ", game.activePlayers); LCD_SendString(&hlcd, lcdBuffer); vTaskDelay(1); if (xSemaphoreTake(buttonPressed, portMAX_DELAY) == pdPASS ) @@ -477,7 +477,7 @@ void vTaskPlayerSetup(void *parameter) minusButton->pressed = false; RemovePlayer(); } - else if (bigButton->pressed) + else if (bigButton->pressed && game.activePlayers > 1) { break; } @@ -488,12 +488,12 @@ void vTaskPlayerSetup(void *parameter) } void vTaskTimerSetup(void *parameter) { - LCD_MoveCursor(&hlcd, 0, 0); + LCD_MoveHome(&hlcd); LCD_SendString(&hlcd, "Settings"); while (1) { LCD_MoveCursor(&hlcd, 1, 0); - sprintf(lcdBuffer, "Turn time: %3ld s ", game.turnTime); + sprintf(lcdBuffer, "Turn time: %1ld:%02ld ",game.turnTime / 60, game.turnTime % 60); LCD_SendString(&hlcd, lcdBuffer); vTaskDelay(1); if (xSemaphoreTake(buttonPressed, portMAX_DELAY) == pdPASS ) @@ -526,7 +526,7 @@ void vTaskTimerSetup(void *parameter) { } void vTaskConfig(void *parameter) { - LCD_MoveCursor(&hlcd, 0, 0); + LCD_MoveHome(&hlcd); LCD_SendString(&hlcd, "Settings"); while (1) { @@ -552,7 +552,9 @@ void vTaskConfig(void *parameter) { void vTaskTurn(void *parameter) { xTimerReset(secondsTimerHandle, 0); - + + LCD_MoveHome(&hlcd); + TickType_t xLastWakeTime; xLastWakeTime = xTaskGetTickCount(); @@ -642,13 +644,13 @@ void vTaskButtonPoll(void *parameter) { state = HAL_GPIO_ReadPin(buttons[i].port, buttons[i].pin); if (state != buttons[i].pressed) { - vTaskDelay(50); + vTaskDelay(25); state = HAL_GPIO_ReadPin(buttons[i].port, buttons[i].pin); if (state != buttons[i].pressed) buttons[i].pressed = !buttons[i].pressed; xSemaphoreGive(buttonPressed); } - vTaskDelay(25); + vTaskDelay(50); } } }