Skip to content

Commit 3928238

Browse files
committed
Update README.md
1 parent 73e05e2 commit 3928238

File tree

1 file changed

+29
-1
lines changed

1 file changed

+29
-1
lines changed

README.md

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -584,7 +584,7 @@ int8_t readEnc();
584584
585585
### Обработка и опрос
586586
Во всех библиотеках есть общая **функция обработки** (тикер `tick`), которая получает текущий сигнал с кнопки и энкодера
587-
- Эту функцию нужно вызывать в основном цикле программы (для виртуальных - с передачей значения)
587+
- Эту функцию нужно однократно вызывать в основном цикле программы (для виртуальных - с передачей значения)
588588
- Функция возвращает `true` при наступлении события (для энкодера - `1` или `-1` при повороте, `0` при его отсутствии. Таким образом поворот в любую сторону расценивается как `true`)
589589
- Есть отдельные функции для вызова в прерывании, они имеют суффикс `ISR`, см. документацию ниже
590590
@@ -603,6 +603,34 @@ void loop() {
603603
```
604604
> В отличие от предыдущих версий библиотеки, функции опроса сбрасываются не внутри себя, а *внутри функции обработки*. Таким образом в примере выше при клике по кнопке в порт дважды выведется сообщение `click()`. Это позволяет использовать функции опроса по несколько раз за текущую итерацию цикла для создания сложной логики работы программы.
605605
606+
#### Несколько функций обработки
607+
По очевидным причинам нельзя вызывать функцию обработки больше одного раза за цикл - каждый следующий вызов сбросит события от предыдущего и код будет работать некорректно. Вот так - нельзя:
608+
```cpp
609+
void loop() {
610+
btn.tick();
611+
if (btn.click()) ...
612+
613+
// ....
614+
615+
btn.tick();
616+
if (btn.hold()) ...
617+
}
618+
```
619+
620+
Если очень нужно попасть в глухой цикл и опрашивать там кнопку, то вот так - можно:
621+
```cpp
622+
void loop() {
623+
btn.tick();
624+
if (btn.click()) ...
625+
626+
while (true) {
627+
btn.tick();
628+
if (btn.hold()) ...
629+
if (btn.click()) break;
630+
}
631+
}
632+
```
633+
606634
#### "Загруженная" программа
607635
Библиотека EncButton - **асинхронная**: она не ждёт, пока закончится обработка кнопки, а позволяет программе выполняться дальше. Это означает, что для корректной работы библиотеки основной цикл программы должен выполняться как можно быстрее и не содержать задержек и других "глухих" циклов внутри себя. Для обеспечения правильной обработки кнопки не рекомендуется иметь в основном цикле задержки длительностью более 50-100 мс. Несколько советов:
608636
- Новичкам: изучите цикл уроков [Как написать скетч](https://alexgyver.ru/lessons/how-to-sketch/)

0 commit comments

Comments
 (0)