本质上,我试图将一个阵列传送到俄罗斯方块(我班的一个项目)的LED阵列上。这样做的主要问题是,由于板上的连接是从右到左,然后从左到右,所以我要显示在其中的LED阵列正在弯曲。
我目前正在使用32 x 8 array of LEDs。因此,当我点亮Leds [board [0] [7]] = CRGB :: White时,它将点亮该板的左上方。但是Leds [board [1] [0]] = CRGB :: White照亮了它下面的第二个灯。相反,我希望它像上面的一样从右侧开始。这使得在这些灯上编码2x2的正方形非常困难,因为由于这种蛇行,它们总是倒置在LED阵列上。
即{1,1,0,0}将在下一行显示为{0,0,1,1}。
我只需要它在下面的行中显示相同的内容,这样我就可以浏览数组。
即板[x-1] [y];
抱歉,这有点令人困惑,但这是我能解释的最好方法。如果需要更多说明,请告诉我。
我主要用Java编写代码,这是我第一次使用arduino。所以我不知道arduino的数组和java的数组之间是否有区别。
到目前为止,我已经尝试过一些反蛇行的LED阵列,但是当它应该直接在其他LED的正下方时,它总是将一个LED行向右移。该代码将在下面。
int setBoard = 0;
int board[32][8];
//trying to make tetris, so i'm starting with the oPiece.
int oPiece[2][2] = {
{ 1, 1 },
{ 1, 1 }
};
//This is my setup for the board. In here I am trying to make every other row
go from right to left instead of left to right in which it normally does.
void setup() {
for(int i = 0; i < 32; i++) {
//This outputs correctly.
if(i % 2 == 0) {
for(int z = 0; z < 8; z++) {
board[i][z] = setBoard;
setBoard++;
}
}
//This doesn't output correctly. Shifts all LEDs on every one of these
//rows over to the right by one.
if(i % 2 != 0) {
setBoard+= 8;
for(int y = 0; y < 8; y++) {
board[i][y] = setBoard;
setBoard--;
}
setBoard+= 8;
}
}
}
//displays the piece onto the 2d array by a certain y offset.
void showPiece() {
for(int x = 0; x < 2; x++) {
for(int y = 0; y < 2; y++) {
if(oPiece[x][y] == 1) {
leds[board[x][y + 6]] = CHSV(255, 75, 75);
}
}
}
FastLED.show();
}
void loop() {
showPiece();
}
答案 0 :(得分:0)
您的setup
不太正确地生成setBoard
变量。
如果我打印board
的前三行,则会得到:
0 1 2 3 4 5 6 7
16 15 14 13 12 11 10 9
16 17 18 19 20 21 22 23
因此8
丢失了,并且重复了16
。
更改奇数行的代码:
if(i % 2 != 0)
{
setBoard += 7;
for(int y = 0; y < 8; y++) {
board[i][y] = setBoard;
setBoard--;
}
setBoard += 9;
}
给出正确的输出:
0 1 2 3 4 5 6 7
15 14 13 12 11 10 9 8
16 17 18 19 20 21 22 23