Функции опроса матричной клавиатуры

Борис177
Offline
Зарегистрирован: 29.03.2016

Друзья, начал использовать библиотеку Keypad для опроса кнопок клавиатуры. Стандартная функция считывания данных getKey() показывает была ли нажата та или иная клавиша, но удержание клавиши ни к чему не приводит. По всей видимости за постоянное получение сигналов при удержании отвечает функция KeyState getState(), но как ее записывать в код не понятно. В результате попыток одни ошибки. Может кто сталкивался?

http://playground.arduino.cc/code/Keypad

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

getState() - устарела и оставлена для совместимости

используйте bool isPressed(char keyChar);

if(Keypad.isPressed('1')){

}

покрайне мере в новых версиях библиотеки так - может в старых оно и работало

Посмотрел исходник библиотеки - там несколько ошибок внутри, надо будет исправить их для себя.

Борис177
Offline
Зарегистрирован: 29.03.2016

На некоторых форумах говорят, что непрерывно получать сигнал при использовании данной библитеки нельзя. Хотя, как я понял из описания самой библиотеки, есть функции получения непрерывного сигнала при удержании кнопки.

semen-pro
Offline
Зарегистрирован: 16.02.2014

Удалось решить эту проблему вот так. Нужно было выдавать импульсы, пока нажата кнопка. Решение примитивное, но устраивает.

 button = customKeypad.getKey(); // Чтение кнопки

 if (button=='*') 
  {
     digitalWrite(DIR_PIN, LOW);
     while( customKeypad.getState() != 0)  
      {  
        digitalWrite(STEP_PIN, HIGH);
        delay(TIME_STEP);
        digitalWrite(STEP_PIN, LOW);
        delay(TIME_STEP);
        button = customKeypad.getKey(); // Чтение кнопки
      }
  }

Фишка в том, что если вывести .getState() в сериал, то, пока клавиша не нажата - пишет 0, если нажата - 1, если долго нажата - 2.