/*Подключаем заголовочный файл с прототипом класса*/
    #include "Keypad3x4.h"

/* Здесь и далее - функции класса Keypad3x4 */
/* Конструктор класса */
Keypad3x4::Keypad3x4(int _pin){ Pin = _pin; }

/* Подавление дребезга контактов при нажатии кнопок */
int Keypad3x4::DebounceKey(int Code, int _lastValue)
{
    int _nextValue = getKeyCode();
    if(_nextValue != _lastValue)
    {
        delay(15);
        _nextValue = getKeyCode();
    }
return _nextValue;
}

/* Обработчик событий нажатия - возвращаем состояние маркера KeyIsPressed */
bool Keypad3x4::KeyPressed()
{
    currentButtonState = DebounceKey(getKeyCode(), previousButtonState);
    if(currentButtonState != KEY_NONE)
    {
        if(currentButtonState != previousButtonState)
            KeyIsPressed = true;
        else
            KeyIsPressed = false;
    }
    previousButtonState = currentButtonState;
    return KeyIsPressed;
}

/* Получение кода нажатой кнопки */
int Keypad3x4::getKeyCode()
{
    int buttonValue = analogRead(Pin);

    if(buttonValue < 480)
        return KEY_NONE;
    else if(buttonValue < 500 && buttonValue > 480)
        return KEY_ESC;
    else if(buttonValue < 520 && buttonValue > 500)
        return KEY0;
    else if(buttonValue < 550 && buttonValue > 530)
        return KEY_ENT;
    else if(buttonValue < 580 && buttonValue > 560)
        return KEY3_F2;
    else if(buttonValue < 610 && buttonValue > 590)
        return KEY6_RIGHT;
    else if(buttonValue < 650 && buttonValue > 630)
        return KEY9_F4;
    else if(buttonValue < 690 && buttonValue > 670)
        return KEY2_UP; 
    else if(buttonValue < 740 && buttonValue > 720)
        return KEY5_OK; 
    else if(buttonValue < 800 && buttonValue > 780)
        return KEY8_DOWN; 
    else if(buttonValue < 860 && buttonValue > 840)
        return KEY1_F1; 
    else if(buttonValue < 940 && buttonValue > 920)
        return KEY4_LEFT; 
    else if(buttonValue < 1024 && buttonValue > 1015)
        return KEY7_F3;
}