亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Manufacturing Technology >> 制造工艺

Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏

零部件与材料

所需工具

软件平台

制作矩阵屏

购买一条可单点寻址的 NeoPixel 灯条。展开,注意灯条上的箭头方向——只能单向连接,接反会损坏。

Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏

我用 30 灯/米、5 米长的灯条,剪成每段 10 灯的短条。在硬纸板上交替方向铺设(之字形),剪线焊接连接。焊完 14 次后矩阵成型。用万用表检查无短路(短路会烧毁 Nano、矩阵甚至 USB 口,我有过教训)。上传 Adafruit NeoMatrix 测试例程,参数设为 NEO_BOTTOM + NEO_LEFT + NEO_COLUMNS + NEO_ZIGZAG,屏幕滚动显示“howdy”即成功。

Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏

游戏逻辑

乒乓游戏包含挡板、墙壁、球。代码维护球的 X/Y 坐标,方向用 1 或 -1 表示。挡板为矩形,通过电位器映射到 0-15 位置,Y 轴固定。游戏开始球在 (1,1),玩家需让球弹一次才算正式开始。物理碰撞考虑球的方向和击中挡板的位置。

接线与畅玩

NeoPixel 矩阵接 Arduino Nano,摇杆 +5V 接 5V,GND 接地,X 轴接 A0。享受你的霓虹乒乓!可尝试增加双人模式、优化物理引擎。

代码

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Adafruit_NeoPixel.h>
#define PIN 6
Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(15, 10, PIN,
  NEO_MATRIX_BOTTOM + NEO_MATRIX_LEFT + NEO_MATRIX_COLUMNS + NEO_MATRIX_ZIGZAG,
  NEO_GRB + NEO_KHZ800);

int paddleX = 0, paddleY = 0;
int oldPaddleX, oldPaddleY;
int ballDirectionX = 1, ballDirectionY = 1;
int score = 0;
int ballSpeed = 10; // 越小越快
int ballX, ballY, oldBallX, oldBallY;

void setup() {
  Serial.begin(9600);
  matrix.begin();
  matrix.fillScreen(0);
  matrix.setTextColor(matrix.Color(0,255,0));
  matrix.print("GO");
  matrix.show();
  delay(2000);
  matrix.fillScreen(0);
  matrix.show();
}

void loop() {
  int myWidth = matrix.width();
  int myHeight = matrix.height();
  paddleX = map(analogRead(A0), 0, 1023, 0, 12);
  paddleY = 8;
  if (oldPaddleX != paddleX || oldPaddleY != paddleY) {
    matrix.fillRect(oldPaddleX, oldPaddleY, 4, 1, matrix.Color(0,0,0));
  }
  matrix.fillRect(paddleX, paddleY, 4, 1, matrix.Color(0,0,255));
  oldPaddleX = paddleX;
  oldPaddleY = paddleY;
  matrix.show();

  if (millis() % ballSpeed < 2) {
    moveBall();
  }
  matrix.show();

  if (ballY > 8 && (millis() > 10000)) {
    score += 1;
    matrix.fillScreen(0);
    matrix.setTextColor(matrix.Color(255,0,0));
    matrix.setCursor(0,2);
    matrix.print(String(score));
    matrix.show();
    delay(4000);
    ballX = random(3,11);
    ballY = random(1,1);
    matrix.fillScreen(0);
    matrix.show();
    delay(1000);
  }
  delay(5);
}

void moveBall() {
  if (ballX > matrix.width() - 1 || ballX < 0) ballDirectionX = -ballDirectionX;
  if (ballY > matrix.height() || ballY < 0) ballDirectionY = -ballDirectionY;

  if (inPaddle(ballX, ballY, paddleX, paddleY, 4, 1)) {
    if (ballX == paddleX && ballY == paddleY) {
      ballDirectionX = -ballDirectionX; ballDirectionY = -ballDirectionY;
    } else if (ballX == paddleX + 3 && ballY == paddleY) {
      ballDirectionX = ballDirectionX; ballDirectionY = -ballDirectionY;
    } else if (ballX == paddleX + 1 && ballY == paddleY) {
      ballDirectionX = -ballDirectionX; ballDirectionY = -ballDirectionY;
    } else if (ballX == paddleX + 2 && ballY == paddleY) {
      ballDirectionX = ballDirectionX; ballDirectionY = -ballDirectionY;
    }
  }
  ballX += ballDirectionX;
  ballY += ballDirectionY;
  if (oldBallX != ballX || oldBallY != ballY) {
    matrix.drawPixel(oldBallX, oldBallY, matrix.Color(0,0,0));
  }
  matrix.drawPixel(ballX, ballY, matrix.Color(150,150,0));
  oldBallX = ballX;
  oldBallY = ballY;
}

boolean inPaddle(int x, int y, int rectX, int rectY, int rectWidth, int rectHeight) {
  boolean result = false;
  if ((x >= rectX && x <= (rectX + rectWidth)) && (y >= rectY && y <= (rectY + rectHeight))) {
    result = true;
  }
  return result;
}

原理图

Arduino Nano 驱动 NeoPixel 矩阵:自制霓虹乒乓游戏

制造工艺

  1. 基于 Edge Impulse 的 TinyML 语言检测器:Arduino Nano 33 BLE Sense 实战
  2. Arduino Nano 与 MPU-6050 构建实时陀螺仪游戏
  3. Arduino 数字骰子:LCD 显示随机点数的电子骰子
  4. DIY 钢铁侠人偶:Arduino 控制超声波触发音效与灯光
  5. Find Me:基于 Arduino 与蓝牙的智能寻物器制作指南
  6. DIY Arduino 加湿器控制器:继电器安全控制高压电路
  7. Arduino 声纳实时测距与 Processing 可视化
  8. MobBob:3D 打印智能机器人,Android 手机无缝控制,语音视觉一体
  9. 声控氛围灯:Arduino Nano + 麦克风模块 + WS2812B 灯珠
  10. DIY Arduino 手柄方向盘 - 游戏竞速模拟器自制指南
  11. Arduino 101 计步器:集成 DHT11 温湿度 + LCD 显示步数/距离/卡路里
  12. Arduino RGB 颜色混合器 – 分步制作教程