Class library for a touchscreen-based keypad for the LCD display present on the DISCO_F429ZI board.
Dependents: WIRE-BANDING_FT810 WIRE-BANDING_copy
KEYPAD_DISCO_F429ZI.cpp
00001 #include "KEYPAD_DISCO_F429ZI.h" 00002 #include "mbed.h" 00003 #include "TS_DISCO_F429ZI.h" 00004 #include "LCD_DISCO_F429ZI.h" 00005 00006 00007 KEYPAD_DISCO_F429ZI::KEYPAD_DISCO_F429ZI() { 00008 LastKey=0; 00009 ReadKeyState = 0; 00010 MsgBColor = LCD_COLOR_BLACK; 00011 MsgFColor = LCD_COLOR_WHITE; 00012 OutBColor = LCD_COLOR_WHITE; 00013 OutFColor = LCD_COLOR_BLACK; 00014 BackColor = LCD_COLOR_BLACK; 00015 KeyBColor = LCD_COLOR_WHITE; 00016 KeyFColor = LCD_COLOR_BLACK; 00017 KeyPressColor = LCD_COLOR_GRAY; 00018 KeysTopY=110; 00019 00020 Keys[0][0] = '1'; 00021 Keys[0][1] = '2'; 00022 Keys[0][2] = '3'; 00023 Keys[0][3] = 'A'; 00024 Keys[1][0] = '4'; 00025 Keys[1][1] = '5'; 00026 Keys[1][2] = '6'; 00027 Keys[1][3] = 'B'; 00028 Keys[2][0] = '7'; 00029 Keys[2][1] = '8'; 00030 Keys[2][2] = '9'; 00031 Keys[2][3] = 'C'; 00032 Keys[3][0] = '*'; 00033 Keys[3][1] = '0'; 00034 Keys[3][2] = '#'; 00035 Keys[3][3] = 'D'; 00036 } 00037 00038 00039 void KEYPAD_DISCO_F429ZI::Show(int MessageBoxEnable, int OutBoxEnable) { 00040 uint16_t x, y; 00041 uint8_t row, col; 00042 00043 if(MessageBoxEnable > 0) 00044 MessageBoxEnabledFlag = 1; 00045 else 00046 MessageBoxEnabledFlag = 0; 00047 00048 if(OutBoxEnable > 0) 00049 OutBoxEnabledFlag = 1; 00050 else 00051 OutBoxEnabledFlag = 0; 00052 00053 lcd.Clear(BackColor); 00054 00055 /* Display Message textbox */ 00056 if(MessageBoxEnabledFlag) { 00057 lcd.SetFont(&Font16); 00058 lcd.SetBackColor(MsgBColor); 00059 lcd.SetTextColor(MsgFColor); 00060 lcd.DisplayStringAt(4, LINE(0)+4,(uint8_t *) " ", LEFT_MODE); 00061 lcd.DisplayStringAt(4, LINE(1)+4,(uint8_t *) " ", LEFT_MODE); 00062 lcd.SetTextColor(MsgBColor); 00063 lcd.FillRect(0,0,240,4); //top filler 00064 lcd.FillRect(0,LINE(0),4,36); //left filler 00065 lcd.FillRect(235,LINE(0),5,36); //right filler 00066 } 00067 00068 /* Display Output textbox */ 00069 if(OutBoxEnabledFlag) { 00070 lcd.SetFont(&Font24); 00071 lcd.SetBackColor(OutBColor); 00072 lcd.SetTextColor(OutFColor); 00073 lcd.DisplayStringAt(1,LINE(2),(uint8_t *) " ", LEFT_MODE); 00074 lcd.SetTextColor(OutBColor); 00075 lcd.FillRect(1,LINE(2)-4,238,5); //top filler 00076 lcd.DrawVLine(0,LINE(2)-4,28); //left filler 00077 lcd.DrawVLine(239,LINE(2)-4,28); //right filler 00078 } 00079 00080 /* Draw buttons */ 00081 lcd.SetTextColor(KeyBColor); 00082 for(y=KeysTopY; y<=KeysTopY+180; y=y+60) 00083 for(x=30; x<=210; x=x+60) 00084 lcd.FillCircle(x,y,25); 00085 00086 /* Draw button text */ 00087 lcd.SetFont(&Font24); 00088 lcd.SetTextColor(KeyFColor); 00089 lcd.SetBackColor(KeyBColor); 00090 row=0; 00091 for(y=KeysTopY; y<=KeysTopY+180; y=y+60) 00092 { 00093 col=0; 00094 for(x=30; x<=210; x=x+60) 00095 { 00096 lcd.DisplayChar(x-8, y-8, Keys[row][col]); 00097 col++; 00098 } 00099 row++; 00100 } 00101 00102 ts.Init(240, 320); 00103 } 00104 00105 char KEYPAD_DISCO_F429ZI::ReadKey() { 00106 uint16_t x, y; 00107 TS_StateTypeDef TS_State; 00108 00109 ts.GetState(&TS_State); 00110 00111 switch(ReadKeyState) { 00112 case 0: { //wait for key press 00113 if (TS_State.TouchDetected) { //if the screen was touched 00114 x = TS_State.X; //read the x value 00115 y = TS_State.Y; //read the y value 00116 if((x > 3) && (x <= 60) && (y > KeysTopY - 30) && (y <= KeysTopY + 30)) { //row0, col0 00117 row=0;col=0; 00118 LastkeyX = 30; 00119 LastkeyY = KeysTopY; 00120 LastKey = Keys[row][col]; 00121 ReadKeyState = 10; 00122 } 00123 else if((x > 60) && (x <= 120) && (y > KeysTopY - 30) && (y <= KeysTopY + 30)) { //row0, col1 00124 row=0;col=1; 00125 LastkeyX = 90; 00126 LastkeyY = KeysTopY; 00127 LastKey = Keys[row][col]; 00128 ReadKeyState = 10; 00129 } 00130 else if((x > 120) && (x <= 180) && (y > KeysTopY - 30) && (y <= KeysTopY + 30)) { //row0, col2 00131 row=0;col=2; 00132 LastkeyX = 150; 00133 LastkeyY = KeysTopY; 00134 LastKey = Keys[row][col]; 00135 ReadKeyState = 10; 00136 } 00137 else if((x > 180) && (x <= 237) && (y > KeysTopY - 30) && (y <= KeysTopY + 30)) { //row0, col3 00138 row=0;col=3; 00139 LastkeyX = 210; 00140 LastkeyY = KeysTopY; 00141 LastKey = Keys[row][col]; 00142 ReadKeyState = 10; 00143 } 00144 00145 if((x > 3) && (x <= 60) && (y > KeysTopY + 30) && (y <= KeysTopY + 90)) { //row1, col0 00146 row=1;col=0; 00147 LastkeyX = 30; 00148 LastkeyY = KeysTopY+60; 00149 LastKey = Keys[row][col]; 00150 ReadKeyState = 10; 00151 } 00152 else if((x > 60) && (x <= 120) && (y > KeysTopY + 30) && (y <= KeysTopY + 90)) { //row1, col1 00153 row=1;col=1; 00154 LastkeyX = 90; 00155 LastkeyY = KeysTopY+60; 00156 LastKey = Keys[row][col]; 00157 ReadKeyState = 10; 00158 } 00159 else if((x > 120) && (x <= 180) && (y > KeysTopY + 30) && (y <= KeysTopY + 90)) { //row1, col2 00160 row=1;col=2; 00161 LastkeyX = 150; 00162 LastkeyY = KeysTopY+60; 00163 LastKey = Keys[row][col]; 00164 ReadKeyState = 10; 00165 } 00166 else if((x > 180) && (x <= 237) && (y > KeysTopY + 30) && (y <= KeysTopY + 90)) { //row1, col3 00167 row=1;col=3; 00168 LastkeyX = 210; 00169 LastkeyY = KeysTopY+60; 00170 LastKey = Keys[row][col]; 00171 ReadKeyState = 10; 00172 } 00173 00174 if((x > 3) && (x <= 60) && (y > KeysTopY + 90) && (y <= KeysTopY + 150)) { //row2, col0 00175 row=2;col=0; 00176 LastkeyX = 30; 00177 LastkeyY = KeysTopY+120; 00178 LastKey = Keys[row][col]; 00179 ReadKeyState = 10; 00180 } 00181 else if((x > 60) && (x <= 120) && (y > KeysTopY + 90) && (y <= KeysTopY + 150)) { //row2, col1 00182 row=2;col=1; 00183 LastkeyX = 90; 00184 LastkeyY = KeysTopY+120; 00185 LastKey = Keys[row][col]; 00186 ReadKeyState = 10; 00187 } 00188 else if((x > 120) && (x <= 180) && (y > KeysTopY + 90) && (y <= KeysTopY + 150)) { //row2, col2 00189 row=2;col=2; 00190 LastkeyX = 150; 00191 LastkeyY = KeysTopY+120; 00192 LastKey = Keys[row][col]; 00193 ReadKeyState = 10; 00194 } 00195 else if((x > 180) && (x <= 237) && (y > KeysTopY + 90) && (y <= KeysTopY + 150)) { //row2, col3 00196 row=2;col=3; 00197 LastkeyX = 210; 00198 LastkeyY = KeysTopY+120; 00199 LastKey = Keys[row][col]; 00200 ReadKeyState = 10; 00201 } 00202 00203 if((x > 3) && (x <= 60) && (y > KeysTopY + 150) && (y <= KeysTopY + 210)) { //row3, col0 00204 row=3;col=0; 00205 LastkeyX = 30; 00206 LastkeyY = KeysTopY+180; 00207 LastKey = Keys[row][col]; 00208 ReadKeyState = 10; 00209 } 00210 else if((x > 60) && (x <= 120) && (y > KeysTopY + 150) && (y <= KeysTopY + 210)) { //row3, col1 00211 row=3;col=1; 00212 LastkeyX = 90; 00213 LastkeyY = KeysTopY+180; 00214 LastKey = Keys[row][col]; 00215 ReadKeyState = 10; 00216 } 00217 else if((x > 120) && (x <= 180) && (y > KeysTopY + 150) && (y <= KeysTopY + 210)) { //row3, col2 00218 row=3;col=2; 00219 LastkeyX = 150; 00220 LastkeyY = KeysTopY+180; 00221 LastKey = Keys[row][col]; 00222 ReadKeyState = 10; 00223 } 00224 else if((x > 180) && (x <= 237) && (y > KeysTopY + 150) && (y <= KeysTopY + 210)) { //row3, col3 00225 row=3;col=3; 00226 LastkeyX = 210; 00227 LastkeyY = KeysTopY+180; 00228 LastKey = Keys[row][col]; 00229 ReadKeyState = 10; 00230 } 00231 00232 00233 // else 00234 // { 00235 // //do nothing when not incorrect touch position 00236 // } 00237 } 00238 } break; 00239 00240 00241 case 10: { //draw button darker 00242 lcd.SetFont(&Font24); 00243 lcd.SetTextColor(KeyPressColor); 00244 lcd.FillCircle(LastkeyX,LastkeyY,25); 00245 lcd.SetTextColor(KeyFColor); 00246 lcd.SetBackColor(KeyPressColor); 00247 lcd.DisplayChar(LastkeyX-8, LastkeyY-8, Keys[row][col]); 00248 00249 ReadKeyState = 20; 00250 } break; 00251 00252 00253 case 20: { //wait for key to be released 00254 if(TS_State.TouchDetected == 0) 00255 ReadKeyState = 30; 00256 } break; 00257 00258 00259 case 30: //draw key normal again 00260 { 00261 lcd.SetFont(&Font24); 00262 lcd.SetTextColor(KeyBColor); 00263 lcd.FillCircle(LastkeyX,LastkeyY,25); 00264 lcd.SetTextColor(KeyFColor); 00265 lcd.SetBackColor(KeyBColor); 00266 lcd.DisplayChar(LastkeyX-8, LastkeyY-8, Keys[row][col]); 00267 00268 LastKey = 0; 00269 ReadKeyState = 0; 00270 } break; 00271 } 00272 00273 wait(0.01); //to allow for contact bounce 00274 00275 return LastKey; 00276 } 00277 00278 void KEYPAD_DISCO_F429ZI::WriteMsgBoxLine(int LineNum, char *text) { 00279 if(MessageBoxEnabledFlag) { 00280 if((LineNum < 0) || (LineNum > 1)) 00281 LineNum = 0; 00282 lcd.SetFont(&Font16); 00283 lcd.SetBackColor(MsgBColor); 00284 lcd.SetTextColor(MsgFColor); 00285 lcd.DisplayStringAt(4, LINE(LineNum)+4,(uint8_t *) text, LEFT_MODE); 00286 } 00287 } 00288 00289 void KEYPAD_DISCO_F429ZI::WriteOutBox(char *text) { 00290 if(OutBoxEnabledFlag) { 00291 lcd.SetFont(&Font24); 00292 lcd.SetBackColor(OutBColor); 00293 lcd.SetTextColor(OutFColor); 00294 lcd.DisplayStringAt(1,LINE(2),(uint8_t *) text, LEFT_MODE); 00295 } 00296 } 00297 00298 void KEYPAD_DISCO_F429ZI::SetKeys(char (*keymap)[4]) { 00299 int i, j; 00300 00301 for(i=0; i<=3; i++) 00302 for(j=0; j<=3; j++) 00303 Keys[i][j] = keymap[i][j]; 00304 } 00305 00306 void KEYPAD_DISCO_F429ZI::SetKeyForeColor(uint32_t color) { 00307 KeyFColor = color; 00308 } 00309 00310 void KEYPAD_DISCO_F429ZI::SetKeyBackColor(uint32_t color) { 00311 KeyBColor = color; 00312 } 00313 00314 void KEYPAD_DISCO_F429ZI::SetKeyPressColor(uint32_t color) { 00315 KeyPressColor = color; 00316 } 00317 00318 void KEYPAD_DISCO_F429ZI::SetMsgBoxForeColor(uint32_t color) { 00319 MsgFColor = color; 00320 } 00321 00322 void KEYPAD_DISCO_F429ZI::SetMsgBoxBackColor(uint32_t color) { 00323 MsgBColor = color; 00324 } 00325 00326 void KEYPAD_DISCO_F429ZI::SetOutBoxForeColor(uint32_t color) { 00327 OutFColor = color; 00328 } 00329 00330 void KEYPAD_DISCO_F429ZI::SetOutBoxBackColor(uint32_t color) { 00331 OutBColor = color; 00332 } 00333 00334 void KEYPAD_DISCO_F429ZI::SetBackColor(uint32_t color) { 00335 BackColor = color; 00336 }
Generated on Sun Jul 24 2022 20:51:54 by 1.7.2