Оглавление:
Видео: Теннис-понг со светодиодной матрицей, Arduino и джойстиками: 5 шагов (с изображениями)
2025 Автор: John Day | [email protected]. Последнее изменение: 2025-01-13 06:58
Этот проект предназначен как для начинающих, так и для опытных мастеров. На базовом уровне это можно сделать с помощью макета, перемычек и приклеить к куску металлолома (я использовал дерево) с помощью Blu-Tack и без пайки. Однако на более продвинутом уровне его можно припаять к перфорированной плате или специальной печатной плате.
Поскольку это был закрытый проект, у меня не было доступа ко многим инструментам или материалам, поэтому он привязан к куску обрезков дерева, который немного слишком мал для Blu-Tack, однако, несмотря на это, это забавный проект, который объединяется быстро и состоит из общедоступных частей, которые можно дешево найти в Интернете.
Шаг 1: Детали
Чтобы сделать игру в понг, вам необходимо;
- 1x Arduino (подойдет любой тип)
- Светодиодные матрицы 4x MAX7219 8x8
- 2x джойстика
- 1x пьезо-зуммер (опционально)
- 15x проводов для перемычек `` мама-мама '' (3 группы по 5)
- 15 перемычек между мужчинами и женщинами (3 группы по 5 шт.)
- 18x перемычек между мужчинами и женщинами
- 1x макетная плата
- 1x 220 Ом резистор
Вместо платы Arduino Uno или Nano вы можете использовать макетную плату на базе Arduino;
- 1x ATmega328p 28pin IC
- 1x кварцевый генератор 16 кГц
- Керамические конденсаторы 2x 22pF
- 1x USB FTDI UART конвертер
- 1x 100 мкФ электролитический конденсатор
- 1x Micro USB Breakout (опционально)
Инструменты;
- ПК с Arduino IDE (и библиотекой LedControl)
- Соответствующий USB-кабель для вашего Arduino
- Power Bank для игры вдали от вашего компьютера
Шаг 2: Подключение
Подключение очень простое, все, что вам нужно, это перемычки для подключения заголовков матриц и джойстиков к Arduino. Единственная сложность - это питание, так как Arduino Uno имеет только 3 соединения GND и одно соединение 5 В. Здесь входит макетная плата, которая действует как распределительная шина для всех компонентов. Если вы используете NANO, макетная плата будет служить той же цели, а также позволит вам все подключить.
Для электромонтажа следуйте этим подключениям.
- Левый джойстик - GND и 5 В на соответствующие шины питания. SW - вывод 9, VRx - A0, VRy - A1.
- Правый джойстик - GND и 5 В к соответствующим шинам питания. SW - контакт 8, VRx - A2, VRy - A3.
- Крайняя правая светодиодная матрица - GND и 5 В на соответствующие шины питания. DIN - 13, CS - 11, CLK - 12. (По строке 25)
- Все остальные светодиодные матрицы могут быть последовательно подключены к выходу первого справа налево, чтобы код работал правильно.
- Дополнительный зуммер - анод (+) через токоограничивающий резистор 220 Ом к контакту 10, катод (-) - GND.
Шаг 3: Альтернативное подключение
После подключения его к Arduino UNO для экономии места я решил поместить Arduino IC от UNO на макетную плату с кварцевым генератором 16 МГц и парой конденсаторов 22 пФ с каждой стороны на землю. Я считаю, что это была стоящая модификация, поскольку она делает проект более аккуратным и законченным, однако для обновления программы вам нужно использовать USB-программатор FTDI.
Шаг 4: Код + объяснение
Чтобы загрузить код в Arduino, загрузите библиотеку LedControl с GitHub здесь, github.com/wayoda/LedControl и добавьте Zip-файл или добавьте его через диспетчер библиотек в среде IDE. После этого откройте прикрепленный эскиз, выберите свой Arduino в настройках платы и порта в разделе инструментов и загрузите его в Arduino.
Объяснение
Строка 1: добавляет библиотеку.
Строка 5-23: Устанавливает все переменные, константы и номера контактов.
Строка 25: Устанавливает LED Martix, устанавливает контакты управления и количество дисплеев.
Строка 27: Устанавливает функцию сброса.
Строка 30-35: Функция выключения для одновременного включения / выключения всех дисплеев.
Строка 38-43: функция SetIntensity, чтобы установить яркость всех дисплеев вместе.
Строка 46-51: функция ClearAll для очистки всех дисплеев вместе.
Строка 53-64: джойстик. Функция позволяет получить положение джойстиков, сопоставить их с 7 возможными положениями биты для удара по мячу, а затем перемещает биту в новое положение.
Строка 67-435: Функция, которая перемещает мяч к левому игроку на указанной высоте и скорости, проверяет, ударил ли его игрок, и либо продолжает, и устанавливает статус столкновения в истинное значение, либо отбрасывает мяч обратно, добавляет 1 к счету и увеличивает скорость.
Строка 438-811: Функция, которая перемещает мяч к нужному игроку на указанной высоте и скорости, проверяет, ударил ли игрок по нему, и либо продолжает, и устанавливает статус столкновения как истинный, либо отбрасывает мяч обратно, добавляет 1 к счету и увеличивает скорость.
Строка 813-823: Функция отображения смайлика, галочки, креста или вопросительного знака на указанном экране (от 0 справа до 3 слева).
Строка 861-979: Функция отображения чисел 0-9 на указанном дисплее.
Строка 981-1047: Функция для отображения счета на стороне экрана каждого игрока.
Строка 1049-1064: Функция проверки готовности плеера.
Строка 1066-1076: Setup Раздел кода для кода, который запускается один раз при запуске программы.
Строка 1078-1136: Раздел основного цикла для игровой логики, в котором используются все функции и определяется, кто победит, а затем программа перезапускается через 5 секунд после отображения счета.
Шаг 5. Спасибо за внимание
Спасибо за то, что прочитали это руководство, это был забавный проект блокировки, который реализовался за пару дней, когда я узнал больше о программировании Arduino. Если вам понравилось, не стесняйтесь голосовать за него в конкурсе Arduino.