#include <SPI.h>

// Definir pines para el MAX7219
#define MAX7219_CS_PIN 22 // Pin de selección del MAX7219

// Definir comandos 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

// Patrón de la letra "B" en una matriz de LEDs 8x8
byte letraB[8] = {
 B00001000,
  B00011000,
  B00001000,
  B00001000,
  B00001000,
  B00001000,
  B00011100,
  B00000000
};

// Función para enviar un comando al MAX7219
void enviarComando(byte reg, byte dato) {
  digitalWrite(MAX7219_CS_PIN, LOW); // Habilitar el MAX7219
  SPI.transfer(reg);
  SPI.transfer(dato);
  digitalWrite(MAX7219_CS_PIN, HIGH); // Deshabilitar el MAX7219
}

void setup() {
  // Inicializar el bus SPI
  SPI.begin();
  
  // Configurar el pin del MAX7219 como salida
  pinMode(MAX7219_CS_PIN, OUTPUT);
  
  // Configurar el MAX7219 para activar la matriz de LEDs
  enviarComando(MAX7219_REG_NOOP, 0x00); // No operation
  enviarComando(MAX7219_REG_DIGIT0, letraB[0]);
  enviarComando(MAX7219_REG_DIGIT1, letraB[1]);
  enviarComando(MAX7219_REG_DIGIT2, letraB[2]);
  enviarComando(MAX7219_REG_DIGIT3, letraB[3]);
  enviarComando(MAX7219_REG_DIGIT4, letraB[4]);
  enviarComando(MAX7219_REG_DIGIT5, letraB[5]);
  enviarComando(MAX7219_REG_DIGIT6, letraB[6]);
  enviarComando(MAX7219_REG_DIGIT7, letraB[7]);
}

void loop() {
  // No hay acciones en el bucle, ya que la letra "B" se muestra en el setup y no cambia.
}