class library for a TS Keypad and retrieving multiple keys, then press enter and the values are stored and the keypad disappears.

F7_TSKeypad_MultiKey.cpp

Committer:
Armand
Date:
2017-06-07
Revision:
0:b3fd90f94e58
Child:
1:483300d6debd

File content as of revision 0:b3fd90f94e58:

#include "F7_TSKeypad_MultiKey.h"
#include "mbed.h"

F7_TSKeypad_MultiKey::F7_TSKeypad_MultiKey()
{
    btnsize = 50;
    state = 0;
    
    status = ts.Init(lcd.GetXSize(), lcd.GetYSize());
    if (status != TS_OK) 
    {
        lcd.Clear(LCD_COLOR_RED);
        lcd.SetBackColor(LCD_COLOR_RED);
        lcd.SetTextColor(LCD_COLOR_WHITE);
        lcd.DisplayStringAt(0, LINE(5), (uint8_t *)"TOUCHSCREEN INIT FAIL", CENTER_MODE);
        while(1);
    }
    else 
    {
        OK = 1;
        
    }
    
    ticker.attach(callback(this, &F7_TSKeypad_MultiKey::Detect_isr),0.01);
}

void F7_TSKeypad_MultiKey::Detect_isr()
{             
    
    if(OK)
    {       
        ts.GetState(&TS_State);
        
        if (TS_State.touchDetected) 
        {            
            
        ///////////////////////check correct touch//////////////////////////////////////////////////////////////
            if(TS_State.touchX[0]>= keypadstartX[0][0] && TS_State.touchX[0]<= keypadendX[0][0] && TS_State.touchY[0]>= keypadstartY[0][0] && TS_State.touchY[0]<= keypadendY[0][0] && keypad == 1)
            {
                correcttouch = 1;
                button = 1;    
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[0][0], keypadstartY[0][0], btnsize, btnsize);                   
            }
            else if(TS_State.touchX[0]>= keypadstartX[0][1] && TS_State.touchX[0]<= keypadendX[0][1] && TS_State.touchY[0]>= keypadstartY[0][1] && TS_State.touchY[0]<= keypadendY[0][1] && keypad == 1)
            {
                correcttouch = 1;
                button = 2;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[0][1], keypadstartY[0][1], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[0][2] && TS_State.touchX[0]<= keypadendX[0][2] && TS_State.touchY[0]>= keypadstartY[0][2] && TS_State.touchY[0]<= keypadendY[0][2] && keypad == 1)
            {
                correcttouch = 1;
                button = 3;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[0][2], keypadstartY[0][2], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[0][3] && TS_State.touchX[0]<= keypadendX[0][3] && TS_State.touchY[0]>= keypadstartY[0][3] && TS_State.touchY[0]<= keypadendY[0][3] && keypad == 1)
            {
                correcttouch = 1;
                button = 4;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[0][3], keypadstartY[0][3], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[1][0] && TS_State.touchX[0]<= keypadendX[1][0] && TS_State.touchY[0]>= keypadstartY[1][0] && TS_State.touchY[0]<= keypadendY[1][0] && keypad == 1)
            {
                correcttouch = 1;
                button = 5;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[1][0], keypadstartY[1][0], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[1][1] && TS_State.touchX[0]<= keypadendX[1][1] && TS_State.touchY[0]>= keypadstartY[1][1] && TS_State.touchY[0]<= keypadendY[1][1] && keypad == 1)
            {
                correcttouch = 1;
                button = 6;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[1][1], keypadstartY[1][1], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[1][2] && TS_State.touchX[0]<= keypadendX[1][2] && TS_State.touchY[0]>= keypadstartY[1][2] && TS_State.touchY[0]<= keypadendY[1][2] && keypad == 1)
            {
                correcttouch = 1;
                button = 7;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[1][2], keypadstartY[1][2], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[1][3] && TS_State.touchX[0]<= keypadendX[1][3] && TS_State.touchY[0]>= keypadstartY[1][3] && TS_State.touchY[0]<= keypadendY[1][3] && keypad == 1)
            {
                correcttouch = 1;
                button = 8;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[1][3], keypadstartY[1][3], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[2][0] && TS_State.touchX[0]<= keypadendX[2][0] && TS_State.touchY[0]>= keypadstartY[2][0] && TS_State.touchY[0]<= keypadendY[2][0] && keypad == 1)
            {
                correcttouch = 1;
                button = 9;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[2][0], keypadstartY[2][0], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[2][1] && TS_State.touchX[0]<= keypadendX[2][1] && TS_State.touchY[0]>= keypadstartY[2][1] && TS_State.touchY[0]<= keypadendY[2][1] && keypad == 1)
            {
                correcttouch = 1;
                button = 10;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[2][1], keypadstartY[2][1], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[2][2] && TS_State.touchX[0]<= keypadendX[2][2] && TS_State.touchY[0]>= keypadstartY[2][2] && TS_State.touchY[0]<= keypadendY[2][2] && keypad == 1)
            {
                correcttouch = 1;
                button = 11;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[2][2], keypadstartY[2][2], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[2][3] && TS_State.touchX[0]<= keypadendX[2][3] && TS_State.touchY[0]>= keypadstartY[2][3] && TS_State.touchY[0]<= keypadendY[2][3] && keypad == 1)
            {
                correcttouch = 1; 
                button = 12;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[2][3], keypadstartY[2][3], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[3][0] && TS_State.touchX[0]<= keypadendX[3][0] && TS_State.touchY[0]>= keypadstartY[3][0] && TS_State.touchY[0]<= keypadendY[3][0] && keypad == 1)
            {
                correcttouch = 1;
                button = 13;
                lcd.SetTextColor(LCD_COLOR_GRAY); 
                lcd.FillRect(keypadstartX[3][0], keypadstartY[3][0], btnsize, btnsize); 
            }
            else if(TS_State.touchX[0]>= keypadstartX[3][1] && TS_State.touchX[0]<= keypadendX[3][1] && TS_State.touchY[0]>= keypadstartY[3][1] && TS_State.touchY[0]<= keypadendY[3][1] && keypad == 1)
            {
               correcttouch = 1; 
               button = 14;  
               lcd.SetTextColor(LCD_COLOR_GRAY); 
               lcd.FillRect(keypadstartX[3][1], keypadstartY[3][1], btnsize, btnsize);  
            }
            else if(TS_State.touchX[0]>= keypadstartX[3][2] && TS_State.touchX[0]<= keypadendX[3][2] && TS_State.touchY[0]>= keypadstartY[3][2] && TS_State.touchY[0]<= keypadendY[3][2] && keypad == 1)
            {
               correcttouch = 1; 
               button = 15;
               lcd.SetTextColor(LCD_COLOR_GRAY); 
               lcd.FillRect(keypadstartX[3][2], keypadstartY[3][2], btnsize, btnsize);    
            }
            else if(TS_State.touchX[0]>= keypadstartX[3][3] && TS_State.touchX[0]<= keypadendX[3][3] && TS_State.touchY[0]>= keypadstartY[3][3] && TS_State.touchY[0]<= keypadendY[3][3] && keypad == 1)
            {
               correcttouch = 1; 
               button = 16;
               lcd.SetTextColor(LCD_COLOR_GRAY); 
               lcd.FillRect(keypadstartX[3][3], keypadstartY[3][3], btnsize, btnsize);    
            }
            else if(TS_State.touchX[0]>= keypadstartX[0][3] + 60 && TS_State.touchX[0]<= keypadendX[0][3] + 60 && TS_State.touchY[0]>= keypadstartY[0][3] && TS_State.touchY[0]<= keypadendY[0][3] && keypad == 1)
            {
               correcttouch = 1; 
               button = 17;
               lcd.SetTextColor(LCD_COLOR_GRAY); 
               lcd.FillRect(keypadstartX[0][3] + 60, keypadstartY[0][3], btnsize, btnsize);    
            }
            else if(TS_State.touchX[0]>= keypadstartX[1][3] + 60 && TS_State.touchX[0]<= keypadendX[1][3] + 60 && TS_State.touchY[0]>= keypadstartY[1][3] && TS_State.touchY[0]<= keypadendY[1][3] + 120 && keypad == 1)
            {
               correcttouch = 1; 
               button = 18;
               lcd.SetTextColor(LCD_COLOR_GRAY); 
               lcd.FillRect(keypadstartX[1][3] + 60, keypadstartY[1][3], btnsize, 170);    
            }
            else
            {
                correcttouch = 0;  
                button = 0;                 
            }  
        //////////////////////////////////////////////////////////////////////////////////////////////////////      
        }
    }
}
 
void F7_TSKeypad_MultiKey::getkeys(char str[], uint8_t startx, uint8_t starty,char char1, char char2, char char3, char char4, char char5, char char6,  char char7, char char8, char char9, char char10, char char11, char char12, char char13, char char14, char char15, char char16)
{   
    uint8_t text2[40];

    Bckclr    = lcd.GetBackColor();
    Txtclr    = lcd.GetTextColor();
    *FontSize = *lcd.GetFont();
    
    lcd.ClearStringLine(0);
    DrawKeypad(startx, starty, char1, char2, char3, char4, char5, char6,  char7, char8, char9, char10, char11, char12, char13, char14, char15, char16);
    
    while(Enter != 1)
    {     
        wait(0.0001);
           
        switch(state)
        {////////check if pressed on screen///////
            case 0:
            {
                if(TS_State.touchDetected)
                {  
                    frstprsx = TS_State.touchX[0];
                    frstprsy = TS_State.touchY[0];
                    state = 10;
                }
             ////////////////////////////////////////              
            }break;
            ////////check if correctly pressed//////////
            case 10:
            {                
                for(b = 0; b < 4; b++)
                {
                    for(a = 0; a < 4; a++)
                    {
                        if(frstprsx >= keypadstartX[a][b] && frstprsx <= keypadendX[a][b] && frstprsy >= keypadstartY[a][b] && frstprsy <= keypadendY[a][b] || frstprsx >= keypadstartX[0][3] + 60 && frstprsx <= keypadendX[0][3] + 60 && frstprsy >= keypadstartY[0][3] && frstprsy <= keypadendY[0][3] || frstprsx >= keypadstartX[1][3] + 60 && frstprsx <= keypadendX[1][3] + 60 && frstprsy >= keypadstartY[1][3] && frstprsy <= keypadendY[1][3] + 120)
                        {   
                            state = 15;
                            correcttouch = 1;
                            a = 3;
                            b = 3;
                        }
                        else
                        {   
                            state = 30; 
                        }
                    }    
                }
                             
            }break;
            case 15:
            {  
                if(correcttouch == 1)
                {     
                    if(TS_State.touchDetected == 0)
                    {  
                        DrawKeypad(startx, starty, char1, char2, char3, char4, char5, char6,  char7, char8, char9, char10, char11, char12, char13, char14, char15, char16);
                        state = 20;                
                    }                    
                }
                else if(correcttouch == 0 && button == 0)
                {   
                    state = 30;
                } 
                
            }break; 
            ////////////button functions//////////
            case 20:
            {   ////////button 1/////////////
                if(button == 1)
                {   
                    keypressed = char1;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 2)
                {   
                    keypressed = char2;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }  
                else if(button == 3)
                {   
                    keypressed = char3;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 4)
                {   
                    keypressed = char4;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }  
                else if(button == 5)
                {   
                    keypressed = char5;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 6)
                {   
                    keypressed = char6;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 7)
                {   
                    keypressed = char7;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 8)
                {   
                    keypressed = char8;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 9)
                {   
                    keypressed = char9;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 10)
                {   
                    keypressed = char10;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 11)
                {   
                    keypressed = char11;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 12)
                {   
                    keypressed = char12;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 13)
                {   
                    keypressed = char13;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 14)
                {   
                    keypressed = char14;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 15)
                {   
                    keypressed = char15;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }    
                else if(button == 16)
                {   
                    keypressed = char16;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }   
                else if(button == 17)
                {   
                    keypressed = ' ';
                    
                    if(m != 0 || textx != 0)
                    {
                        m -= 1;
                        textx -= 12;
                    }
                    
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }       
                else if(button == 18)
                {   
                    keypressed = '\0';
                    Enter = 1;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }           
                
                str[m] =  keypressed;
                
                lcd.SetTextColor(Txtclr);
                lcd.SetBackColor(Bckclr);
                lcd.SetFont(&Font20);
                sprintf((char*)text2, "%c", str[m]);
                lcd.DisplayStringAt(0 + textx, LINE(0), (uint8_t *)&text2, LEFT_MODE);
                    
                if(keypressed != ' ')
                {
                    m++;
                    textx += 12;
                }             
    
            }break; 
            case 30:
            {
                if(keypad == 1)
                {
                    DrawKeypad(startx, starty, char1, char2, char3, char4, char5, char6,  char7, char8, char9, char10, char11, char12, char13, char14, char15, char16);
                    keypad = 0;
                }
                
                if(TS_State.touchDetected == 0)
                {  
                    DrawKeypad(startx, starty, char1, char2, char3, char4, char5, char6,  char7, char8, char9, char10, char11, char12, char13, char14, char15, char16);
                    TS_State.touchX[0]= 0;
                    TS_State.touchY[0]= 0;
                    a = 0;
                    b = 0;
                    correcttouch = 0;
                    state = 0;
                }
            }break;             
        } 
    }
    
    keypad = 0;
    Enter = 0;
    m = 0;
    textx = 0;
    state = 0;
    lcd.ClearStringLine(0);
    lcd.SetTextColor(Bckclr);
    lcd.FillRect(keypadstartX[0][0],keypadstartY[0][0], 290, 230);
    lcd.SetTextColor(Txtclr);
    lcd.SetFont(FontSize);
}

void F7_TSKeypad_MultiKey::DrawKeypad(uint8_t startpointx, uint8_t startpointy,char char1, char char2, char char3, char char4, char char5, char char6,  char char7, char char8, char char9, char char10, char char11, char char12, char char13, char char14, char char15, char char16)
{    
    int i, o, stepx = 0, stepy = 0, Drawpointx, Drawpointy;
    uint8_t text[30];
    
    char keyval[4][4] = {{char1, char2, char3, char4},
                         {char5, char6, char7, char8},
                         {char9, char10, char11, char12},
                         {char13, char14, char15, char16}
                        };
    keypad = 1;
    
    for(o= 0; o< 4; o++)
    {
        for(i= 0; i < 4; i++)
        {  
            lcd.SetTextColor(LCD_COLOR_WHITE);
             
            lcd.FillRect(Drawpointx = startpointx + stepx, Drawpointy  = startpointy + stepy, btnsize, btnsize);
            keypadstartX[i][o] = Drawpointx;
            keypadstartY[i][o] = Drawpointy;
            keypadendX[i][o] = Drawpointx + 50;
            keypadendY[i][o] = Drawpointy + 50;
            stepy += 60;
            
            lcd.SetBackColor(LCD_COLOR_WHITE);
            lcd.SetTextColor(LCD_COLOR_BLACK);
            lcd.SetFont(&Font20);
            sprintf((char*)text, "%c", keyval[i][o]);
            lcd.DisplayStringAt(Drawpointx+ 20, Drawpointy+ 20, (uint8_t *)&text, LEFT_MODE);
            
            
            if(stepy > 180)
            {
                stepy = 0;
            }       
        }  
        
        stepx += 60;     
    }
    
    lcd.SetTextColor(LCD_COLOR_WHITE);
    lcd.FillRect(keypadstartX[0][3] + 60, keypadstartY[0][3], btnsize, btnsize);
    lcd.FillRect(keypadstartX[1][3] + 60, keypadstartY[1][3], btnsize, 170);
    
    lcd.SetBackColor(LCD_COLOR_WHITE);
    lcd.SetTextColor(LCD_COLOR_BLACK);
    
    sprintf((char*)text, "<");
    lcd.DisplayStringAt(keypadstartX[0][3] + 80, keypadstartY[0][3] + 20, (uint8_t *)&text, LEFT_MODE);
    sprintf((char*)text, "E");
    lcd.DisplayStringAt(keypadstartX[1][3] + 80, keypadstartY[1][3] + 35, (uint8_t *)&text, LEFT_MODE);
    sprintf((char*)text, "N");
    lcd.DisplayStringAt(keypadstartX[0][3] + 80, keypadstartY[1][3] + 55, (uint8_t *)&text, LEFT_MODE);
    sprintf((char*)text, "T");
    lcd.DisplayStringAt(keypadstartX[0][3] + 80, keypadstartY[1][3] + 75, (uint8_t *)&text, LEFT_MODE);
    sprintf((char*)text, "E");
    lcd.DisplayStringAt(keypadstartX[0][3] + 80, keypadstartY[1][3] + 95, (uint8_t *)&text, LEFT_MODE);
    sprintf((char*)text, "R");
    lcd.DisplayStringAt(keypadstartX[0][3] + 80, keypadstartY[1][3] + 115, (uint8_t *)&text, LEFT_MODE);
    
    lcd.SetTextColor(Txtclr);
    lcd.SetBackColor(Bckclr);
    lcd.SetFont(FontSize);
}