Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| products:laboratory_iot_c:exp36 [2024/11/17 16:32] – [Программный код эксперимента] labuser30 | products:laboratory_iot_c:exp36 [2024/11/17 17:04] (текущий) – [Программный код эксперимента] labuser30 | ||
|---|---|---|---|
| Строка 65: | Строка 65: | ||
| } | } | ||
| - | void ICACHE_RAM_ATTR callback(){ | + | void ICACHE_RAM_ATTR callback() { |
| bool value_a = digitalRead(ENC_A); | bool value_a = digitalRead(ENC_A); | ||
| bool value_b = digitalRead(ENC_B); | bool value_b = digitalRead(ENC_B); | ||
| Строка 125: | Строка 125: | ||
| </ | </ | ||
| + | Рассмотрим функцию-обработчик прерывания, | ||
| + | <code arduino[enable_line_numbers=" | ||
| + | void ICACHE_RAM_ATTR callback() { | ||
| + | bool value_a = digitalRead(ENC_A); | ||
| + | bool value_b = digitalRead(ENC_B); | ||
| - | Рассмотрим функцию-обработчик прерывания: | + | state = index(value_a, value_b); |
| - | <code python[enable_line_numbers=" | + | |
| - | def callback(p): | + | |
| - | global count | + | |
| - | global encB | + | |
| - | global encA | + | |
| - | global states | + | |
| - | global old_state | + | |
| - | + | ||
| - | | + | |
| - | | + | |
| - | current_state = states.index((value_a, value_b)) | + | if ((state - state_old |
| - | + | count++; | |
| - | if (current_state | + | if (not(count % 2)){ |
| - | count += 1 | + | |
| - | if not (count % 2): | + | |
| - | print('+'); | + | } |
| - | | + | |
| - | | + | } |
| - | | + | else if ((state |
| - | count -= 1 | + | count--; |
| - | if not (count % 2): | + | if (not(count % 2)){ |
| - | print('-'); | + | |
| - | | + | |
| - | | + | } |
| + | state_old | ||
| + | } | ||
| + | } | ||
| </ | </ | ||
| Она начинается с | Она начинается с | ||
| - | <code arduino[enable_line_numbers=" | + | <code arduino[enable_line_numbers=" |
| - | | + | bool value_a = digitalRead(ENC_A); |
| - | | + | bool value_b = digitalRead(ENC_B); |
| - | global encA | + | |
| - | global states | + | |
| - | global old_state | + | |
| </ | </ | ||
| - | Ключевое слово '' | + | Здесь мы впервые объявляем переменные внутри функции. По умолчанию, |
| Потом, как и раньше, | Потом, как и раньше, | ||
| Строка 169: | Строка 164: | ||
| Как мы заметили ранее, при одном щелчке энкодера происходит смена двух состояний энкодера. Чтобы одному щелчку соответствовало изменение счетчика на 1, мы просто проверяем счетчик на четность. | Как мы заметили ранее, при одном щелчке энкодера происходит смена двух состояний энкодера. Чтобы одному щелчку соответствовало изменение счетчика на 1, мы просто проверяем счетчик на четность. | ||
| - | < | + | < |
| - | | + | if (not(count % 2)){ |
| - | print('+'); | + | |
| - | | + | |
| + | } | ||
| </ | </ | ||
| Строка 178: | Строка 174: | ||
| Теперь самое главное. Обратим внимание на основной цикл программы. Мы в нем ничего не делаем. Все действия, | Теперь самое главное. Обратим внимание на основной цикл программы. Мы в нем ничего не делаем. Все действия, | ||
| + | |||
| + | <WRAP center round info 80%> | ||
| + | [[https:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | </ | ||
| + | |||