Interrupt-driven keypad interface library. Compatible with RTOS. Able to handle various keypad size below 4x4.

Dependencies:   keypad mbed

main.cpp

Committer:
yoonghm
Date:
2012-01-30
Revision:
0:8209bcf62e0a
Child:
1:1ae4a77af85b

File content as of revision 0:8209bcf62e0a:

#include "mbed.h"
#include "keypad.h"

#define       KEYLEN    4
#define       ENDKEY   15
char          Buffer[KEYLEN];
int           Index = 0;

// Define your own keypad values
char Keytable[] = { '1', '2', '3', 'A',
                    '4', '5', '6', 'B',
                    '7', '8', '9', 'C',
                    '*', '0', '#', 'D'
                  };

uint32_t cbAfterInput(uint32_t key) {
    bool      finish = false;
    
    printf("Index:%d => Key:%c\n", Index, Keytable[key]);

    if (Index < KEYLEN - 1)
    {
        if (key != ENDKEY)  // Terminating key
            Buffer[Index] = Keytable[key];
        else // Terminating key is entered
            finish = true;
        Index++;
    }

    if (finish || (Index == KEYLEN - 1)) {
        printf("Complete string = %s\n", Buffer);
        memset(&Buffer, 0, KEYLEN);
        Index = 0;
    }

    return 0;
}

void Sleep(void) {
    __WFI();
}

int main() {
    memset(&Buffer, 0, KEYLEN);
    Index = 0;
    Keypad keypad(p25, p26, p27, p28, p21, p22, p23, p24);
    keypad.CallAfterInput(&cbAfterInput);

    keypad.Start();
    while (1) {
        Sleep();
    }
}