Demo of the RA8875 Keypad to enter a username and password.

Dependencies:   mbed RA8875 Keypad

main.cpp

Committer:
WiredHome
Date:
2016-03-04
Revision:
1:0fea662d1826
Parent:
0:5cf0d5f4ab84
Child:
2:117fb9168afc

File content as of revision 1:0fea662d1826:

#include "mbed.h"               // v112
#include "RA8875.h"
#include "Keypad.h"

LocalFileSystem local("local");     // Because I want <PrintScreen>
Serial pc(USBTX, USBRX);            // And a little feedback

RA8875 lcd(p5, p6, p7, p12, NC, "tft");    // MOSI, MISO, SCK, /ChipSelect, /reset, name
Keypad kp(lcd);

// 789 /(
// 456 *)
// 123 -
// 00. +=
const char numberkeys[] = {
    5,'\x01', 10,'7',10,'8',10,'9', 5,'\x01', 10,'/',10,'(', 0,0,
    5,'\x01', 10,'4',10,'5',10,'6', 5,'\x01', 10,'*',10,')', 0,0,
    5,'\x01', 10,'1',10,'2',10,'3', 5,'\x01', 10,'-',10,KYBD_SYM_BS, 0,0,
    5,'\x01', 20,'0',       10,'.', 5,'\x01', 10,'+',10,'=', 0,0,
    0,0
};

const Keypad::keyboard_t altkeyboard = {
    100,        // x=100; left edge
    0,          // y=0; computed from bottom up
    240,        // width=240
    0,          // height=0; bottom of screen justified
    4,          // rows
    6,          // columns
    numberkeys, // pointer to the keypad
    numberkeys
};


void CalibrateTS(void)
{
    FILE * fh;
    tpMatrix_t matrix;
    RetCode_t r;

    r = lcd.TouchPanelCalibrate("Calibrate the touch panel", &matrix);
    if (r == noerror) {
        fh = fopen("/local/tpcal.cfg", "wb");
        if (fh) {
            fwrite(&matrix, sizeof(tpMatrix_t), 1, fh);
            fclose(fh);
        } else {
        }
    } else {
    }
}


void InitTS(void)
{
    FILE * fh;
    tpMatrix_t matrix;

    fh = fopen("/local/tpcal.cfg", "rb");
    if (fh) {
        fread(&matrix, sizeof(tpMatrix_t), 1, fh);
        fclose(fh);
        lcd.TouchPanelSetMatrix(&matrix);
        pc.printf("Touch Panel calibration set\r\n");
    } else {
        CalibrateTS();
    }
}

int main()
{
    char name1[20], name2[20];
    bool toggle = false;

    pc.baud(460800);                            // I like a snappy terminal, so crank it up!
    pc.printf("\r\nDev Keypad - Build " __DATE__ " " __TIME__ "\r\n");

    lcd.init();
    lcd.foreground(Yellow);
    lcd.background(Black);
    lcd.puts(0,0, "RA8875 Soft Fonts - Build " __DATE__ " " __TIME__ "\r\n");
    InitTS();
    while(1) {
        lcd.foreground(Yellow);
        lcd.background(Black);
        lcd.cls();
        if (!toggle) {
            kp.SetKeyboard();
            lcd.puts(0,20, "Enter username and password\r\n");
            if (kp.GetString(name1, 20, "Username:")) {
                //lcd.printf("username: %s\r\n", name1);
                if (kp.GetString(name2, 20, "Password:", '*')) {
                    //lcd.printf("password: %s\r\n", name2);
                    kp.Erase();
                    lcd.foreground(BrightRed);
                    lcd.background(Black);
                    lcd.cls();
                    lcd.SetTextFontSize(2);
                    lcd.SetTextCursor(0,30);
                    lcd.printf("username: %s\r\npassword: %s\r\n", name1, name2);
                    lcd.SetTextFontSize();
                }
            } else {
                kp.Erase();
                pc.printf("<esc>\r\n");
            }
        } else {
            kp.SetKeyboard(&altkeyboard, '=');
            if (kp.GetString(name1, 20, "Calc:")) {
                lcd.foreground(BrightRed);
                lcd.background(Black);
                lcd.cls();
                lcd.SetTextCursor(0,40);
                lcd.printf("Calculator: %s\r\n", name1);
            }
        }
        toggle = !toggle;
        wait(5);
    }
}