Arduino LED matriz y matriz 2D, los datos parecen estar corrompiendo

1

Estoy tratando de conducir una matriz de 8x8 LED con un arduino nano, pero no puedo hacer que los LED muestren lo que le digo.

Estoy usando this Matriz de LED

Aquí está mi código:

int row1 = 2;
int row2 = 3;
int row3 = 4;
int row4 = 5;
int row5 = 6;
int row6 = 7;
int row7 = 8;
int row8 = 9;

int col1 = 10;
int col2 = 11;
int col3 = 12;
int col4 = 18;
int col5 = 14;
int col6 = 15;
int col7 = 16;
int col8 = 17;

void setup() {
  int i;
  for(i = 2; i <= 18; i++) {
    pinMode(i,OUTPUT);
  }
  for(i = 2; i <= 9; i++) {
    digitalWrite(i, HIGH);
  }
}

void loop() {

  int display [8][8] = {
  {1,0,0,0,0,0,0,0},
  {0,1,0,0,0,0,0,0},
  {0,0,1,0,0,0,0,0},
  {0,0,0,1,0,0,0,0},
  {0,0,0,0,1,0,0,0},
  {0,0,0,0,0,1,0,0},
  {0,0,0,0,0,0,1,0},
  {0,0,0,0,0,0,0,1}
  };

  updateScreen(display);
}

void updateScreen(int screen[8][8]) {

  Serial.begin(9600);
  int i;
  for (i = row1; i <= row8; i++) {
    Serial.println(i-1); 
    digitalWrite(i, LOW);
      digitalWrite(col8, screen[i-2][0]);
      Serial.print(screen[i-2][0]); Serial.print("|"); 
      digitalWrite(col7, screen[i-2][1]);
      Serial.print(screen[i-2][1]); Serial.print("|"); 
      digitalWrite(col6, screen[i-2][2]);
      Serial.print(screen[i-2][2]); Serial.print("|"); 
      digitalWrite(col5, screen[i-2][3]);
      Serial.print(screen[i-2][3]); Serial.print("|"); 
      digitalWrite(col4, screen[i-2][4]);
      Serial.print(screen[i-2][4]); Serial.print("|"); 
      digitalWrite(col3, screen[i-2][5]);
      Serial.print(screen[i-2][5]); Serial.print("|"); 
      digitalWrite(col2, screen[i-2][6]);
      Serial.print(screen[i-2][6]); Serial.print("|"); 
      digitalWrite(col1, screen[i-2][7]);
      Serial.println(screen[i-2][7]);
      delay(1);
      blank();
    digitalWrite(i, HIGH);
  }

}

void blank() {
  digitalWrite(col1, LOW);
  digitalWrite(col2, LOW);
  digitalWrite(col3, LOW);
  digitalWrite(col4, LOW);
  digitalWrite(col5, LOW);
  digitalWrite(col6, LOW);
  digitalWrite(col7, LOW);
  digitalWrite(col8, LOW);
}

Y aquí está la salida:

1 
1|0|0|0|0|0|0|0 
2 
0|1|0|0|0|0|0|0 
3 
0|0|1|0|0|0|0|0 
4 
0|0|0|1|0|0|0|0 
5 
0|0|0|0|1|0|0¾j 
6 
0|0|0|0|0|1|0|0 
7 
0|0|0|0|0|0|1|0 
8 
0|0|0|0|0|0|0|1

Por lo tanto, puedo decir que el error (probablemente) no es mi cableado, porque esos valores de matriz son claramente erróneos, no tengo idea de de dónde viene el ¾j .

    
pregunta Owen Tourlamain

1 respuesta

1

El problema es que estás leyendo fuera de los límites de screen . La pantalla tiene direcciones válidas de 0 a 7, y estás intentando leer desde screen[8][n] .

8
887|22021|-15872|-30720|124|2|9|10

^ ¿Cómo puedes tener la línea "8"? El número de línea es Serial.println(i-1); y el valor es Serial.print(screen[i-1][0]); , por lo que el error también estará presente en el acceso a la matriz. Para solucionarlo, solo necesitas cambiar a screen[i-2] .

Bien, el problema de otro ( 6 0|0|0|0|0|0|Á ) se debe a que estás sobresaturando mucho el puerto serie. Me quedé con un retraso de 1 segundo después de cada bucle, y solucioné ese problema.

Cambiar:

void loop() {

  static int display [8][8] = {
  {1,0,0,0,0,0,0,0},
  {0,1,0,0,0,0,0,0},
  {0,0,1,0,0,0,0,0},
  {0,0,0,1,0,0,0,0},
  {0,0,0,0,1,0,0,0},
  {0,0,0,0,0,1,0,0},
  {0,0,0,0,0,0,1,0},
  {0,0,0,0,0,0,0,1}
  };

  updateScreen(display);

  delay(1000);          //  <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
}

o

void updateScreen(int screen[8][8]) {

  Serial.begin(115200);
  int i;
  <snip>

Salida:

0
1|0|0|0|0|0|0|0
1
0|1|0|0|0|0|0|0
2
0|0|1|0|0|0|0|0
3
0|0|0|1|0|0|0|0
4
0|0|0|0|1|0|0|0
5
0|0|0|0|0|1|0|0
6
0|0|0|0|0|0|1|0
7
0|0|0|0|0|0|0|1

También intenté simplemente aumentar la velocidad en baudios (a 115200 baudios), y eso también solucionó el problema sin demora, por lo que cualquier opción funcionaría.

    
respondido por el Connor Wolf

Lea otras preguntas en las etiquetas