School project.

Dependencies:   Timezone NTPClient BSP_DISCO_F746NG Grove_temperature

Committer:
tuxx0046
Date:
Mon Jan 18 13:39:58 2021 +0000
Revision:
13:41debc0b9063
Parent:
10:137cf2c92871
Child:
15:638e65c37d58
Temperature reading functionality added.; Button functionality added, so a button press will change temperature from celsius to fahrenheit.; Comments fixed and added.

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