Библиотека для удобной работы с аналоговым джойстиком
- Работает с 10 бит АЦП (0.. 1023)
- Виртуальный режим с внешним значением 10 бит
- Инверсия
- Калибровка нуля
- Мёртвая зона с линеаризацией значения
- "Экспонента" для более плавного контроля
- Оптимизированные вычисления
- Вход: 0.. 1023
- Выход: -255.. 255
Совместима со всеми Arduino платформами (используются Arduino-функции)
- Библиотеку можно найти по названию GyverJoy и установить через менеджер библиотек в:
- 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: найти библиотеку как при установке и нажать "Обновить"
- Вручную: удалить папку со старой версией, а затем положить на её место новую. "Замену" делать нельзя: иногда в новых версиях удаляются файлы, которые останутся при замене и могут привести к ошибкам!
GyverJoy joy; // виртуальный режим
GyverJoy joy(pin); // с указанием пина АЦП
void setPin(uint8_t npin); // указать пин
void invert(bool ninv); // инвертировать (true)
void setPeriod(uint8_t nprd); // период опроса (по умолч. 10 мс)
void calibrate(); // калибровать "ноль" с пина
void calibrate(int val); // калибровать "ноль" внешним значением
void deadzone(int ndead); // установить мёртвую зону в единицах АЦП
void exponent(uint8_t nmode); // настроить экспоненту GJ_LINEAR (умолч.), GJ_SQUARE и GJ_CUBIC или цифрами 0, 1 и 2
bool tick(); // тикер, вызывать в цикле. Опрос по своему таймеру. Вернёт true после чтения
int compute(int adc); // ручной опрос внешним значением
int value(); // получить последнее значение -255.. 255
Укажи пин при инициализации и вызывай tick()
в loop()
. По встроенному таймеру джойстик будет
опрашиваться, значение можно забрать из value()
. Также tick()
вернёт true
, если произошло вычисление.
При инициализации указывать пин не нужно. Для вычисления передай внешнее значение (0.. 1023) в compute()
. Функция вернёт результат соответственно настройкам.
invert
инвертирует направление джойстикаcalibrate
читает текущее значение сигнала и считает его за "ноль" джойстикаdeadzone
устанавливает мёртвую зону, но значения пересчитываются и линейность сохраняетсяexponent
задаёт "экспоненциальное" преобразование значения для более плавного управления
deadzone
и exponent
можно использовать совместно! Экспонента будет считаться от краёв мёртвой зоны.
#include <GyverJoy.h>
GyverJoy jx(0); // джойстик на пине 0
void setup() {
Serial.begin(9600);
//jx.invert(true); // инвертировать
jx.calibrate(); // калибровка нуля при запуске
jx.deadzone(30); // мёртвая зона
jx.exponent(GJ_CUBIC); // экспонента для плавности
}
void loop() {
// тикер опрашивает АЦП по своему таймеру
if (jx.tick()) {
// выводим значение
Serial.println(jx.value());
}
}
#include <GyverJoy.h>
GyverJoy jx; // виртуальный джойстик
void setup() {
Serial.begin(9600);
//jx.invert(true); // инвертировать
// калибровка внешним значением
jx.calibrate(analogRead(0));
jx.deadzone(30); // мёртвая зона
jx.exponent(GJ_CUBIC); // экспонента для плавности
}
void loop() {
// передаём аналоговый сигнал с любого источника
int value = jx.compute(analogRead(0));
Serial.println(value);
delay(10);
}
- v1.0
При нахождении багов создавайте Issue, а лучше сразу пишите на почту alex@alexgyver.ru
Библиотека открыта для доработки и ваших Pull Request'ов!
При сообщении о багах или некорректной работе библиотеки нужно обязательно указывать:
- Версия библиотеки
- Какой используется МК
- Версия SDK (для ESP)
- Версия Arduino IDE
- Корректно ли работают ли встроенные примеры, в которых используются функции и конструкции, приводящие к багу в вашем коде
- Какой код загружался, какая работа от него ожидалась и как он работает в реальности
- В идеале приложить минимальный код, в котором наблюдается баг. Не полотно из тысячи строк, а минимальный код