La librería se puede descargar aquí: MatrixController 1.0.
Esta librería se usas creando una instancia con
MatrixController matrix;
Se inicializa con:
matrix.init(0);
Y dispone de una serie de métodos, bastante autodescriptivos, aunque están documentados en la propia librería:
matrix.setPixel(1,2,4095,4095,0);
Pone el tercel píxel de la segunda columna (1,2) a una mezcla de rojo y verde.
matrix.setRow(0,0,0,4095);
Pone la fila superior a azul.Los rangos de fila y columna son de 0 a 8, y los de cada canal RGB de color de 0 a 4095 (12 bits por canal, color de 36 bits).
La lista de funciones completas es:
- init
- setPixel
- setRow
- setCol
- setMatrix
- getPixelR
- getPixelG
- getPixelB
- shiftFila
- shiftRowData
/** It's 0 if there is no multiplex operation taking place currently, and different if yes.
If everything's fine, it shouldn't be neccesary...
*/
volatile uint8_t isShifting;
/** Stores the actual row that is being excitated in the RGB display.
*/
uint8_t shiftRow;
/** Excitates the desired row. The power stage is active low.
\param row, The index of the row that should be activated. */
inline void setRow(int row) {
PORTC = row;
}
/** Interrupt subrutine for Timer1, called after each PWM cycle.
It switchs the row and shifts the new colour data.
*/
ISR(TIMER1_OVF_vect)
{
if (!isShifting++) {
digitalWrite(BLANK, HIGH); // turn off the outputs. It's the first thing to avoid row interference
__asm__("nop\n\t"); // small delay after sending the data before transfering it to the registers
// set the registers
digitalWrite(XLAT, HIGH);
__asm__("nop\n\t");
digitalWrite(XLAT, LOW);
__asm__("nop\n\t"); // delay before turning on the outputs
setRow(shiftRow); // set the new row
digitalWrite(BLANK, LOW); // turn on the outputs
if (++shiftRow == NUM_ROWS){ // update the row variable
shiftRow = 0;
}
matrix.shiftRowData(shiftRow); // shifts the data of the next row, it only will take place in the following row change
isShifting = 0;
}
}
Este código se encarga de realizar los cambios de fila.
Para comprender el funcionamiento y uso, ver el sketch de ejemplo incluido en la carpeta examples de la librería de Arduino.
He intentado obtener el código.. y Dropbox me dice que el código ha sido movido o modificado, alguna otra forma de obtener tu librería..Saludos
ResponderEliminarArreglado el enlace.
ResponderEliminarSaludos