16X32 RGB LED矩阵,矩阵多重定义

问题描述

我正在尝试使用来自 Adafruit 商店的 16x32 RGB Led 矩阵制作一个项目,但出于某种原因,Visual Studio 一直告诉我我已经多次定义了矩阵类。

这一切都是在我开始为我的程序制作自己的课程时开始发生的(我还在学习 OOP)。我已经将定义保护放在我实例化矩阵类的头文件中,所以这应该不是问题

我尝试移动类定义。当我将它放入我想使用它的 cpp 文件中时,我不再收到多重定义错误,但随后矩阵没有绘制任何东西。

我尝试将指向矩阵类的指针解析为我想使用矩阵的类,但随后出现了这个奇怪的错误,其中矩阵重新绘制了它必须一遍又一遍地绘制的第一件事,并且它停止响应串行输入/不给出任何串行输出

代码

//===========Matrix.h===========
#ifndef MATRIX_H
#define MATRIX_H
#include "RGBmatrixPanel.h"
#include <SPI.h>
#include <Adafruit_I2CDevice.h>

#define CLK  8 
#define OE   9
#define LAT 10
#define A   A0
#define B   A1
#define C   A2

RGBmatrixPanel matrix(A,B,C,CLK,LAT,OE,false);

#endif
//===========main.cpp===========
#include <Arduino.h>
#include "GuiDrawer.h"

GuiDrawer guiDrawer;

void setup() {
  Serial.begin(9600);
  guiDrawer.drawBaseGui();
}

void loop() {}
//===========GuiDrawer.h===========
#ifndef GUIDRAWER_H
#define GUIDRAWER_H
#include <Arduino.h>
#include "matrix.h"

class GuiDrawer {
  private:

  enum COLOURS {
    BLACK = 0,//0
    WHITE,//1
    RED,//2
    YELLOW,//3
    DARKER_YELLOW,//4
    DARKEST_YELLOW,//5
    GRAY            //6
  };

  enum SHAPES {
    HEART = 0,//0
    AMMO,//1
    COIN            //2
  };

  const int HEARTSIZE_X = 8;
  const int HEARTSIZE_Y = 8;
  const int HEARTSHAPE [8][8] = {
    {0,2,0},{2,1,2},{0,};
  const int COINSIZE_X = 8;
  const int COINSIZE_Y = 7;
  const int COINSHAPE [8][7] = {
    {0,4,3,{4,4},0}
  };
    
  const int AMMOSIZE_X = 8;
  const int AMMOSIZE_Y = 6;
  const int AMmoshAPE [8][6] = {
    {0,6,{6,6},{3,5,5},5}
  };
 
  void drawShape(SHAPES shape,int startX,int startY);
  void pixelDrawer(COLOURS colourToDraw,int drawX,int drawY);
  
  public:
  GuiDrawer();
  void drawBaseGui();
};
  
#endif
//===========GuiDrawer.cpp===========
#include <Arduino.h>
#include "GuiDrawer.h"
 
GuiDrawer::GuiDrawer() {
  matrix.begin();
  Serial.begin(9600);
}
 
void GuiDrawer::drawBaseGui() {
  drawShape(HEART,0);
  drawShape(COIN,8);
  drawShape(COIN,25,8);
  Serial.println("drawn base gui");
}
 
void GuiDrawer::drawShape(SHAPES shape,int startY) {
  switch (shape) {
    case HEART:
      for (int i = 0; i < HEARTSIZE_X; i++) {
        for (int j = 0; j < HEARTSIZE_Y; j++) {
          COLOURS pixelToDraw = (COLOURS)HEARTSHAPE[i][j];
          pixelDrawer(pixelToDraw,(j + startX),(i + startY));
        }  
        Serial.println();  
      }
      break;
    
    case AMMO:
      for (int i = 0; i < AMMOSIZE_X; i++) {
        for (int j = 0; j < AMMOSIZE_Y; j++) {
          COLOURS pixelToDraw = (COLOURS)AMmoshAPE[i][j];
          pixelDrawer(pixelToDraw,(i + startY));
        }    
      }
      break;
        
    case COIN:
      for (int i = 0; i < COINSIZE_X; i++) {
        for (int j = 0; j < COINSIZE_Y; j++) {
          COLOURS pixelToDraw = (COLOURS)COINSHAPE[i][j];
          pixelDrawer(pixelToDraw,(i + startY));
        }    
      }
      break;
 
    default:
      break;
  }
}
 
void GuiDrawer::pixelDrawer(COLOURS colourToDraw,int drawY) {
  switch (colourToDraw) {
    case BLACK:
      matrix.drawPixel(drawX,drawY,matrix.Color333(0,0));
      Serial.print("black ");
      break;
 
    case WHITE:
      matrix.drawPixel(drawX,matrix.Color333(255,255,255));
        Serial.print("white ");
        break;
    
    case RED:
      matrix.drawPixel(drawX,0));
      Serial.print("red   ");
      break;
 
    case YELLOW:
      matrix.drawPixel(drawX,0));
      break;
 
    case DARKER_YELLOW:
      matrix.drawPixel(drawX,matrix.Color888(16,16,0));
      break;
 
    default:
      break;
  }
}

我收到的错误

.pio\build\uno\src\main.cpp.o (symbol from plugin): In function `matrix':
(.text+0x0): multiple deFinition of `matrix'
.pio\build\uno\src\GuiDrawer.cpp.o (symbol from plugin):(.text+0x0): first defined here
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\uno\firmware.elf] Error 1

led矩阵:https://www.adafruit.com/product/420

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...