Skip to content

Commit 351716d

Browse files
authored
Update README.md
1 parent c912a92 commit 351716d

File tree

1 file changed

+23
-6
lines changed

1 file changed

+23
-6
lines changed

README.md

Lines changed: 23 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,12 @@
33
# EncButton
44
Ультра лёгкая и быстрая библиотека для энкодера, энкодера с кнопкой или просто кнопки
55
- Максимально быстрое чтение пинов для AVR (ATmega328/ATmega168, ATtiny85/ATtiny13)
6-
- Оптимизированный вес
7-
- Быстрые и лёгкие алгоритмы кнопки и энкодера
8-
- Энкодер: поворот, нажатый поворот, быстрый поворот, счётчик
9-
- Кнопка: антидребезг, клик, несколько кликов, счётчик кликов, удержание, режим step
6+
- Максимально лёгкий вес
7+
- Быстрые и лёгкие алгоритмы опроса кнопки и энкодера
8+
- Энкодер: обычный поворот, нажатый поворот, быстрый поворот, доступ к счётчику
9+
- Кнопка: антидребезг, клик, несколько кликов, счётчик кликов, удержание, режим импульсного удержания
1010
- Подключение - **только с подтяжкой к питанию** (внешней или внутренней)!
11-
- Опциональный режим callback (+22б SRAM на каждый экземпляр)
11+
- Опциональный режим с обработчиками callback (+24 байта SRAM на каждый экземпляр)
1212
- Виртуальный режим (кнопка, энк, энк с кнопкой)
1313

1414
### Совместимость
@@ -218,14 +218,31 @@ void setPins(uint8_t mode, uint8_t P1, uint8_t P2, uint8_t P3); // уста
218218
void pullUp(); // здесь не реализована!
219219
```
220220

221-
### Особенности
221+
### Заметки
222222
- Библиотека универсальная, но сделана с упором на максимальную оптимизацию памяти при работе во всех режимах внутри одного класса, поэтому используется шаблон и дефайны
223223
- При создании объекта с разным количеством пинов (энкодер, кнопка, энкодер с кнопкой) библиотека будет компилироваться по разному, ненужный код будет вырезан. Это позволяет экономить Flash память.
224224
- То же самое касается режимов работы TICK/CALLBACK, при использовании TICK весь относящийся к CALLBACK код вырезается компилятором
225225
- Два алгоритма опроса энкодера, обычный и точный. Точный использует на 16 байт больше SRAM памяти (на всю библиотеку), но позволяет работать даже с низкокачественными и убитыми энкодерами
226226
- Точный алгоритм активируется добавлением `#define EB_BETTER_ENC` перед подключением библиотеки
227227
- Версия библиотеки *EncButton2.h* хранит номера пинов в классе. Используйте эту версию для создания массива объектов EncButton!
228228

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+
229246

230247
<a id="example"></a>
231248
## Примеры

0 commit comments

Comments
 (0)