Touchscreen support graphics for setting up the RTC on the F746NG-DISCO board.

Dependents:   DISCO-F746NG-clockSet DISCO-F746NG-clockSet-touch-demo

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?

UserRevisionLine numberNew 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 }