#include <SPI.h>
// Pines asignados para el protocolo SPI
const int CS_PIN = 10;
const int MOSI_PIN = 11;
const int MISO_PIN = 13;
const int SCK_PIN = 12;
// Registros de la matriz LED MAX7219
#define MAX7219_REG_NOOP 0x00
#define MAX7219_REG_DIGIT0 0x01
#define MAX7219_REG_DIGIT1 0x02
#define MAX7219_REG_DIGIT2 0x03
#define MAX7219_REG_DIGIT3 0x04
#define MAX7219_REG_DIGIT4 0x05
#define MAX7219_REG_DIGIT5 0x06
#define MAX7219_REG_DIGIT6 0x07
#define MAX7219_REG_DIGIT7 0x08
#define MAX7219_REG_DECODEMODE 0x09
#define MAX7219_REG_INTENSITY 0x0A
#define MAX7219_REG_SCANLIMIT 0x0B
#define MAX7219_REG_SHUTDOWN 0x0C
#define MAX7219_REG_DISPLAYTEST 0x0F
void setup() {
// Configurar pines SPI
SPI.begin(SCK_PIN, MISO_PIN, MOSI_PIN, CS_PIN);
// Configurar el pin CS
pinMode(CS_PIN, OUTPUT); // Asegurarse que el pin CS esté configurado como salida
digitalWrite(CS_PIN, HIGH); // Desactivar el chip select
// Inicializar el MAX7219
sendToMax7219(MAX7219_REG_SCANLIMIT, 0x07); // Usar todos los dígitos (0-7)
sendToMax7219(MAX7219_REG_DECODEMODE, 0x00); // Sin decodificación BCD
sendToMax7219(MAX7219_REG_SHUTDOWN, 0x01); // Salir del modo shutdown
sendToMax7219(MAX7219_REG_INTENSITY, 0x0F); // Máxima intensidad (0x00 a 0x0F)
}
void loop() {
// Enviar número a cada fila, este se mostrará en binario con leds en esa fila
// luego de enviar los numeros necesarios a las 7 primeras filas
// se podrá visualizar la formación del numero 3 en la matriz LED
for (int i = 0; i < 7; i++) { // Recorremos las 7 filas
if(i == 0 || i == 6){
sendToMax7219(i + 1, 7 ); // Mostrar numero 7 en binario en filas 1 y 7
}
else if(i == 1 || i == 2 || i == 4 || i == 5){
sendToMax7219(i + 1, 8 ); // Mostrar numero 8 en binario en filas 2,3,5 y 6
}else{
sendToMax7219(i + 1, 6 ); // Mostrar numero 6 en binario en fila 4
}
delay(200);
}
}
// Función para enviar datos al MAX7219 por protocolo PSI
void sendToMax7219(uint8_t reg, uint8_t data) {
digitalWrite(CS_PIN, LOW); // Seleccionar el dispositivo (CS bajo)
SPI.transfer(reg); // Enviar fila
SPI.transfer(data); // Enviar dato
digitalWrite(CS_PIN, HIGH); // Deseleccionar el dispositivo (CS alto)
}