Урок 20. GROVE GPIO + Переменный резистор. Игра KingPong



  • Цель урока

    Привет! Сегодня мы научимся использовать переменный резистор для управления теннисной ракеткой в игре Пинг-Понг.

    Рисунок 1

    Этот урок научит: использовать порт GROVE GPIO для подключения устройства ввода и использовать это на примере игры.

    Краткая справка

    Настольный теннис (иногда в разговорной речи ошибочно употребляется название пинг-понг) — олимпийский вид спорта, спортивная игра с мячом, в которой используют ракетки и игровой стол, разграниченный сеткой. Игра может проходить между двумя соперниками или двумя парами соперников. Задачей игроков является при помощи ракеток отправить мяч на сторону соперника так, чтобы тот не смог его возвратить назад в соответствии с правилами. p.s. В нашем случае игрок будет играть сам с собой.

    Подробно на Wiki: https://en.wikipedia.org/wiki/Table_tennis

    Перечень компонентов для урока

    • PC/MAC;
    • M5STACK FIRE;
    • кабель USB-C из стандартного набора;
    • резистор переменный;
    • цветные провода из стандартного набора (тип вилка-розетка);
    • цветные провода не из стандартного набора (тип розетка-розетка);
    • кусачики;
    • термоусадка;
    • иголка;
    • паяльник и припой.

    Начнём!

    Шаг 1. Делаем переходник (если нет заводского)

    В M5FIRE имеется GROVE GPIO разъём, но к сожалению стандартные провода не подойдут. Необходим переходник со штекером, если у Вас его нет, то сейчас разберёмся как это исправить.

    Первым делом с помощью иголки отогните защёлку на розетке и извлеките контакт (рис. 2).

    Рисунок 2

    Хорошо. Теперь возьмите кусачики и слегка сожмите равномерно по кругу контакт. Во время данного процесса производите примерку путём подключения к любому из четырёх контактов из черного разъёма (PORT B M5FIRE) (рис. 3). Нам необходимо сжать четыре контакта на четырех проводах.

    Рисунок 3

    Когда все четыре провода обжаты необходимо вернуть на два из них пластмассовые изоляторы. Затем подключите все провода и обожмите термоусадкой (рис. 4).

    Рисунок 4

    После того, как провода подключены к устройству - извлекать без необходимости не рекомендуется (рис. 5 - 6).

    Рисунок 5

    Рисунок 6

    Шаг 2. Подготовка и подключение переменного резистора

    Припаяйте к переменному резистору две пары по три провода (рис. 7). Правый провод подключите к +5 В, центральный к 36, левый к GND (рис. 1).

    Рисунок 7

    Шаг 3. Скетч

    Код игры предельно прост, давайте рассмотрим момент интересный в данном уроке:

    Узнаем напряжение на входе. Не забывайте, что опорное напряжение 3.3 В, а мы подаем 5 В. Более 3.3 В АЦП не понимает:

    int voltage = analogRead(36) * 3400 / 4096;
    

    Пересчитаем в проценты:

    int percentage = voltage * 100 / 3400;
    

    Рассчитаем положение ракетки:

    raket_position = map(percentage, 0, 100, 0, 10);
    

    Каждый раз будем отрисовывать все десять ракеток, но только активная будет красного цвета, а остальные белого:

    for (int i = 0; i < 10; i++)
    {
      if (i < 5)
      {
        x = 0;
        y = i * (raket_height + raket_margin);
      }
      else
      {
        x = screen_width - raket_width;
        y = (9 - i) * (raket_height + raket_margin);
      }    
      color = (i == raket_position) ? RED : WHITE;
      M5.Lcd.fillRect(x, y, raket_width, raket_height, color);
      ledBar(0, 0, 0, 12);
      ledBar(255, 0, 0, 9 - raket_position);
      if (i == raket_position)
      {
        raket_x = x;
        raket_y = y;
      }
    }
    

    Завершающий шаг

    На этом всё (рис. 8). Можно сыграть на рекорд :)

    Рисунок 8

    Downloads