如何修复我的LED阵列而不是蛇形,而是使其全部从右侧的下一个数字开始

时间:2019-05-16 01:30:08

标签: arduino arduino-esp8266

本质上,我试图将一个阵列传送到俄罗斯方块(我班的一个项目)的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();
}

1 个答案:

答案 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