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.