working, need to fix input bouncing

Dependencies:   mbed

main.cpp

Committer:
psahay
Date:
2015-02-22
Revision:
3:3e18de5a9cce
Parent:
2:54ae225e6203

File content as of revision 3:3e18de5a9cce:

#include "mbed.h"
#include <map>

//Initialize serial comms
Serial pc(USBTX, USBRX);

//Initialize PMW
PwmOut PWM1(p21);


//Initialize Keypad I/O
DigitalOut row1(p26);
DigitalOut row2(p23);
DigitalOut row3(p24);
DigitalOut row4(p25);

DigitalIn col1(p20);
DigitalIn col2(p19);
DigitalIn col3(p18);
DigitalIn col4(p17);
Timer t1;

//map used for keypad
map<int, char> keypadMap;


//Map for keypad
//First 4 bits corrospond to active column
//Last 4 bits corrospond to active row
void init(){
        keypadMap[0x11]='1';
        keypadMap[0x12]='2';
        keypadMap[0x14]='3';
        keypadMap[0x18]='A';
        keypadMap[0x21]='4';
        keypadMap[0x22]='5';
        keypadMap[0x24]='6';
        keypadMap[0x28]='B';
        keypadMap[0x41]='7';
        keypadMap[0x42]='8';
        keypadMap[0x44]='9';
        keypadMap[0x48]='C';
        keypadMap[0x81]='*';
        keypadMap[0x82]='0';
        keypadMap[0x84]='#';
        keypadMap[0x88]='D';
}

int main() {
    init();
    //Initialize rows to 0
    row1 = 0;
    row2 = 0;
    row3 = 0;
    row4 = 0;
    t1.start();
    int input = 0x00;
    while(1) {
        //make all rows 0 to add stability
        row1 = 0;
        row2 = 0;
        row3 = 0;
        row4 = 0;
       //Keep each led lit for 4ms
       switch(t1.read_ms()%4){
                        case 0: row1 = 1;
                                input |= 0x10;   
                                break;
                        case 1: row2 = 1;
                                input |= 0x20;
                                break;
                        case 2: row3 = 1;
                                input |= 0x40;
                                break;
                        case 3: row4 = 1; 
                                input |= 0x80;
                                break; }
         //Pull the value from each column and check to see if 1
         if(col1 == 1)
            input |= 0x01;
         else if(col2 == 1)
            input |= 0x02;
         else if(col3 == 1)
            input |= 0x04;
         else if(col4 == 1)
            input |= 0x08;
         
         char c = keypadMap[input]; //assign charcter based on input
         //Print to the terminal the character if available 
         if(c != 0){
            pc.printf("%c\r",c);  //print input and char
         }
         //reset input
         input = 0x00;     
    }
}