<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Урок 20. GROVE GPIO + Переменный резистор. Игра KingPong]]></title><description><![CDATA[<h2>Цель урока</h2>
<p dir="auto">Привет! Сегодня мы научимся использовать переменный резистор для управления теннисной ракеткой в игре Пинг-Понг.</p>
<p dir="auto"><img src="https://pp.userapi.com/c846216/v846216098/12afa3/YOpYgp6lHkY.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 1</p>
<p dir="auto">Этот урок научит: использовать порт GROVE GPIO для подключения устройства ввода и использовать это на примере игры.</p>
<h2>Краткая справка</h2>
<p dir="auto">Настольный теннис (иногда в разговорной речи ошибочно употребляется название пинг-понг) — олимпийский вид спорта, спортивная игра с мячом, в которой используют ракетки и игровой стол, разграниченный сеткой. Игра может проходить между двумя соперниками или двумя парами соперников. Задачей игроков является при помощи ракеток отправить мяч на сторону соперника так, чтобы тот не смог его возвратить назад в соответствии с правилами. p.s. В нашем случае игрок будет играть сам с собой.</p>
<p dir="auto">Подробно на Wiki: <a href="https://en.wikipedia.org/wiki/Table_tennis" title="https://en.wikipedia.org/wiki/Table_tennis" target="_blank" rel="noopener noreferrer nofollow ugc">https://en.wikipedia.org/wiki/Table_tennis</a></p>
<p dir="auto"><strong>Перечень компонентов для урока</strong></p>
<ul>
<li>PC/MAC;</li>
<li>M5STACK FIRE;</li>
<li>кабель USB-C из стандартного набора;</li>
<li>резистор переменный;</li>
<li>цветные провода из стандартного набора (тип вилка-розетка);</li>
<li>цветные провода не из стандартного набора (тип розетка-розетка);</li>
<li>кусачики;</li>
<li>термоусадка;</li>
<li>иголка;</li>
<li>паяльник и припой.</li>
</ul>
<h2>Начнём!</h2>
<h3>Шаг 1. Делаем переходник (если нет заводского)</h3>
<p dir="auto">В M5FIRE имеется GROVE GPIO разъём, но к сожалению стандартные провода не подойдут. Необходим переходник со штекером, если у Вас его нет, то сейчас разберёмся как это исправить.</p>
<p dir="auto">Первым делом с помощью иголки отогните защёлку на розетке и извлеките контакт (рис. 2).</p>
<p dir="auto"><img src="https://pp.userapi.com/c846216/v846216098/12af61/uDEy3pUy43k.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 2</p>
<p dir="auto">Хорошо. Теперь возьмите кусачики и слегка сожмите равномерно по кругу контакт. Во время данного процесса производите примерку путём подключения к любому из четырёх контактов из черного разъёма (PORT B M5FIRE) (рис. 3). Нам необходимо сжать четыре контакта на четырех проводах.</p>
<p dir="auto"><img src="https://pp.userapi.com/c846216/v846216098/12af6b/VI3GavAJwv8.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 3</p>
<p dir="auto">Когда все четыре провода обжаты необходимо вернуть на два из них пластмассовые изоляторы. Затем подключите все провода и обожмите термоусадкой (рис. 4).</p>
<p dir="auto"><img src="https://pp.userapi.com/c846216/v846216098/12af7b/AeSC2nAZLqA.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 4</p>
<p dir="auto">После того, как провода подключены к устройству - извлекать без необходимости не рекомендуется (рис. 5 - 6).</p>
<p dir="auto"><img src="https://pp.userapi.com/c846216/v846216098/12af85/9-aQPXDlIm4.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 5</p>
<p dir="auto"><img src="https://pp.userapi.com/c846216/v846216098/12af8f/6V6-0N37gCY.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 6</p>
<h3>Шаг 2. Подготовка и подключение переменного резистора</h3>
<p dir="auto">Припаяйте к переменному резистору две пары по три провода (рис. 7). Правый провод подключите к +5 В, центральный к 36, левый к GND (рис. 1).</p>
<p dir="auto"><img src="https://pp.userapi.com/c846216/v846216098/12af99/1-70V_Gr_34.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 7</p>
<h3>Шаг 3. Скетч</h3>
<p dir="auto">Код игры предельно прост, давайте рассмотрим момент интересный в данном уроке:</p>
<p dir="auto">Узнаем напряжение на входе. Не забывайте, что опорное напряжение 3.3 В, а мы подаем 5 В. Более 3.3 В АЦП не понимает:</p>
<pre><code>int voltage = analogRead(36) * 3400 / 4096;
</code></pre>
<p dir="auto">Пересчитаем в проценты:</p>
<pre><code>int percentage = voltage * 100 / 3400;
</code></pre>
<p dir="auto">Рассчитаем положение ракетки:</p>
<pre><code>raket_position = map(percentage, 0, 100, 0, 10);
</code></pre>
<p dir="auto">Каждый раз будем отрисовывать все десять ракеток, но только активная будет красного цвета, а остальные белого:</p>
<pre><code>for (int i = 0; i &lt; 10; i++)
{
  if (i &lt; 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;
  }
}
</code></pre>
<h3>Завершающий шаг</h3>
<p dir="auto">На этом всё (рис. 8). Можно сыграть на рекорд :)</p>
<p dir="auto"><img src="https://pp.userapi.com/c831208/v831208688/1ee9b6/WI8pyLoR4uQ.jpg" alt="" class=" img-fluid img-markdown" /></p>
<p dir="auto">Рисунок 8</p>
<h2>Downloads</h2>
<ul>
<li>Скетч + LED библиотека (GitHub): <a href="https://github.com/dsiberia9s/Lesson-20_KingPong_Game" target="_blank" rel="noopener noreferrer nofollow ugc">https://github.com/dsiberia9s/Lesson-20_KingPong_Game</a></li>
</ul>
]]></description><link>https://community.m5stack.com/topic/409/урок-20-grove-gpio-переменный-резистор-игра-kingpong</link><generator>RSS for Node</generator><lastBuildDate>Wed, 24 Jun 2026 10:12:25 GMT</lastBuildDate><atom:link href="https://community.m5stack.com/topic/409.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 14 Nov 2018 15:02:00 GMT</pubDate><ttl>60</ttl></channel></rss>