Keypad that has 12 keys for input

Dependents:   Input_Keypad MARISOL Final_Project

KeyPad.cpp

Committer:
anevil14
Date:
2015-03-12
Revision:
2:795c6863bbc2
Parent:
0:34c3354147cf

File content as of revision 2:795c6863bbc2:

#include "KeyPad.h"
//#include "mbed.h"


KeyPad2::KeyPad2(PinName pin3, PinName pin1 ,PinName pin5 ,PinName pin2, PinName pin7,PinName pin6, PinName pin4){
    // KeyPad2 keypad(p25, p27, p23, p26, p21, p22, p24);
    switchrate = 0.001;
 
    
    columnoneout = new DigitalOut   ( pin3 );      // pin 3 on keypad 
    columntwoout = new DigitalOut   ( pin1 );      // pin 1 on keypad
    columnthreeout = new DigitalOut ( pin5 );      // pin 5 on keypad

    rowonein = new DigitalIn        ( pin2 );      // pin 2 on keypad 
    rowtwoin = new DigitalIn        ( pin7 );      // pin 7 on keypad
    rowthreein = new DigitalIn      ( pin6 );      // pin 6 on keypad
    rowfourin = new DigitalIn       ( pin4 );      // pin 4 on keypad
    
}


KeyPad2::~KeyPad2(){
    delete[] columnoneout;
    delete[] columntwoout;
    delete[] columnthreeout;
    delete[] rowonein;
    delete[] rowtwoin;
    delete[] rowthreein;
    delete[] rowfourin;   
}

void KeyPad2::setswitchrate(double switchrate){ // sets the rate which you switch between powering each column
    this->switchrate = switchrate;   
}




std::vector<int> KeyPad2::getkey(){ // powers each column of the keypad once based upon the time divisions of switchrate, returns keys in sorted order
    std::vector<int> keyspressed;
    
    bool addedone, addedtwo, addedthree, addedfour;
    clock_t start;
    //check 2nd column
    *columnoneout = 0;
    *columntwoout = 1;
    *columnthreeout = 0;
    
    start = clock();
   
    addedone = false;
    addedtwo =false;
    addedthree = false;
    addedfour = false;
     
    while (clock() - start < switchrate*CLOCKS_PER_SEC){
        if ( *rowonein == 1 && !addedone ){
             keyspressed.push_back(2);
             addedone = true;
        }
    
        if ( *rowtwoin == 1 && !addedtwo){
            keyspressed.push_back(5);  
            addedtwo = true; 
        }
    
        if ( *rowthreein == 1 && !addedthree ){
            keyspressed.push_back(8);  
            addedthree = true; 
        }
    
        if ( *rowfourin == 1 && !addedfour){
            keyspressed.push_back(11);   
            addedfour = true;
        }
    }
    
    
    //check first column
    *columnoneout = 1;
    *columntwoout = 0;
    *columnthreeout = 0;
    
    start = clock();
   
    addedone = false;
    addedtwo =false;
    addedthree = false;
    addedfour = false;
     
     
    // check first column   
    while (clock() - start < switchrate*CLOCKS_PER_SEC){
        if ( *rowonein == 1 && !addedone ){
             keyspressed.push_back(1);
             addedone = true;
        }
    
        if ( *rowtwoin == 1 && !addedtwo){
            keyspressed.push_back(4);  
            addedtwo = true; 
        }
    
        if ( *rowthreein == 1 && !addedthree ){
            keyspressed.push_back(7);  
            addedthree = true; 
        }
    
        if ( *rowfourin == 1 && !addedfour){
            keyspressed.push_back(10);   
            addedfour = true;
        }
    }
    
    
    
    //check 3rd column
    
    *columnoneout = 0;
    *columntwoout = 0;
    *columnthreeout = 1;
    
    start = clock();
   
    addedone = false;
    addedtwo =false;
    addedthree = false;
    addedfour = false;
     
    while (clock() - start < switchrate*CLOCKS_PER_SEC){
        if ( *rowonein == 1 && !addedone ){
             keyspressed.push_back(3);
             addedone = true;
        }
    
        if ( *rowtwoin == 1 && !addedtwo){
            keyspressed.push_back(6);  
            addedtwo = true; 
        }
    
        if ( *rowthreein == 1 && !addedthree ){
            keyspressed.push_back(9);  
            addedthree = true; 
        }
    
        if ( *rowfourin == 1 && !addedfour){
            keyspressed.push_back(12);   
            addedfour = true;
        }
    }
    
    std::sort(keyspressed.begin(), keyspressed.end());          
    return keyspressed; 
}