Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp34 [2020/05/21 20:29] labuser29products:laboratory_iot:exp34 [2024/11/15 20:41] (текущий) – [Программный код эксперимента] labuser30
Строка 24: Строка 24:
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
-<file python Exp34[enable_line_numbers="2", start_line_numbers_at="1"]>+<file python Exp34.py[enable_line_numbers="2", start_line_numbers_at="1"]>
 from time import sleep_ms, ticks_ms from time import sleep_ms, ticks_ms
 from machine import I2C, Pin from machine import I2C, Pin
Строка 30: Строка 30:
 _init() _init()
  
-DEFAULT_I2C_ADDR = 0x3F+DEFAULT_I2C_ADDR = 0x3F # Или 0x27 в зависимости от модели микросхемы на плате
  
 encA = Pin(13, Pin.IN) encA = Pin(13, Pin.IN)
Строка 72: Строка 72:
 </code> </code>
  
-Объявляем переменную ''old_value_a'' для хранения предыдущего сосотяния сигнала A и переменную ''count'' в которой подсчитываем количество сигналов от энкодера.+Объявляем переменную ''old_value_a'' для хранения предыдущего состояния сигнала A и переменную ''count'' в которой подсчитываем количество сигналов от энкодера.
  
-Чтобы лучше понять алгоритм работы программы еще раз посмотрим на горафик сигналов энкодера:+Чтобы лучше понять алгоритм работы программы еще раз посмотрим на график сигналов энкодера:
 {{ :encoder.png?nolink&600 |}} {{ :encoder.png?nolink&600 |}}
  
Строка 84: Строка 84:
 Если уровни сигналов А и B оба стали высокими (состояние 2) или оба стали низкими (состояние 0), то увеличиваем значение ''count'' на 1, печатаем в терминал символ ''+'' и обновляем информацию на дисплее. Если уровни сигналов А и B оба стали высокими (состояние 2) или оба стали низкими (состояние 0), то увеличиваем значение ''count'' на 1, печатаем в терминал символ ''+'' и обновляем информацию на дисплее.
  
-Если уловие выше не подтвердилось, то проверяем второй вариант: вращение по часовой стрелке:+Если условие выше не подтвердилось, то проверяем второй вариант: вращение по часовой стрелке:
 <code python[enable_line_numbers="2", start_line_numbers_at="35"]> <code python[enable_line_numbers="2", start_line_numbers_at="35"]>
         elif (not value_a and value_b) or (value_a and not value_b):         elif (not value_a and value_b) or (value_a and not value_b):
 </code> </code>
-Если уровень сигнала А стал низким, А сигнала B высоким (состояние 3) или уровень сигнала А стал высоким, а B низким (состояние 1), то уменьшаем значение ''count'' на 1, печатаем символ ''-'' в терминал и обновляем информацию на дисплее.+Если уровень сигнала А стал низким, а сигнала B высоким (состояние 3) или уровень сигнала А стал высоким, а B низким (состояние 1), то уменьшаем значение ''count'' на 1, печатаем символ ''-'' в терминал и обновляем информацию на дисплее.
  
 Если ни одно из этих условий не выполнено, то игнорируем сигналы. Перед завершением итерации записываем текущее состояние линии А как старое, для использования в следующей итерации. Если ни одно из этих условий не выполнено, то игнорируем сигналы. Перед завершением итерации записываем текущее состояние линии А как старое, для использования в следующей итерации.
Строка 94: Строка 94:
     old_value_a = value_a     old_value_a = value_a
 </code> </code>
- 
 ==== Дополнительное задание ==== ==== Дополнительное задание ====
 <WRAP center round tip 60%> <WRAP center round tip 60%>
-  * Попробуй убрать конденсаторы из схемы и покрутить энкодер. Программа будет работать не так, как хотелось бы.+  * Попробуй убрать конденсаторы из схемы и покрутить энкодер. Программа будет работать не так, как хотелось бы. Необходимость конденсаторов станет очевидной.
 </WRAP> </WRAP>