Показаны различия между двумя версиями страницы.
Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
products:laboratory_iot:exp35 [2020/05/22 14:00] – [Программный код эксперимента] labuser29 | products:laboratory_iot:exp35 [2024/11/16 11:25] (текущий) – [Программный код эксперимента] labuser30 | ||
---|---|---|---|
Строка 23: | Строка 23: | ||
==== Программный код эксперимента ==== | ==== Программный код эксперимента ==== | ||
- | <file python Exp35[enable_line_numbers=" | + | <file python Exp35.py[enable_line_numbers=" |
from time import sleep_ms, ticks_ms | from time import sleep_ms, ticks_ms | ||
from machine import I2C, Pin | from machine import I2C, Pin | ||
Строка 29: | Строка 29: | ||
_init() | _init() | ||
- | DEFAULT_I2C_ADDR = 0x3F | + | DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от модели микросхемы на плате |
encA = Pin(13, Pin.IN) | encA = Pin(13, Pin.IN) | ||
Строка 60: | Строка 60: | ||
value_b = encB.value() | value_b = encB.value() | ||
- | | + | |
| | ||
- | if (current_state | + | if (state - old_state == 1) or (state == 0 and old_state == 3): |
count += 1 | count += 1 | ||
print(' | print(' | ||
print_lcd(count) | print_lcd(count) | ||
- | old_state = current_state | + | old_state = state |
- | elif (current_state | + | elif (state - old_state == -1) or (state == 3 and old_state == 0): |
count -= 1 | count -= 1 | ||
print(' | print(' | ||
print_lcd(count) | print_lcd(count) | ||
- | old_state = current_state | + | old_state = state |
</ | </ | ||
- | Описываем возможные состояния конечного атвомата: | + | Описываем возможные состояния конечного автомата: |
<code python[enable_line_numbers=" | <code python[enable_line_numbers=" | ||
states = ( | states = ( | ||
Строка 96: | Строка 96: | ||
И определяем номер состояния конечного автомата, | И определяем номер состояния конечного автомата, | ||
<code python[enable_line_numbers=" | <code python[enable_line_numbers=" | ||
- | | + | |
</ | </ | ||
Строка 102: | Строка 102: | ||
с помощью оператора '' | с помощью оператора '' | ||
- | Теперь мы знаем индекс только что измеренного состояния линий. А индекс последнего состояния конечного автомата хранится в переменной '' | + | Теперь мы знаем индекс только что измеренного состояния линий. А индекс последнего состояния конечного автомата хранится в переменной '' |
<code python[enable_line_numbers=" | <code python[enable_line_numbers=" | ||
- | if (current_state | + | if (state - old_state == 1) or (state == 0 and old_state == 3): |
</ | </ | ||
- | Если индекс нового состояния на 1 больше старого или, если новое состояние 0, а старое 3, то регистрируем переход в новое состояние. Переводим конечный автомат в новое состояние '' | + | Если индекс нового состояния на 1 больше старого или, если новое состояние 0, а старое 3, то регистрируем переход в новое состояние. Переводим конечный автомат в новое состояние '' |
Аналогично для вращения в обратную сторону. Если индекс состояния уменьшился на один, то производим аналогичные действия. | Аналогично для вращения в обратную сторону. Если индекс состояния уменьшился на один, то производим аналогичные действия. | ||
- | Когда ты запустишь эту программу в конструкторе, | + | Когда ты запустишь эту программу в конструкторе, |