问题描述
我正在尝试使用来自 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 (将#修改为@)