School project.

Dependencies:   Timezone NTPClient BSP_DISCO_F746NG Grove_temperature

Committer:
tuxx0046
Date:
Thu Jan 21 12:43:03 2021 +0000
Revision:
20:9d4450357ce7
Parent:
17:01ebfd8ab87a
Updated libraries used section in comments in main.cpp

Who changed what in which revision?

UserRevisionLine numberNew contents of line
tuxx0046 3:02e7aac23ff9 1 /**
tuxx0046 10:137cf2c92871 2 @file lcd_functions.h
tuxx0046 10:137cf2c92871 3 @author Tu Tri Huynh
tuxx0046 10:137cf2c92871 4 @date January 13, 2021
tuxx0046 13:41debc0b9063 5 @brief This file contains functions for the LCD display. The display is visually divided into four equal parts to output different things.
tuxx0046 10:137cf2c92871 6 @section Useful information
tuxx0046 3:02e7aac23ff9 7 LCD size is (480, 272)
tuxx0046 10:137cf2c92871 8 Available font sizes are Font8, Font12, Font16, Font20 or Font24
tuxx0046 10:137cf2c92871 9 */
tuxx0046 3:02e7aac23ff9 10
tuxx0046 4:1a12157689a7 11 /**
tuxx0046 16:296d68305630 12 This function will initialize the LCD display for use
tuxx0046 13:41debc0b9063 13 1/13/2021
tuxx0046 4:1a12157689a7 14 */
tuxx0046 3:02e7aac23ff9 15 void lcd_initialize()
tuxx0046 3:02e7aac23ff9 16 {
tuxx0046 3:02e7aac23ff9 17 BSP_LCD_Init();
tuxx0046 4:1a12157689a7 18 BSP_LCD_LayerDefaultInit(LTDC_ACTIVE_LAYER, LCD_FB_START_ADDRESS);
tuxx0046 4:1a12157689a7 19 BSP_LCD_SelectLayer(LTDC_ACTIVE_LAYER);
tuxx0046 4:1a12157689a7 20 }
tuxx0046 4:1a12157689a7 21
tuxx0046 13:41debc0b9063 22
tuxx0046 3:02e7aac23ff9 23
tuxx0046 4:1a12157689a7 24 /**
tuxx0046 16:296d68305630 25 This function will run a screen in LCD display that tells user to configure the unit
tuxx0046 13:41debc0b9063 26 1/13/2021
tuxx0046 4:1a12157689a7 27 */
tuxx0046 4:1a12157689a7 28 void lcd_show_setup_screen()
tuxx0046 4:1a12157689a7 29 {
tuxx0046 4:1a12157689a7 30 /// Clears the LCD with specified color
tuxx0046 4:1a12157689a7 31 BSP_LCD_Clear(LCD_COLOR_BLACK);
tuxx0046 4:1a12157689a7 32 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
tuxx0046 4:1a12157689a7 33 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
tuxx0046 4:1a12157689a7 34 BSP_LCD_SetFont(&Font24);
tuxx0046 4:1a12157689a7 35 BSP_LCD_DisplayStringAt(0, 50, (uint8_t *)"SETUP", CENTER_MODE);
tuxx0046 4:1a12157689a7 36 BSP_LCD_SetFont(&Font16);
tuxx0046 10:137cf2c92871 37 BSP_LCD_DisplayStringAt(0, 200, (uint8_t *)"Please configure the unit", CENTER_MODE);
tuxx0046 4:1a12157689a7 38 }
tuxx0046 4:1a12157689a7 39
tuxx0046 4:1a12157689a7 40 /**
tuxx0046 16:296d68305630 41 This function will run the startup screen with project- and developername
tuxx0046 13:41debc0b9063 42 1/13/2021
tuxx0046 4:1a12157689a7 43 */
tuxx0046 3:02e7aac23ff9 44 void lcd_show_startup_screen()
tuxx0046 3:02e7aac23ff9 45 {
tuxx0046 3:02e7aac23ff9 46 BSP_LCD_Clear(LCD_COLOR_BLACK);
tuxx0046 3:02e7aac23ff9 47 BSP_LCD_SetBackColor(LCD_COLOR_BLACK);
tuxx0046 3:02e7aac23ff9 48 BSP_LCD_SetTextColor(LCD_COLOR_ORANGE);
tuxx0046 3:02e7aac23ff9 49 BSP_LCD_DisplayStringAt(0, 100, (uint8_t *)"Light Control System", CENTER_MODE);
tuxx0046 3:02e7aac23ff9 50 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
tuxx0046 3:02e7aac23ff9 51 BSP_LCD_DisplayStringAt(0, 200, (uint8_t *)"by Tu Tri Huynh", CENTER_MODE);
tuxx0046 3:02e7aac23ff9 52 HAL_Delay(3000);
tuxx0046 3:02e7aac23ff9 53 }
tuxx0046 3:02e7aac23ff9 54
tuxx0046 4:1a12157689a7 55 /**
tuxx0046 4:1a12157689a7 56 Sets up the upper left part of screen
tuxx0046 13:41debc0b9063 57 1/18/2021
tuxx0046 3:02e7aac23ff9 58 */
tuxx0046 3:02e7aac23ff9 59 void lcd_upper_left()
tuxx0046 3:02e7aac23ff9 60 {
tuxx0046 13:41debc0b9063 61 BSP_LCD_SetTextColor(LCD_COLOR_ORANGE);
tuxx0046 3:02e7aac23ff9 62 BSP_LCD_FillRect(0, 0, 240, 136);
tuxx0046 3:02e7aac23ff9 63 }
tuxx0046 3:02e7aac23ff9 64
tuxx0046 13:41debc0b9063 65 /**
tuxx0046 13:41debc0b9063 66 Update the content of the upper left part of display.
tuxx0046 13:41debc0b9063 67 1/18/2021
tuxx0046 13:41debc0b9063 68 */
tuxx0046 17:01ebfd8ab87a 69 void lcd_update_upper_left(char current_time[])
tuxx0046 13:41debc0b9063 70 {
tuxx0046 15:638e65c37d58 71 BSP_LCD_SetBackColor(LCD_COLOR_ORANGE);
tuxx0046 15:638e65c37d58 72 BSP_LCD_SetTextColor(LCD_COLOR_BLUE);
tuxx0046 15:638e65c37d58 73 BSP_LCD_SetFont(&Font24);
tuxx0046 17:01ebfd8ab87a 74 BSP_LCD_DisplayStringAt(50, 55, (uint8_t *)current_time, LEFT_MODE);
tuxx0046 17:01ebfd8ab87a 75 BSP_LCD_SetTextColor(LCD_COLOR_ORANGE);
tuxx0046 17:01ebfd8ab87a 76 /// Used to hide some weird artifacts in time string
tuxx0046 17:01ebfd8ab87a 77 BSP_LCD_FillRect(185, 52, 30, 30);
tuxx0046 13:41debc0b9063 78 }
tuxx0046 13:41debc0b9063 79
tuxx0046 13:41debc0b9063 80 /**
tuxx0046 13:41debc0b9063 81 Sets up the upper right part of display
tuxx0046 13:41debc0b9063 82 1/18/2021
tuxx0046 13:41debc0b9063 83 */
tuxx0046 3:02e7aac23ff9 84 void lcd_upper_right()
tuxx0046 3:02e7aac23ff9 85 {
tuxx0046 3:02e7aac23ff9 86 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
tuxx0046 3:02e7aac23ff9 87 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
tuxx0046 3:02e7aac23ff9 88 BSP_LCD_FillRect(240, 0, 240, 136);
tuxx0046 15:638e65c37d58 89 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
tuxx0046 15:638e65c37d58 90 BSP_LCD_SetTextColor(LCD_COLOR_DARKYELLOW);
tuxx0046 15:638e65c37d58 91 BSP_LCD_SetFont(&Font20);
tuxx0046 15:638e65c37d58 92 BSP_LCD_DisplayStringAt(5, 16, (uint8_t *)"Light settings", RIGHT_MODE);
tuxx0046 3:02e7aac23ff9 93 }
tuxx0046 3:02e7aac23ff9 94
tuxx0046 16:296d68305630 95 /**
tuxx0046 16:296d68305630 96 Update the content of the upper right part of display.
tuxx0046 15:638e65c37d58 97 @param light_reading The intensity level of registered light in percentage
tuxx0046 15:638e65c37d58 98 @param rotary_reading The current position of rotary sensor in percentage
tuxx0046 13:41debc0b9063 99 1/18/2021
tuxx0046 13:41debc0b9063 100 */
tuxx0046 13:41debc0b9063 101 void lcd_update_upper_right(int light_reading, int rotary_reading)
tuxx0046 3:02e7aac23ff9 102 {
tuxx0046 15:638e65c37d58 103 BSP_LCD_SetBackColor(LCD_COLOR_WHITE);
tuxx0046 15:638e65c37d58 104 BSP_LCD_SetTextColor(LCD_COLOR_DARKYELLOW);
tuxx0046 4:1a12157689a7 105 BSP_LCD_SetFont(&Font16);
tuxx0046 15:638e65c37d58 106 char light_to_lcd[30];
tuxx0046 15:638e65c37d58 107 char rotary_to_lcd[30];
tuxx0046 15:638e65c37d58 108 sprintf(light_to_lcd, "Light intensity: %3i%%", light_reading);
tuxx0046 15:638e65c37d58 109 sprintf(rotary_to_lcd, "Rotary turned: %3i%%", rotary_reading);
tuxx0046 15:638e65c37d58 110
tuxx0046 15:638e65c37d58 111 BSP_LCD_DisplayStringAt(0, 46, (uint8_t *)light_to_lcd, RIGHT_MODE);
tuxx0046 15:638e65c37d58 112 BSP_LCD_DisplayStringAt(0, 70, (uint8_t *)rotary_to_lcd, RIGHT_MODE);
tuxx0046 13:41debc0b9063 113 }
tuxx0046 13:41debc0b9063 114
tuxx0046 13:41debc0b9063 115 /**
tuxx0046 13:41debc0b9063 116 Sets up the lower left part of display
tuxx0046 13:41debc0b9063 117 1/13/2021
tuxx0046 13:41debc0b9063 118 */
tuxx0046 13:41debc0b9063 119 void lcd_lower_left()
tuxx0046 13:41debc0b9063 120 {
tuxx0046 13:41debc0b9063 121 BSP_LCD_SetBackColor(LCD_COLOR_DARKMAGENTA);
tuxx0046 13:41debc0b9063 122 BSP_LCD_SetTextColor(LCD_COLOR_DARKMAGENTA);
tuxx0046 13:41debc0b9063 123 BSP_LCD_FillRect(0, 136, 240, 136);
tuxx0046 13:41debc0b9063 124 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
tuxx0046 13:41debc0b9063 125 BSP_LCD_SetFont(&Font20);
tuxx0046 13:41debc0b9063 126 BSP_LCD_DisplayStringAt(5, 160, (uint8_t *)"Location", LEFT_MODE);
tuxx0046 3:02e7aac23ff9 127 }
tuxx0046 3:02e7aac23ff9 128
tuxx0046 13:41debc0b9063 129 /**
tuxx0046 13:41debc0b9063 130 Updates the content of the lower left area of the display
tuxx0046 16:296d68305630 131 @param building[] Name of the building
tuxx0046 16:296d68305630 132 @param room[] Name of the room
tuxx0046 13:41debc0b9063 133 1/18/2021
tuxx0046 13:41debc0b9063 134 */
tuxx0046 13:41debc0b9063 135 void lcd_update_lower_left(char building[], char room[])
tuxx0046 13:41debc0b9063 136 {
tuxx0046 13:41debc0b9063 137 BSP_LCD_SetBackColor(LCD_COLOR_DARKMAGENTA);
tuxx0046 13:41debc0b9063 138 BSP_LCD_SetTextColor(LCD_COLOR_WHITE);
tuxx0046 16:296d68305630 139 BSP_LCD_SetFont(&Font16);
tuxx0046 13:41debc0b9063 140 BSP_LCD_DisplayStringAt(35, 200, (uint8_t *)building, LEFT_MODE);
tuxx0046 13:41debc0b9063 141 BSP_LCD_DisplayStringAt(35, 220, (uint8_t *)room, LEFT_MODE);
tuxx0046 13:41debc0b9063 142 }
tuxx0046 13:41debc0b9063 143
tuxx0046 13:41debc0b9063 144 /**
tuxx0046 13:41debc0b9063 145 Sets up the lower right part of display
tuxx0046 13:41debc0b9063 146 1/18/2021
tuxx0046 13:41debc0b9063 147 */
tuxx0046 3:02e7aac23ff9 148 void lcd_lower_right()
tuxx0046 3:02e7aac23ff9 149 {
tuxx0046 3:02e7aac23ff9 150 BSP_LCD_SetTextColor(LCD_COLOR_CYAN);
tuxx0046 3:02e7aac23ff9 151 BSP_LCD_FillRect(240, 136, 240, 136);
tuxx0046 13:41debc0b9063 152 BSP_LCD_SetBackColor(LCD_COLOR_CYAN);
tuxx0046 13:41debc0b9063 153 BSP_LCD_SetTextColor(LCD_COLOR_ORANGE);
tuxx0046 13:41debc0b9063 154 BSP_LCD_SetFont(&Font20);
tuxx0046 13:41debc0b9063 155 BSP_LCD_DisplayStringAt(5, 160, (uint8_t *)"Temperature", RIGHT_MODE);
tuxx0046 17:01ebfd8ab87a 156 BSP_LCD_SetFont(&Font16);
tuxx0046 13:41debc0b9063 157 }
tuxx0046 13:41debc0b9063 158
tuxx0046 13:41debc0b9063 159 /** Update the content of the lower right part of display.
tuxx0046 15:638e65c37d58 160 @param temp The temperature reading from the thermal sensor
tuxx0046 15:638e65c37d58 161 @param is_fahrenheit The bool value to determine if temperature unit should switch to fahrenheit or not
tuxx0046 13:41debc0b9063 162 1/18/2021
tuxx0046 13:41debc0b9063 163 */
tuxx0046 13:41debc0b9063 164 void lcd_update_lower_right(float temp, bool is_fahrenheit)
tuxx0046 13:41debc0b9063 165 {
tuxx0046 13:41debc0b9063 166 char temp_text[30];
tuxx0046 13:41debc0b9063 167 if (is_fahrenheit == true)
tuxx0046 13:41debc0b9063 168 {
tuxx0046 13:41debc0b9063 169 float fahrenheit = helper_convert_celsius_to_fahrenheit(temp);
tuxx0046 13:41debc0b9063 170 sprintf(temp_text, "%3.0f F", fahrenheit);
tuxx0046 13:41debc0b9063 171 }
tuxx0046 13:41debc0b9063 172 else
tuxx0046 13:41debc0b9063 173 {
tuxx0046 13:41debc0b9063 174 sprintf(temp_text, "%2.0f C", temp);
tuxx0046 13:41debc0b9063 175 }
tuxx0046 13:41debc0b9063 176 BSP_LCD_SetBackColor(LCD_COLOR_CYAN);
tuxx0046 13:41debc0b9063 177 BSP_LCD_SetTextColor(LCD_COLOR_ORANGE);
tuxx0046 13:41debc0b9063 178 BSP_LCD_SetFont(&Font24);
tuxx0046 13:41debc0b9063 179 BSP_LCD_DisplayStringAt(35, 210, (uint8_t *)temp_text, RIGHT_MODE);
tuxx0046 13:41debc0b9063 180 BSP_LCD_DrawCircle(421, 214, 3);
tuxx0046 17:01ebfd8ab87a 181 BSP_LCD_SetFont(&Font16);
tuxx0046 3:02e7aac23ff9 182 }
tuxx0046 3:02e7aac23ff9 183
tuxx0046 16:296d68305630 184 /**
tuxx0046 16:296d68305630 185 This function will show the default main screen on display
tuxx0046 16:296d68305630 186 1/19/2021
tuxx0046 16:296d68305630 187 */
tuxx0046 3:02e7aac23ff9 188 void lcd_show_main_screen()
tuxx0046 3:02e7aac23ff9 189 {
tuxx0046 3:02e7aac23ff9 190 BSP_LCD_Clear(LCD_COLOR_DARKBLUE); // Clear with color
tuxx0046 3:02e7aac23ff9 191 lcd_upper_left();
tuxx0046 17:01ebfd8ab87a 192 lcd_lower_left();
tuxx0046 17:01ebfd8ab87a 193 lcd_lower_right();
tuxx0046 15:638e65c37d58 194 lcd_upper_right();
tuxx0046 13:41debc0b9063 195 }
tuxx0046 13:41debc0b9063 196
tuxx0046 13:41debc0b9063 197 /**
tuxx0046 13:41debc0b9063 198 This function will print LCD size in console terminal
tuxx0046 16:296d68305630 199 1/13/2021
tuxx0046 13:41debc0b9063 200 */
tuxx0046 13:41debc0b9063 201 void lcd_get_screen_size()
tuxx0046 13:41debc0b9063 202 {
tuxx0046 13:41debc0b9063 203 printf("LCD X size : %zu\n\r",BSP_LCD_GetXSize()); //result: 480
tuxx0046 13:41debc0b9063 204 printf("LCD Y size : %zu\n\r",BSP_LCD_GetYSize()); //result: 272
tuxx0046 3:02e7aac23ff9 205 }