Class library for a touchscreen-based keypad for the LCD display present on the DISCO_F429ZI board.

Dependents:   WIRE-BANDING_FT810 WIRE-BANDING_copy

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers KEYPAD_DISCO_F429ZI.cpp Source File

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 }