¿Cómo intercambiar el índice de fila / columna en la matriz del switch? HC595 / HC165 registros de desplazamiento

0

Tengo un problema con un código Arduino para conectar una matriz de conmutación de 12x12 y una matriz de LED de 12x12. La matriz de 12x12 LED es una matriz de WS28xx y la matriz de conmutación es una combinación de registro de desplazamiento HC595 / HC165. La siguiente imagen muestra el orden de la matriz para LED y Conmutado. He intentado cambiar el orden tanto en el hardware como en el software y, sin embargo, parece que no consigo que los dos pedidos se correspondan.

void write74HC595(byte data)
{
 digitalWrite (SS , LOW);
 asm("nop\n nop\n");
 SPI.transfer (data);
 digitalWrite (SS, HIGH);
}  

int read74HC165()
{
 byte switch_bank_1;
 byte switch_bank_2;
 digitalWrite (LATCH, LOW);
 digitalWrite (LATCH, HIGH);
 digitalWrite (SS_165, LOW);
 asm("nop\n nop\n");
 switch_bank_1 = SPI.transfer (0x00);
 switch_bank_2 = SPI.transfer (0x00); 
 digitalWrite (SS_165, HIGH);
 int switches = (switch_bank_2 * 256 + switch_bank_1);
 return switches;
}

int  get_press()
{
 unsigned int key = 0;
 unsigned int z = 0;
 unsigned int x = 0;

 for ( x = 1; x <= 2048; x = x << 1)
 {
  uint8_t xlow = x & 0xff;
  uint8_t xhigh = (x >> 8);

  write74HC595(xhigh); 
  write74HC595(xlow);   

  z = read74HC165(); 

  if (z != 0)
  {
   break; 
  }
  key = key + 12; 
  }

  if (z == 0)
  {
   return 0;  
  }

  byte hit = 0; 
  byte col;

  for (col = 0; col <= 11; col++)
  {
   if ((1 << col) == z ) 
  {
   key = key + col;
   break;     
  }
 }

return (key);

} 

Si alguien pudiera darme algunos consejos sobre cómo podría llegar allí, eso sería muy útil, mientras tanto seguiré en prueba y error.

    
pregunta Waz

0 respuestas

Lea otras preguntas en las etiquetas