Skip to content

Библиотека для работы с аналоговой клавиатурой для Arduino

License

Notifications You must be signed in to change notification settings

GyverLibs/AnalogKey

Repository files navigation

latest PIO Foo Foo Foo

Foo

AnalogKey

Библиотека для работы с аналоговой клавиатурой для Arduino

  • Встроенный простенький дебаунс
  • Оптимальный опрос пина по таймеру
  • Проверка конкретной кнопки или вывод номера нажатой

Совместимость

Совместима со всеми Arduino платформами (используются Arduino-функции)

Содержание

Установка

  • Библиотеку можно найти по названию AnalogKey и установить через менеджер библиотек в:
    • Arduino IDE
    • Arduino IDE v2
    • PlatformIO
  • Скачать библиотеку .zip архивом для ручной установки:
    • Распаковать и положить в C:\Program Files (x86)\Arduino\libraries (Windows x64)
    • Распаковать и положить в C:\Program Files\Arduino\libraries (Windows x32)
    • Распаковать и положить в Документы/Arduino/libraries/
    • (Arduino IDE) автоматическая установка из .zip: Скетч/Подключить библиотеку/Добавить .ZIP библиотеку… и указать скачанный архив
  • Читай более подробную инструкцию по установке библиотек здесь

Обновление

  • Рекомендую всегда обновлять библиотеку: в новых версиях исправляются ошибки и баги, а также проводится оптимизация и добавляются новые фичи
  • Через менеджер библиотек IDE: найти библиотеку как при установке и нажать "Обновить"
  • Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!

Инициализация

AnalogKey<A0, 16> keys;             // указываем пин и количество кнопок
AnalogKey<A0, 16, signals> keys;    // указываем пин, количество кнопок и внешний массив сигналов

Использование

void attach(uint8_t num, int value);    // подключает кнопку на указанное значение
void setWindow(int window);             // устанавливает окно сигнала (умолч. 40)
bool status(uint8_t num);               // возвращает статус указанной кнопки
int pressed();                          // выводит номер нажатой кнопки или -1, если нажатых кнопок нет

Как работать

  • Измерить и записать сигналы с клавиатуры (например, вывести значения в монитор порта)
  • Передать значения в библиотеку:
    • Положить во внешний массив и передать его при инициализации (см. пример)
    • Подключить каждую кнопку через attach (см. пример)
  • При необходимости настроить размер окна, чтобы сигналы с кнопок не пересекались: расстояние между соседними сигналами должно быть не меньше половины окна
  • Данная библиотека позволяет просто найти нажатую кнопку. Для расширенной работы (клики, удержания) используй библиотеку EncButton в виртуальном режиме

Пример

Внешний массив

#include "AnalogKey.h"
// создаём массив значений сигналов с кнопок
int16_t sigs[16] = {
  1023, 927, 856, 783,
  671,  632,  590,  560,
  504,  480,  455,  440,
  399,  319,  255,  230
};

// указываем пин, количество кнопок и массив значений
AnalogKey<A0, 16, sigs> keys;

void setup() {
  Serial.begin(9600);

  // размер окна опроса такой, чтобы кнопок не пересекались
  // Расстояние между соседними сигналами не меньше половины окна!
  keys.setWindow(30);
}

void loop() {
  // проверяем каждую кнопку в ручном режиме
  if (keys.status(0)) Serial.println("press 0");
  if (keys.status(1)) Serial.println("press 1");
  if (keys.status(2)) Serial.println("press 2");
  if (keys.status(3)) Serial.println("press 3");
  if (keys.status(4)) Serial.println("press 4");
  if (keys.status(5)) Serial.println("press 5");
  if (keys.status(6)) Serial.println("press 6");

  // или выводим номер текущей нажатой (-1 значит ни одна не нажата)
  if (keys.pressed() != -1) Serial.println(keys.pressed());
  delay(10);
}

Внутренний массив

#include "AnalogKey.h"
// указываем пин и количество кнопок
AnalogKey<A0, 16> keys;

void setup() {
  Serial.begin(9600);
  
  // назначаем кнопкам их сигналы
  keys.attach(0, 1023);
  keys.attach(1, 927);
  keys.attach(2, 856);
  keys.attach(3, 783);
  keys.attach(4, 671);
  keys.attach(5, 632);
  keys.attach(6, 590);
  keys.attach(7, 560);
  keys.attach(8, 504);
  keys.attach(9, 480);
  keys.attach(10, 455);
  keys.attach(11, 440);
  keys.attach(12, 399);
  keys.attach(13, 319);
  keys.attach(14, 255);
  keys.attach(15, 230);
}

void loop() {  
  // проверяем каждую кнопку в ручном режиме
  if (keys.status(0)) Serial.println("press 0");
  if (keys.status(1)) Serial.println("press 1");
  if (keys.status(2)) Serial.println("press 2");
  if (keys.status(3)) Serial.println("press 3");
  if (keys.status(4)) Serial.println("press 4");
  if (keys.status(5)) Serial.println("press 5");
  if (keys.status(6)) Serial.println("press 6");

  // или выводим номер текущей нажатой (-1 значит ни одна не нажата)
  if (keys.pressed() != -1) Serial.println(keys.pressed());
  delay(10);
}

Версии

  • v1.0
  • v1.1 - оптимизация, изменена логика размера окна

Баги и обратная связь

При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!

При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:

  • Версия библиотеки
  • Какой используется МК
  • Версия SDK (для ESP)
  • Версия Arduino IDE
  • Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
  • Какой код загружался, какая работа от него ожидалась и как он работает в реальности
  • В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код

About

Библиотека для работы с аналоговой клавиатурой для Arduino

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages