Touchscreen support graphics for setting up the RTC on the F746NG-DISCO board.
Dependents: DISCO-F746NG-clockSet DISCO-F746NG-clockSet-touch-demo
LCDclockSet.cpp@0:c6da6fc05965, 2016-03-04 (annotated)
- Committer:
- loopsva
- Date:
- Fri Mar 04 00:28:23 2016 +0000
- Revision:
- 0:c6da6fc05965
Touchscreen support graphics setting up the RTC on the F746NG-DISCO
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
loopsva | 0:c6da6fc05965 | 1 | #include "LCDclockSet.h" |
loopsva | 0:c6da6fc05965 | 2 | #include "button_group.hpp" |
loopsva | 0:c6da6fc05965 | 3 | |
loopsva | 0:c6da6fc05965 | 4 | extern LCD_DISCO_F746NG lcd; |
loopsva | 0:c6da6fc05965 | 5 | extern uint8_t lcd_text[]; |
loopsva | 0:c6da6fc05965 | 6 | |
loopsva | 0:c6da6fc05965 | 7 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:c6da6fc05965 | 8 | // Constructor and destructor |
loopsva | 0:c6da6fc05965 | 9 | |
loopsva | 0:c6da6fc05965 | 10 | LCDclockSet::LCDclockSet(const char* name) { |
loopsva | 0:c6da6fc05965 | 11 | } |
loopsva | 0:c6da6fc05965 | 12 | |
loopsva | 0:c6da6fc05965 | 13 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:c6da6fc05965 | 14 | // Draw 6 blocks with a special character in between for setting clock date and time |
loopsva | 0:c6da6fc05965 | 15 | |
loopsva | 0:c6da6fc05965 | 16 | const uint16_t SIZE_CLKBLK = 30; |
loopsva | 0:c6da6fc05965 | 17 | const uint16_t GAP_CLKBLK = 5; |
loopsva | 0:c6da6fc05965 | 18 | const uint16_t WIDEGAP_CLKBLK = 24; |
loopsva | 0:c6da6fc05965 | 19 | |
loopsva | 0:c6da6fc05965 | 20 | const uint16_t PX13_CLKBLK = 90; |
loopsva | 0:c6da6fc05965 | 21 | const uint16_t PY13_CLKBLK = 60; |
loopsva | 0:c6da6fc05965 | 22 | |
loopsva | 0:c6da6fc05965 | 23 | void LCDclockSet::DrawClockBlock(char chr) { |
loopsva | 0:c6da6fc05965 | 24 | lcd.SetBackColor(LCD_COLOR_BLACK); |
loopsva | 0:c6da6fc05965 | 25 | lcd.SetTextColor(LCD_COLOR_WHITE); |
loopsva | 0:c6da6fc05965 | 26 | int nBlocks = 2; |
loopsva | 0:c6da6fc05965 | 27 | uint16_t tX = PX13_CLKBLK; |
loopsva | 0:c6da6fc05965 | 28 | uint16_t tY = PY13_CLKBLK; |
loopsva | 0:c6da6fc05965 | 29 | for(int q = 0; q < 3; q++) { |
loopsva | 0:c6da6fc05965 | 30 | lcd.SetBackColor(LCD_COLOR_BLACK); |
loopsva | 0:c6da6fc05965 | 31 | lcd.SetTextColor(LCD_COLOR_GRAY); |
loopsva | 0:c6da6fc05965 | 32 | for(int i = 0; i < nBlocks; i++) { |
loopsva | 0:c6da6fc05965 | 33 | lcd.FillRect(tX, tY, SIZE_CLKBLK, SIZE_CLKBLK); |
loopsva | 0:c6da6fc05965 | 34 | lcd.DrawLine(tX, tY + SIZE_CLKBLK + 3, tX + SIZE_CLKBLK - 1, tY + SIZE_CLKBLK + 3); |
loopsva | 0:c6da6fc05965 | 35 | tX = tX + SIZE_CLKBLK + GAP_CLKBLK; |
loopsva | 0:c6da6fc05965 | 36 | } |
loopsva | 0:c6da6fc05965 | 37 | lcd.SetBackColor(LCD_COLOR_BLACK); |
loopsva | 0:c6da6fc05965 | 38 | lcd.SetTextColor(LCD_COLOR_CYAN); |
loopsva | 0:c6da6fc05965 | 39 | lcd.SetFont(&Font24); |
loopsva | 0:c6da6fc05965 | 40 | if(q != 2) { |
loopsva | 0:c6da6fc05965 | 41 | lcd.DisplayChar(tX + GAP_CLKBLK - 5, tY + 5, chr); |
loopsva | 0:c6da6fc05965 | 42 | } |
loopsva | 0:c6da6fc05965 | 43 | tX = tX + WIDEGAP_CLKBLK; |
loopsva | 0:c6da6fc05965 | 44 | } |
loopsva | 0:c6da6fc05965 | 45 | lcd.SetTextColor(LCD_COLOR_CYAN); |
loopsva | 0:c6da6fc05965 | 46 | lcd.SetFont(&Font16); |
loopsva | 0:c6da6fc05965 | 47 | lcd.SetTextColor(LCD_COLOR_CYAN); |
loopsva | 0:c6da6fc05965 | 48 | if(chr == ':') { |
loopsva | 0:c6da6fc05965 | 49 | sprintf((char*)lcd_text, "Set 24hr time: hh:mm:ss"); |
loopsva | 0:c6da6fc05965 | 50 | } else { |
loopsva | 0:c6da6fc05965 | 51 | sprintf((char*)lcd_text, " Set date: mm/dd/yy"); |
loopsva | 0:c6da6fc05965 | 52 | } |
loopsva | 0:c6da6fc05965 | 53 | lcd.DisplayStringAt(PX13_CLKBLK - 7, 40, (uint8_t *)&lcd_text, LEFT_MODE); |
loopsva | 0:c6da6fc05965 | 54 | } |
loopsva | 0:c6da6fc05965 | 55 | |
loopsva | 0:c6da6fc05965 | 56 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:c6da6fc05965 | 57 | //Constants for 12 block |
loopsva | 0:c6da6fc05965 | 58 | |
loopsva | 0:c6da6fc05965 | 59 | const int SIZE_12BLK = 35; |
loopsva | 0:c6da6fc05965 | 60 | const int GAP_12BLK = 10; |
loopsva | 0:c6da6fc05965 | 61 | |
loopsva | 0:c6da6fc05965 | 62 | const int PX13_12BLK = PX13_CLKBLK - 3; //starting X for blocks |
loopsva | 0:c6da6fc05965 | 63 | const int PY13_12BLK = 130; //starting Y for blocks |
loopsva | 0:c6da6fc05965 | 64 | |
loopsva | 0:c6da6fc05965 | 65 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:c6da6fc05965 | 66 | //Convert a touch to a number on one of the 6 blocks. Block number is 1 - 6 only!!!! |
loopsva | 0:c6da6fc05965 | 67 | |
loopsva | 0:c6da6fc05965 | 68 | void LCDclockSet::TouchClockBlock(int block_number, int value, bool erase) { |
loopsva | 0:c6da6fc05965 | 69 | int tX = PX13_CLKBLK + (block_number - 1) * (SIZE_CLKBLK + GAP_CLKBLK); |
loopsva | 0:c6da6fc05965 | 70 | int tY = PY13_CLKBLK; |
loopsva | 0:c6da6fc05965 | 71 | if(block_number > 4) tX = tX + WIDEGAP_CLKBLK; |
loopsva | 0:c6da6fc05965 | 72 | if(block_number > 2) tX = tX + WIDEGAP_CLKBLK; |
loopsva | 0:c6da6fc05965 | 73 | if (erase == true) { |
loopsva | 0:c6da6fc05965 | 74 | lcd.SetTextColor(LCD_COLOR_DARKGRAY); |
loopsva | 0:c6da6fc05965 | 75 | lcd.FillRect(tX, tY, SIZE_CLKBLK, SIZE_CLKBLK); |
loopsva | 0:c6da6fc05965 | 76 | return; |
loopsva | 0:c6da6fc05965 | 77 | } else { |
loopsva | 0:c6da6fc05965 | 78 | lcd.SetFont(&Font24); |
loopsva | 0:c6da6fc05965 | 79 | lcd.SetBackColor(LCD_COLOR_YELLOW); |
loopsva | 0:c6da6fc05965 | 80 | lcd.SetTextColor(LCD_COLOR_DARKGREEN); |
loopsva | 0:c6da6fc05965 | 81 | lcd.FillRect(tX, tY, SIZE_CLKBLK, SIZE_CLKBLK); |
loopsva | 0:c6da6fc05965 | 82 | sprintf((char*)lcd_text, "%d", value); |
loopsva | 0:c6da6fc05965 | 83 | lcd.DisplayStringAt(tX + 4, tY + 4, (uint8_t *)&lcd_text, LEFT_MODE); |
loopsva | 0:c6da6fc05965 | 84 | } |
loopsva | 0:c6da6fc05965 | 85 | } |
loopsva | 0:c6da6fc05965 | 86 | |
loopsva | 0:c6da6fc05965 | 87 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:c6da6fc05965 | 88 | //Draw 2 rows of 6 blocks and put numbers inside the blocks for later touch. In addition, add 2 more blocks to the |
loopsva | 0:c6da6fc05965 | 89 | //right with special characters |
loopsva | 0:c6da6fc05965 | 90 | |
loopsva | 0:c6da6fc05965 | 91 | void LCDclockSet::Draw12Block(int rot, uint32_t block_color, uint32_t text_color) { |
loopsva | 0:c6da6fc05965 | 92 | int nBlocks = 5; |
loopsva | 0:c6da6fc05965 | 93 | uint16_t tX = PX13_12BLK; |
loopsva | 0:c6da6fc05965 | 94 | uint16_t tY = PY13_12BLK; |
loopsva | 0:c6da6fc05965 | 95 | |
loopsva | 0:c6da6fc05965 | 96 | lcd.Clear(LCD_COLOR_BLACK); |
loopsva | 0:c6da6fc05965 | 97 | lcd.SetBackColor(block_color); |
loopsva | 0:c6da6fc05965 | 98 | for(int i = 0; i < nBlocks + 1; i++) { |
loopsva | 0:c6da6fc05965 | 99 | lcd.SetTextColor(block_color); |
loopsva | 0:c6da6fc05965 | 100 | lcd.DrawRect(tX, tY, SIZE_12BLK, SIZE_12BLK); |
loopsva | 0:c6da6fc05965 | 101 | tX = tX + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 102 | } |
loopsva | 0:c6da6fc05965 | 103 | tX = tX - (nBlocks + 1) * (SIZE_12BLK + GAP_12BLK); |
loopsva | 0:c6da6fc05965 | 104 | tY = tY + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 105 | for(int i = 0; i < nBlocks + 1; i++) { |
loopsva | 0:c6da6fc05965 | 106 | lcd.DrawRect(tX, tY, SIZE_12BLK, SIZE_12BLK); |
loopsva | 0:c6da6fc05965 | 107 | tX = tX + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 108 | } |
loopsva | 0:c6da6fc05965 | 109 | lcd.SetTextColor(text_color); |
loopsva | 0:c6da6fc05965 | 110 | lcd.SetFont(&Font24); |
loopsva | 0:c6da6fc05965 | 111 | tX = tX - (nBlocks + 1) * (SIZE_12BLK + GAP_12BLK) + 7; |
loopsva | 0:c6da6fc05965 | 112 | tY = tY - (SIZE_12BLK + GAP_12BLK) + 7; |
loopsva | 0:c6da6fc05965 | 113 | for(int i = 1; i < nBlocks + 1; i++) { |
loopsva | 0:c6da6fc05965 | 114 | sprintf((char*)lcd_text, "%d", i); |
loopsva | 0:c6da6fc05965 | 115 | lcd.DisplayStringAt(tX, tY, (uint8_t *)&lcd_text, LEFT_MODE); |
loopsva | 0:c6da6fc05965 | 116 | tX = tX + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 117 | } |
loopsva | 0:c6da6fc05965 | 118 | lcd.DisplayChar(tX, tY, '<'); |
loopsva | 0:c6da6fc05965 | 119 | tX = tX - nBlocks * (SIZE_12BLK + GAP_12BLK); |
loopsva | 0:c6da6fc05965 | 120 | tY = tY + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 121 | for(int i = 6; i < nBlocks + 5; i++) { |
loopsva | 0:c6da6fc05965 | 122 | sprintf((char*)lcd_text, "%d", i); |
loopsva | 0:c6da6fc05965 | 123 | lcd.DisplayStringAt(tX, tY, (uint8_t *)&lcd_text, LEFT_MODE); |
loopsva | 0:c6da6fc05965 | 124 | tX = tX + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 125 | } |
loopsva | 0:c6da6fc05965 | 126 | lcd.DisplayChar(tX, tY, '0'); |
loopsva | 0:c6da6fc05965 | 127 | tX = tX + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 128 | lcd.DisplayChar(tX, tY, '#'); |
loopsva | 0:c6da6fc05965 | 129 | } |
loopsva | 0:c6da6fc05965 | 130 | |
loopsva | 0:c6da6fc05965 | 131 | //--------------------------------------------------------------------------------------------------------------------------------------// |
loopsva | 0:c6da6fc05965 | 132 | // looking to see if a "touch" lands in 1 of the 10 number blocks. If pen is detected inside one of the numbers from 0-9, that number is returned. |
loopsva | 0:c6da6fc05965 | 133 | // if the number is not detected, the number 255 is returned |
loopsva | 0:c6da6fc05965 | 134 | |
loopsva | 0:c6da6fc05965 | 135 | int LCDclockSet::Touch12Block(uint16_t x, uint16_t y) { |
loopsva | 0:c6da6fc05965 | 136 | uint16_t tX = PX13_12BLK; |
loopsva | 0:c6da6fc05965 | 137 | uint16_t tY = PY13_12BLK; |
loopsva | 0:c6da6fc05965 | 138 | |
loopsva | 0:c6da6fc05965 | 139 | for(int i = 0; i < 6; i++) { |
loopsva | 0:c6da6fc05965 | 140 | if((x > (tX + i * (SIZE_12BLK + GAP_12BLK))) && (x < (tX + SIZE_12BLK + i * (SIZE_12BLK + GAP_12BLK))) && (y > tY) && (y < (tY + SIZE_12BLK))) { |
loopsva | 0:c6da6fc05965 | 141 | if(i == 5) { |
loopsva | 0:c6da6fc05965 | 142 | return('<'); //return < |
loopsva | 0:c6da6fc05965 | 143 | } |
loopsva | 0:c6da6fc05965 | 144 | return(i + 1); //return 1-5 |
loopsva | 0:c6da6fc05965 | 145 | } |
loopsva | 0:c6da6fc05965 | 146 | } |
loopsva | 0:c6da6fc05965 | 147 | tY = tY + SIZE_12BLK + GAP_12BLK; |
loopsva | 0:c6da6fc05965 | 148 | for(int i = 0; i < 7; i++) { |
loopsva | 0:c6da6fc05965 | 149 | if((x > (tX + i * (SIZE_12BLK + GAP_12BLK))) && (x < (tX + SIZE_12BLK + i * (SIZE_12BLK + GAP_12BLK))) && (y > tY) && (y < (tY + SIZE_12BLK))) { |
loopsva | 0:c6da6fc05965 | 150 | if(i == 4) { |
loopsva | 0:c6da6fc05965 | 151 | return(0); //return 0 |
loopsva | 0:c6da6fc05965 | 152 | } |
loopsva | 0:c6da6fc05965 | 153 | if(i == 5) { |
loopsva | 0:c6da6fc05965 | 154 | return('#'); //return # |
loopsva | 0:c6da6fc05965 | 155 | } |
loopsva | 0:c6da6fc05965 | 156 | return(i + 6); //return 6-9 |
loopsva | 0:c6da6fc05965 | 157 | } |
loopsva | 0:c6da6fc05965 | 158 | } |
loopsva | 0:c6da6fc05965 | 159 | return(255); //return 10 = error!! |
loopsva | 0:c6da6fc05965 | 160 | } |