Змейка на ардуино уно

Урок 34. Игра змейка (питон) на матрице из светодиодов

В этом уроке мы создадим игру змейка (питон) на матрице из 48 светодиодов и 4 кнопок. Обычно, светодиодные матрицы состоят из светодиодов, аноды и катоды которых соединены по столбцам и строкам. В таких матрицах, светодиоды зажигаются поочерёдно. В нашем уроке, все светодиоды будут гореть постоянно, так как они, как и кнопки, подключены к Arduino через расширители выводов.

Нам понадобится:

  • Arduino Uno х 1шт.
  • Trema модуль — расширитель на 8 Входов/Выходов. x 8шт.
  • Trema модуль — светодиод (синий) x 48шт.
  • Trema модуль — кнопка (синяя) x 4шт.
  • Trema Shield x 1шт.
  • Конструктор для создания каркаса.

Для реализации проекта нам необходимо установить библиотеку:

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE .

Видео:

Схема подключения:

  • Расширители выводов подключаются к Arduino по аппаратной шине I2C. На одной шине можно разместить до 8 расширителей, адреса которым задаются при помощи переключателей на модуле, от 0x20 до 0x27.
  • Светодиоды подключаются к первым 6 выводам каждого расширителя (если подключить к другим выводам, то нужно изменить их номера в скетче).
  • Кнопки подключаются к 7му выводу первых 4х расширителей (если подключить к другим выводам, или модулям расширителей, то их номера и адреса, нужно изменить в скетче).

Алгоритм работы:

При старте:
  • Подключение библиотеки и создание объектов для каждого модуля расширителя выводов. Объекты можно создавать по отдельности, но в нашем уроке, мы создали объекты в виде элементов одного массива, так проще выводить информацию на матрицу.
  • Конфигурация выводов, для светодиодов OUTPUT, для кнопок INPUT. Выводы конфигурируются вызовом функции pinMode, для каждого используемого вывода, каждого объекта.
  • Создание переменных, для хранения координат «съедобной» точки, которую должен съесть питон. Создание двух массивов для хранения координат всех точек питона (в одном массиве координаты по оси X, а в другом, по оси Y). В этих массивах должны быть установлены координаты первых двух точек питона. Создание переменной для хранения длины питона. Создание переменной для хранения направления питона. Прорисовка питона (включение двух светодиодов в соответствии с координатами в массивах).
В коде loop:
  • Продвигаем питона на один шаг вперёд с интервалом в 500 мс, для этого:
    • Сдвигаем элементы массивов, хранящие координаты точек питона (ось X и ось Y), на один элемент к концу массива. После сдвига, значение нулевого элемента, будет совпадать со значением первого элемента, в обоих массивах. А длина питона, хранящаяся в отдельной переменной, останется неизменной, значит питон не вырос.
    • Меняем значение 0 элемента (голова питона) на значение соседней координаты (сверху, снизу, справа, слева), в зависимости от направления питона.
    • Проверяем условия игры:
      • Если координата головы питона выходит за пределы поля, значит игра проиграна
      • Если координата головы питона совпадает с координатой любой из точек тела питона, значит игра проиграна
      • Если координата головы питона совпадает с координатой «съедобной» точки, значит увеличиваем значение длины питона и создаём координату новой точки
      • Если длина питона >= 15, значит игра выиграна
    • Выключаем светодиод, координата которого соответствует концу питона (элементы массивов с индексом = длина питона + 1)
    • Включаем светодиод, координата которого соответствует голове питона (элементы массивов с индексом 0)
  • Мигаем «съедобной точкой» с интервалом в 100 мс.
  • Читаем состояние выводов к которым подключены кнопки, меняем направление питона при их нажатии

Если игра выиграна, то выводим улыбающийся смайлик, а если проиграна, то грустный смайлик..

Источник

Урок 48. Игра змейка (snake) на Arduino

В этом уроке мы создадим игру «Змейка». Это известная многим игра «Snake» впервые выпущенная фирмой Gremlin Industries в 1977 г. Первоначальная версия игры была написана для игрового автомата «Hustle», далее игра распространилась на компьютеры, игровые приставки и сотовые телефоны. Игра присутствовала и на игровых автоматах в CCCР, её переводили как: «Змейка», «Удав», «Питон» и т.д.

Правила игры «Змейка»:

На игровом поле появляется змейка и её еда, представленные набором фигур. В процессе игры змейка постоянно ползёт, игрок не может её остановить, но может направлять её голову влево, вправо, вверх и вниз, а хвост змейки движется следом. Задача игрока заключается в том, что бы змейка съела еду избегая столкновений со своим хвостом и с границами игрового поля. После каждого съеденного куска еды, змейка становится длиннее (что усложняет задачу игроку), а еда вновь появляется в случайном месте игрового поля.

Примечание: В некоторых версиях игра не имеет границ игрового поля, заползая за экран, змейка появляется с противоположной стороны экрана. Есть версии игры с дополнительными препятствиями и даже трехмерная версия игры.

Управление:

Традиционно игрок управляет змейкой используя кнопки или джойстик, но мы откажемся от этих деталей в пользу акселерометра, присутствующего в Trema-модуле IMU 9 DOF (Inertial Measurement Unit 9 Degrees Of Freedom). Таким образом управление змейкой будет осуществляться наклоном всего устройства влево, вправо, вперёд или назад.

Нам понадобится:

  • Arduino Uno х 1шт.
  • Trema OLED-дисплей 128×64 х 1шт.
  • Trema-модуль IMU 9 DOF х 1шт.
  • Trema Set Shield х 1шт.
    И никаких проводов (кроме USB для загрузки скетча).

Для реализации проекта нам необходимо установить библиотеку:

  • iarduino_OLED — графическая библиотека для работы с Trema OLED дисплеями.

О том как устанавливать библиотеки, Вы можете ознакомиться на странице Wiki — Установка библиотек в Arduino IDE.

Видео:

Схема подключения:

Наличие всего двух колодок в секциях Trema Set Shield, не позволит Вам неправильно установить модули, т.к. при неправильном подключении модули будут смещены относительно разметки своей секции и Вы не сможете закрепить их винтами.

Код программы:

Алгоритм работы:

  • В начале скетча (до кода setup) выполняются следующие действия:
    • Подключаем библиотеку iarduino_Position_BMX055 для работы с датчиком Trema IMU 9 DOF.
    • Объявляем объект sensor, указывая работу только с акселерометром.
    • Подключаем графическую библиотеку iarduino_OLED для работы с Trema OLED дисплеем.
    • Объявляем объект myOLED указывая адрес дисплея на шине I2C, он должен совпадать с адресом установленным переключателем на обратной стороне платы OLED дисплея.
    • Подключаем шрифты предустановленные в библиотеке myOLED.
    • Объявляем массив и переменные участвующие в работе скетча.
    • Объявляем функции используемые в скетче.
  • В коде setup выполняются следующие действия:
    • Инициируем работу с Trema OLED дисплеем и запрещаем автоматический вывод данных.
    • Выводим анимированную заставку (текст «Змейка» с появляющимися фигурами) и очищаем экран.
    • Инициируем работу с датчиком.
    • Определяем начальные параметры игры (Координаты головы змейки, координаты хвоста змейки, координаты квадратика, количество элементов хвоста змейки, выбор направления движения)
  • В коде loop выполняются следующие действия:
    • Управление скоростью змейки.
    • Чтение данных с датчика.
    • Обновление рамки и квадратика дисплея.
    • Выбор поворота змейки.
    • Перемещение по частям каждого элемента массива.
    • Вывод змеи с новыми координатами и очищение последнего элемента.
    • Разрешаем автоматический вывод данных.
    • Проверка на увеличение количества элементов в змейке.
    • Проверка проигрышных и выигрышных ситуаций (Выход змейки за пределы игрового поля, столкновение головы змейки с хвостом, набор максимального количества элементов змейки).

Все строки скетча (кода программы) прокомментированы, так что Вы можете подробнее ознакомиться с кодом прочитав комментарии строк.

Источник

Собираем змейку на Arduino

Это будет самая необычная змейка, в которую вы играли.

Змейка — очень благодатная тема для программистов, и вот почему:

  • понятные и простые правила,
  • минимум логики, которую нужно запрограммировать,
  • примитивная графика,
  • простое управление,
  • море кайфа.

У нас уже был разбор того, как в неё играет искусственный интеллект, и статья о том, как за 10 минут сделать змейку для браузера. Теперь шагнём дальше и не только напишем код, но и соберём железо. Результат — ваша собственная змейка на микропроцессорной плате, с экраном.

Что понадобится

Есть много вариантов платформы Adruino, но нам нужна одна из самых простых — микросхема на плате с ножками для монтажа в специальную плату. Обратите внимание: при покупке вам нужно указать, что хотите плату с уже припаянными ногами (soldered headers / soldered pins). Иначе придётся паять ноги на плату, а смысл был в том, чтобы не паять.

Примерно вот так мы соединим между собой все элементы на плате.

По ней и будет бегать наша змейка. Можно, конечно, использовать ЖК-матрицы, чтобы картинка была получше, но они стоят дороже и программировать их сложнее.

Обычный переменный резистор на 10 кОм. Суть этих устройств в том, что, вращая регулятор, мы можем изменять сопротивление резистора. В нашем проекте он будет отвечать за скорость движения змейки. Если она двигается слишком быстро — крутите ручку и змейка замедлится.

Работает так же, как на обычной приставке. Им мы будем управлять змейкой.

Самый кайф этого проекта в том, что нам не придётся паять, чтобы собрать все модули вместе. Вместо этого используем провода с разными разъёмами, поэтому лучше сразу заказать полный комплект.

Загружаем код игры

Мы сейчас не будем разбирать особенности программирования под Arduino, а вместо этого сразу дадим готовый скетч. Скетч — это программа для Arduino, которая написана на C++ и которую сохранили как файл с расширением .ino.

Чтобы загрузить код игры в микроконтроллер, вам понадобится:

  1. Сохранить программу в виде .ino-файла.
  2. Подключить плату к компьютеру с помощью USB-кабеля.
  3. Установить Arduino IDE — среду разработки под Arduino для компьютера.
  4. Настроить компьютер для работы с платой. Нужно поставить драйверы для контроллера и убедиться, что компьютер всё распознал верно. Чтобы понять, как это правильно сделать, поищите в интернете «Как подключить arduino nano к компьютеру» или почитайте эту статью (не нашу).
  5. Открыть в Arduino IDE наш файл с программой.
  6. Там же нажать кнопку «Загрузить».
  7. Подождать сообщения о том, что программа загружена.

Собираем и запускаем

Главное на этом этапе — не спешить и делать всё по картинке. Чтобы подключить провода к Arduino, нужно вставить его в центр белой пластиковой монтажной платы и подключить нужные провода рядом с нужными входами. «Рядом» — то есть на том же, грубо говоря, столбце: дырки на монтажной плате соединены как бы поперёк платы, то есть все провода, которые вы воткнёте в один столбец, будут соединены.

Если всё равно непонятно, что и куда подключать, посмотрите видео:

Чтобы игра заработала после сборки, достаточно подключить плату к любому блоку питания или компьютеру.

Источник

Игра змейка. Проекты. Ардуино

Привет. в прошлый раз мы начали программировать змейку. Мы используем светодиодную матрицу и джойстик для управления. Сегодня допишем код, чтобы у нас получилась настоящая игра змейка.

В предыдущей статье мы уже начали писать программу для игры. Посмотрите тот пост, если пропустили или уже забыли. Сегодня мы допишем программу, чтобы получить настоящую игру.

Для того, чтобы выполнить этот проект нам понадобиться

  • Ардуино UNO
  • Перемычки
  • Макетная плата
  • Светодиодная матрица
  • Резистор 220 Ом
  • Джойстик
  • Кабель USB

Игра змейка

Мы уже можем управлять змейкой с помощью джойстика и переходить через границы матрицы. Но, чтобы это была настоящая игра, нужно добавить еще несколько моментов.

Во-первых змейка должна состоять из нескольких светодиодов. И ее размер должен увеличиваться, когда змейка ест.

Во-вторых мы должны создать еду, проверять, не съели ли ее. И создавать новую.

И в-третьих, нужно создать условия проигрыша. Иначе какая это будет игра.

Несколько секций змейки

Сложность здесь в том, что при изменении направления движения головы змейки, ее тело должно повторять точный путь. Для этого нам придется записывать координаты каждой секции змейки. И выводить их последовательно при изменении направления движения.

Для этого заведем специальный массив. В нем будут храниться координаты каждой секции змейки. Максимальный размер змеи будет равен размеру матрицы, поэтому сразу зарезервируем 256 элементов. Также создадим переменную для реального размера змейки в текущий момент. И текущую скорость.

В начале игры, все элементы змеи, кроме ее реального размера, должны быть пустыми. А несколько элементов должны быть рядом со стартовой позицией. Инициализируем это следующим образом.

Теперь в функции перемещения змейки мы должны нарисовать все элементы, но убрать лишние при движении вперед. Для этого 0 элементу присвоим новое значение из функции Snakedirection, а последующим элементам присвоим значения предыдущих элементов.

Таким образом, в нашей змейке появилось три секции. И при движении они перемещаются по матрице. А при смене направления движения джойстиком, весь маршрут сохраняется и прорисовывается на матрице.

Движение с сохранением координат

Теперь создадим что-нибудь съедобное. Чтобы змея могла съесть и вырасти. В переменную f запишем координаты точки с едой. Она будет генерироваться случайно.

И напишем небольшую функцию. Она будет проверять, съедена ли еда. И создавать новую.

Если точка съедена, вы увеличим размер змейки, увеличим скорость и создадим новую точку со случайными координатами. Также перекрасим змейку в цвета съеденной ранее еды.

Генерация еды и увеличение размера

Конец игры

Для определения конца игры напишем еще одну функцию. Она будет восстанавливать размер змейки, скорость, а также перекрашивать ее в красный цвет.

Таким образом мы будем понимать, что старая змейка умерла и нужно все начинать сначала. Конечно, вы можете изменить код и добавить текст или закрасить всю матрицу красным.

Теперь добавим условие, при котором считать игру законченной. Поскольку мы сделали границы матрицы прозрачными. То, запретим змейке пересекаться со своим собственным телом. Для этого в функцию прорисовки текущего шага добавим проверку.

Если координаты текущего шага уже есть в составе змейки, вызываем функцию death()

Конец игры

Мы не стали сбрасывать все цифры из массива snake, а значит после смерти несколько элементов останутся лежать на месте. Наезжать на них так же будет нельзя, ведь эти координаты находятся в составе змейки.

Полный текст программы

Заключение

Мы написали нашу первую игру для Ардуино. Конечно, в коде еще много возможностей для улучшения игры. И у вас в запасе еще 78% памяти Ардуино. Но это уже готовая классическая аркадная игра.

Источник

Adblock
detector