La exploración de la columna de la fila de Arduino no funciona

0

Intenté seguir este tutorial pero toda la matriz está siempre iluminada y solo una fila y una columna no se iluminan .

Estoy bastante seguro de que hice el cableado correcto; Solo he editado un poco el código ya que no tengo esos medidores de potencia para modificar las coordenadas x e y.

Aquí está el código que estoy usando:

// 2-dimensional array of row pin numbers:
const int row[8] = {
  2,3,4,5,6,7,8,9 };

// 2-dimensional array of column pin numbers:
const int col[8] = {
  10,11,12,13,16,17,18,19  };

// 2-dimensional array of pixels:
int pixels[8][8];           

// cursor position:
int x = 5;
int y = 5;

void setup() {
  Serial.begin(9600);
  // initialize the I/O pins as outputs:

  // iterate over the pins:
  for (int thisPin = 0; thisPin < 8; thisPin++) {
    // initialize the output pins:
    pinMode(col[thisPin], OUTPUT); 
    pinMode(row[thisPin], OUTPUT);  
    // take the col pins (i.e. the cathodes) high to ensure that
    // the LEDS are off: 
    digitalWrite(col[thisPin], HIGH);    
  }

  // initialize the pixel matrix:
  for (int x = 0; x < 8; x++) {
    for (int y = 0; y < 8; y++) {
      pixels[x][y] = HIGH;
    }
  }
}

void loop() {
  // read input:
  readSensors();

  // draw the screen:
  refreshScreen();

  delay(500);
}

void readSensors() {
  // turn off the last position:
  pixels[x][y] = HIGH;
  // read the sensors for X and Y values:

  x++;
  x%=8;

  if (x==0)
  {
    y ++;
    y%=8;
  }


  pixels[x][y] = LOW;
}

void refreshScreen() {
  // iterate over the rows (anodes):
  for (int thisRow = 0; thisRow < 8; thisRow++) {
    // take the row pin (anode) high:
    digitalWrite(row[thisRow], HIGH);
    // iterate over the cols (cathodes):
    for (int thisCol = 0; thisCol < 8; thisCol++) {
      // get the state of the current pixel;
      int thisPixel = pixels[thisRow][thisCol];
      // when the row is HIGH and the col is LOW,
      // the LED where they meet turns on:
      digitalWrite(col[thisCol], thisPixel);
      // turn the pixel off:
      if (thisPixel == LOW) {
        digitalWrite(col[thisCol], HIGH);
      }
    }
    // take the row pin low to turn off the whole row:
    digitalWrite(row[thisRow], LOW);
  }
}

Aquí hay una foto:

    
pregunta clamp

2 respuestas

1

Se enciende, ¡así que es un buen comienzo!

El enlace que le diste al tutorial proporciona un ejemplo de croquis de Arduino. ¿Supongo que este es el programa que estás ejecutando para probar tu circuito?

Si está utilizando el boceto proporcionado, deberá conectar 2 potenciómetros a los pines analógicos de Arduino (Analógico 0 y Analógico 1). La imagen que ha proporcionado no parece mostrar estos potenciómetros. Si no los tiene conectados, el circuito no se comportará como esperaba.

Realmente no puedo saber si el resto del circuito está cableado correctamente ya que es muy difícil verlo en tu imagen. La mejor manera de mostrar su circuito cuando haga preguntas como esta es dibujando un esquema de su circuito, esto lo hace mucho más claro de leer, también le da la oportunidad de revisar su circuito y revisar todas las conexiones. p>

Si aún no puede hacer que funcione, deberá verificar que todas las conexiones sean correctas. A menudo, con los cables y los conectores sin soldadura no se conectan correctamente, ¡puede ser realmente molesto! La mejor manera de verificar este problema es hacer una prueba de continuidad en todas sus conexiones. Puede hacer esto con un multímetro, o si no tiene uno, puede armar un comprobador básico con un LED y una batería de tipo moneda, aquí hay uno interesante en Instructables que cabe dentro de un bolígrafo!

¡Buena suerte!

EDITAR:

Ahora que ha publicado su código, puedo ver por qué no obtiene ningún movimiento / animación. Parece que no está permitiendo que su refreshScreen (); Función ejecutada durante el tiempo suficiente para ver el LED. Cuando ejecuta esta función, explora las filas y columnas paso a paso, si no lo deja circular varias veces, los LED solo estarán encendidos por un período muy breve (demasiado breve para ver). El retraso (500); está deteniendo el ciclo refreshScreen en cada iteración y está arruinando su escaneo.

También recomiendo usar millis () en lugar de delay (), con retraso, sus LED parpadearán.

CÓDIGO DE PSEUDO:

unsigned long currentMillis = 0;
unsigned long previousMillis = 0;    

void loop()
{
  // read input:
  readSensors();

  // millis() will return the time in milliseconds since the sketch started
  previousMillis = millis();
  currentMillis = previousMillis;

  while(currentMillis - previousMillis < 500)
  {    
    // draw the screen:
    refreshScreen();
    currentMillis = millis();
  }

}

2do EDIT:

A juzgar por los problemas que ha experimentado, sugeriría que no tenga su matriz conectada correctamente. Obtenga la hoja de datos de su matriz para poder usarla como referencia. Una vez que esté seguro de cómo se establecen los LED dentro de su matriz, volveré al tutorial y conectaré la matriz desde cero. Tenga en cuenta que las matrices de LED no son todas iguales y diferirán de un fabricante a otro.

    
respondido por el Jim
0

Usando el código anterior con las entradas establecidas como:

const int row[8] = {
  2,7,19,5,13,18,12,16 };
const int col[8] = {
  6,11,10,3,17,4,8,9  };

Me funcionó después de dar vuelta la matriz

    
respondido por el Rlweb

Lea otras preguntas en las etiquetas