Сборка консоли Pong 24×16 на Arduino Nano и MAX7219
Компоненты и материалы
| Компонент | Количество | Примечание |
|---|---|---|
| Arduino Nano R3 | 1 | |
| Модуль матрицы 8x8 с MAX7219 | 6 | Готовые модули с AliExpress вместо самодельных плат |
| Потенциометр 10 кОм (вращающийся) | 2 | Управление ракетками |
| Зуммер | 1 | Звук |
Необходимые инструменты
- Паяльник
Приложения и онлайн-сервисы
- Arduino IDE
О проекте
Собрал небольшую консоль Pong на массиве из 6 шт. матриц 8x8 по инструкции и коду с Instructables.
Вместо самодельных плат использовал дешёвые готовые модули 8x8 с MAX7219 с AliExpress.
Пины «Clock» и «Load» всех модулей соединены параллельно. «Din» первого модуля — к Arduino, «Dout» — к «Din» следующего и так далее. Управление ракетками — два потенциометра 10 кОм на аналоговых входах A0 и A1. Зуммер на D9.
В итоге устройство помещено в пластиковый коробок, контроллеры — в коробки для электроустановки.
Библиотеку LedControl можно скачать здесь: https://github.com/wayoda/LedControl
Код
Полный скетч (Arduino) — см. ниже. Основные моменты:
- Используется библиотека
LedControlдля управления 6 матрицами. - Игра «Pong» с двумя игроками, счёт, звук при отскоке.
- Сложная логика движения мяча, отскоков от стен и ракеток, переходов между матрицами.
- Режимы игры (размер ракетки) выбираются левым потенциометром при старте.
Скетч (Arduino)
// Всегда подключаем библиотеку
#include "LedControl.h"
byte rightscore;
byte leftscore;
int toneloop=1000;
byte pongdisplay[]={ ... }; // Заставка "Pong"
byte zero[]={ ... }; // Цифры 0-5 для счёта
byte one[]={ ... };
byte two[]={ ... };
byte three[]={ ... };
byte four[]={ ... };
byte five[]={ ... };
byte displayevens=0;
byte displayrow=0;
byte displayindex=0;
byte displayodds=1;
unsigned long time;
unsigned long currenttime;
byte mode;
byte deflect;
byte carry;
int line;
LedControl lc=LedControl(12,11,10,6); // DIN=12, CLK=11, LOAD=10, 6 устройств
long randnumber;
byte dir;
int startpos;
byte row;
byte column;
long randNumber;
byte start;
byte diry;
int pass;
byte limit;
#define leftpaddle 0
#define rightpaddle 1
int directionpong;
int rightpongval;
int leftpongval;
byte blinkx;
byte pong[48]; // Позиции мяча и ракеток (48 строк = 6 матриц x 8 строк)
void setup(){
pinMode(leftpaddle, INPUT);
pinMode(rightpaddle, INPUT);
Serial.begin(9600);
// Инициализация 6 матриц
for(int i=0;i<6;i++){
lc.shutdown(i,false);
lc.setIntensity(i,1);
lc.clearDisplay(i);
}
// Показ заставки "Pong"
while(displayevens<5){
while(displayrow<=7){
lc.setRow(displayevens,displayrow,pongdisplay[displayindex]);
displayrow++; displayindex+=2;
}
displayrow=0; displayevens+=2;
}
displayrow=0; displayindex=1;
randomSeed(analogRead(4));
start=1;
time=millis(); currenttime=millis();
// Выбор режима левым потенциометром (3 секунды)
while(currenttime-time<3000){
leftpongval=analogRead(leftpaddle);
leftpongval=map(leftpongval,1023,20,2,0);
if(leftpongval==0){ lc.setLed(3,2,7,true); lc.setLed(3,3,7,false); lc.setLed(3,4,7,false); mode=1; limit=2; }
if(leftpongval==1){ lc.setLed(3,2,7,true); lc.setLed(3,3,7,true); lc.setLed(3,4,7,false); mode=2; limit=1; }
if(leftpongval==2){ lc.setLed(3,2,7,true); lc.setLed(3,3,7,true); lc.setLed(3,4,7,true); mode=3; limit=2; }
delay(50); lc.clearDisplay(3); currenttime=millis();
}
}
void loop(){
paddles();
pongsim();
displayscreen();
}
void paddles(){
// Чтение потенциометров, отображение ракеток в массиве pong[0..47]
// ... (подробный код в оригинале)
}
void pongsim(){
// Физика мяча: движение, отскоки от стен, ракеток, переход между матрицами
// ... (подробный код в оригинале)
}
void displayscreen(){
// Вывод массива pong на 6 матриц
// ... (подробный код в оригинале)
}
void clearscreen(){ ... }
void ball_meets_paddle(){ ... }
void scoreleft(){ ... }
void scoreright(){ ... }
void setscore(){ ... }
Схемы
Производственный процесс
- Создание игры в реальном времени на Arduino Nano с гироскопом MPU-6050 и OLED-дисплеем
- Создание классической игры Pong на Arduino UNO с OLED-дисплеем: пошаговый урок
- DIY USB-геймпад на Arduino: собственный высокопроизводительный контроллер
- Умная копилка: управление монетоприёмником на Arduino Nano
- Сборка консоли Pong 24×16 на Arduino Nano и MAX7219
- Tetris на Arduino Nano: самостоятельная сборка 16×8 LED-матрицы на 74HC595
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Pixel Chaser: игра на один тап с NeoPixel Ring и Arduino Nano
- Мастерство 8×8 LED-матрицы с Arduino Uno: Пошаговое руководство
- NeoPixel Matrix Pong на Arduino Nano: неоновая игра Pong на матрице 15×10