|
3 | 3 | # EncButton
|
4 | 4 | Ультра лёгкая и быстрая библиотека для энкодера, энкодера с кнопкой или просто кнопки
|
5 | 5 | - Максимально быстрое чтение пинов для AVR (ATmega328/ATmega168, ATtiny85/ATtiny13)
|
6 |
| -- Оптимизированный вес |
7 |
| -- Быстрые и лёгкие алгоритмы кнопки и энкодера |
8 |
| -- Энкодер: поворот, нажатый поворот, быстрый поворот, счётчик |
9 |
| -- Кнопка: антидребезг, клик, несколько кликов, счётчик кликов, удержание, режим step |
| 6 | +- Максимально лёгкий вес |
| 7 | +- Быстрые и лёгкие алгоритмы опроса кнопки и энкодера |
| 8 | +- Энкодер: обычный поворот, нажатый поворот, быстрый поворот, доступ к счётчику |
| 9 | +- Кнопка: антидребезг, клик, несколько кликов, счётчик кликов, удержание, режим импульсного удержания |
10 | 10 | - Подключение - **только с подтяжкой к питанию** (внешней или внутренней)!
|
11 |
| -- Опциональный режим callback (+22б SRAM на каждый экземпляр) |
| 11 | +- Опциональный режим с обработчиками callback (+24 байта SRAM на каждый экземпляр) |
12 | 12 | - Виртуальный режим (кнопка, энк, энк с кнопкой)
|
13 | 13 |
|
14 | 14 | ### Совместимость
|
@@ -218,14 +218,31 @@ void setPins(uint8_t mode, uint8_t P1, uint8_t P2, uint8_t P3); // уста
|
218 | 218 | void pullUp(); // здесь не реализована!
|
219 | 219 | ```
|
220 | 220 |
|
221 |
| -### Особенности |
| 221 | +### Заметки |
222 | 222 | - Библиотека универсальная, но сделана с упором на максимальную оптимизацию памяти при работе во всех режимах внутри одного класса, поэтому используется шаблон и дефайны
|
223 | 223 | - При создании объекта с разным количеством пинов (энкодер, кнопка, энкодер с кнопкой) библиотека будет компилироваться по разному, ненужный код будет вырезан. Это позволяет экономить Flash память.
|
224 | 224 | - То же самое касается режимов работы TICK/CALLBACK, при использовании TICK весь относящийся к CALLBACK код вырезается компилятором
|
225 | 225 | - Два алгоритма опроса энкодера, обычный и точный. Точный использует на 16 байт больше SRAM памяти (на всю библиотеку), но позволяет работать даже с низкокачественными и убитыми энкодерами
|
226 | 226 | - Точный алгоритм активируется добавлением `#define EB_BETTER_ENC` перед подключением библиотеки
|
227 | 227 | - Версия библиотеки *EncButton2.h* хранит номера пинов в классе. Используйте эту версию для создания массива объектов EncButton!
|
228 | 228 |
|
| 229 | +### Особенности использования |
| 230 | +#### Тикер |
| 231 | +- Опрос пинов энкодера/кнопки и расчёт таймаутов осуществляется внутри функции `tick()`. Эту функцию нужно однократно вызывать в основном цикле программы. |
| 232 | +- Для повышения качества обработки энкодера/кнопки в загруженной программе (чтобы не пропустить поворот или клик) рекомендуется продублировать опрос в прерывании по *CHANGE*: внутри обработчика прерывания вызываем специальный тикер `tickISR()`, и в основном цикле программы оставляем обычный `tick()`. Он нужен для того, чтобы корректно считались все таймауты и работал callback. |
| 233 | + - При использовании режима работы *CALLBACK* все подключенные функции будут вызываться именно из `tick()`! То есть не из прерывания, а из основного цикла программы. |
| 234 | +- `tick()` возвращает текущий статус энкодера/кнопки: |
| 235 | + - 0 - никаких действий не было |
| 236 | + - 1 - left + turn |
| 237 | + - 2 - right + turn |
| 238 | + - 3 - leftH + turnH |
| 239 | + - 4 - rightH + turnH |
| 240 | + - 5 - click |
| 241 | + - 6 - held |
| 242 | + - 7 - step |
| 243 | + - 8 - press |
| 244 | +Это позволяет например производить дальнейший опрос действий кнопки/энкодера только по факту их совершения: можно поместить весь опрос в блок `if (enc.tick()) {}`. Подробнее смотри в примере *optimisation*. |
| 245 | + |
229 | 246 |
|
230 | 247 | <a id="example"></a>
|
231 | 248 | ## Примеры
|
|
0 commit comments