Различия

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

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

Предыдущая версия справа и слеваПредыдущая версия
Следующая версия
Предыдущая версия
products:laboratory_iot:exp54 [2020/06/12 09:53] – [Схема эксперимента] labuser29products:laboratory_iot:exp54 [2021/07/21 17:04] (текущий) – [Схема эксперимента] labuser29
Строка 1: Строка 1:
 ===== Эксперимент 54. Управление кладовщиком ===== ===== Эксперимент 54. Управление кладовщиком =====
  
-Научим кладовщика двигаться при нажатии на кнопки "вверх", "вниз", "влево" и "вправо". Кроме того добавим логику, обеспечивающую запрет прохождения кладовщика сквозь стены.+Научим кладовщика двигаться при нажатии на кнопки "вверх", "вниз", "влево" и "вправо"
  
 Подключим кнопки к микроконтроллеру. Три кнопки подтянуты к земле, а одна к питанию. Это сделано специально, чтобы обеспечить условия для правильной загрузки микроконтроллера. Микроконтроллер при включении проверяет состояние некоторых выводов и на основании этого принимает решение о режиме работы — выполнение программы или переход в режим перепрошивки. Для нормального режима работы необходимо, чтобы уровень сигнала на выводе 15 был низким, а на 2 и 0 был высоким. Чтобы соблюсти эти условия и пришлось подключить кнопки по-разному. Подключим кнопки к микроконтроллеру. Три кнопки подтянуты к земле, а одна к питанию. Это сделано специально, чтобы обеспечить условия для правильной загрузки микроконтроллера. Микроконтроллер при включении проверяет состояние некоторых выводов и на основании этого принимает решение о режиме работы — выполнение программы или переход в режим перепрошивки. Для нормального режима работы необходимо, чтобы уровень сигнала на выводе 15 был низким, а на 2 и 0 был высоким. Чтобы соблюсти эти условия и пришлось подключить кнопки по-разному.
Строка 8: Строка 8:
  
 {{ :products:esp-iot:exp27_mont.png?direct&600 |}} {{ :products:esp-iot:exp27_mont.png?direct&600 |}}
-//Рисунок 1. Монтажная схема эксперимента//+//Рисунок 1. Монтажная схема эксперимента с 8 выводами//
  
 +{{ :products:esp-iot:exp27_mont_11pin.png?direct&600 |}}
 +//Рисунок 2. Монтажная схема эксперимента с 11 выводами//
 ==== Программный код эксперимента ==== ==== Программный код эксперимента ====
  
Строка 125: Строка 127:
  
 # init TFT # init TFT
-tft.initr()+tft.initr(tft.BGR# tft.initr(tft.RGB) #Если вместо синего цвета отображается красный, а вместо красного синий
 tft.clear(tft.COLOR_BLACK) #b, g, r tft.clear(tft.COLOR_BLACK) #b, g, r
  
Строка 173: Строка 175:
         man.setPos(newPos[0], newPos[1])         man.setPos(newPos[0], newPos[1])
 </file> </file>
 +
 +В код прошлого эксперимента мы добавили класс кнопки, который уже использовали ранее, например в проекте секундомера. Объявили 4 кнопки, на выводах 16, 15, 12 и 0:
 +<code python[enable_line_numbers="2", start_line_numbers_at="137"]>
 +btnUp = Button(16, 1)
 +btnDown = Button(15, 1)
 +btnLeft = Button(12, 1)
 +btnRight = Button(0, 0)
 +</code>
 +
 +Добавили бесконечный цикл, в котором постоянно мониторим события нажатия на кнопки:
 +<code python[enable_line_numbers="2", start_line_numbers_at="137"]>
 +while True:
 +    mPos = man.getPos()
 +
 +    if btnUp.onPress():
 +        newPos = (mPos[0], mPos[1]-1)
 +        man.setPos(newPos[0], newPos[1])
 +
 +    if btnDown.onPress():
 +        newPos = (mPos[0], mPos[1]+1)
 +        man.setPos(newPos[0], newPos[1])
 +
 +    if btnLeft.onPress():
 +        newPos = (mPos[0]-1, mPos[1])
 +        man.setPos(newPos[0], newPos[1])
 +
 +    if btnRight.onPress():
 +        newPos = (mPos[0]+1, mPos[1])
 +        man.setPos(newPos[0], newPos[1])
 +</code>
 +
 +При нажатии на кнопку "вверх" уменьшаем координату Y и задаем новую координату кладовщику. Аналогичные действия производим при нажатии на другие кнопки. Теперь наш кладовщик может двигаться по экрану. Но сейчас нет никаких ограничений — он свободно проходит сквозь стены и ящики, никак на них не влияя. Теперь самое время реализовать логику игры, описать условия и взаимодействия. Этим займемся в следующем эксперименте.