Motoo Tanaka / Mbed 2 deprecated matrix_key_4x4

Dependencies:   mbed

main.cpp

Committer:
Rhyme
Date:
2017-04-12
Revision:
0:a05c97d07ea7

File content as of revision 0:a05c97d07ea7:

#include "mbed.h"

#if defined (TARGET_KL25Z)
#define ROW0 PTC9
#define ROW1 PTC8
#define ROW2 PTA5
#define ROW3 PTA4
#define COL0 PTA12
#define COL1 PTD4
#define COL2 PTA1
#define COL3 PTA2
#endif

#define NUM_COL 4
#define NUM_ROW 4
#define NUM_KEY (NUM_COL * NUM_ROW)

int key[ NUM_KEY ] = {
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0,
    0, 0, 0, 0
} ;

unsigned char key_char[NUM_KEY] = {
    '1', '4', '7', '*',
    '2', '5', '8', '0',
    '3', '6', '9', '#',
    'A', 'B', 'C', 'D'
} ; 


DigitalIn  *col[NUM_COL] ;
DigitalOut *row[NUM_ROW] ;

void init_hardware(void)
{
    col[3] = new DigitalIn(PTC11, PullUp) ;
    col[2] = new DigitalIn(PTC10, PullUp) ;
    col[1] = new DigitalIn(PTC6, PullUp) ;
    col[0] = new DigitalIn(PTC5, PullUp) ;

    row[3] = new DigitalOut(PTC4, 1) ;
    row[2] = new DigitalOut(PTC3,  1) ;
    row[1] = new DigitalOut(PTC0,  1) ;
    row[0] = new DigitalOut(PTC7,  1) ;
}

int scan_key(int key[])
{
    int r, c ;
    int count = 0 ;

    for (r = 0 ; r < NUM_ROW ; r++ ) {
        row[r]->write(0) ;
        for (c = 0 ; c < NUM_COL ; c++ ) {
            if (col[c]->read() == 0) {
                key[r * NUM_COL + c] = 1 ;
                count++ ;
            } else {
                key[r * NUM_COL + c] = 0 ;
            }
        }
        row[r]->write(1)  ;
    }
    return(count) ;
}

void print_key(int key[])
{
    int i ;
    for (i = 0 ; i < NUM_KEY ; i++ ) {
        if (key[i]) {
            printf("%c", key_char[i]) ;
        }
    }
}
    
int main() {
    int count ;
    
    init_hardware() ;
    
    printf("\n=== Matrix Key Test %s ===\n", __DATE__) ;
    
    while(1) {
        count = scan_key(key) ;
        if (count) {
            print_key(key) ;
            fflush(stdout) ;
            wait(0.2) ;
        }
        wait(0.1) ;
    }
}