#include <SPI.h>

#define MAX7219_CS_PIN 22

#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

byte letraA[8] = {0x00, 0x3C, 0x66, 0x66, 0x7E, 0x66, 0x66, 0x66};
byte letraB[8] = {0x00, 0x1E, 0x66, 0x66, 0x1E, 0x66, 0x66, 0x1E};
byte letraC[8]= {0x0, 0x1c, 0x33, 0x3, 0x3, 0x3, 0x32, 0xc};
byte letraD[8]={0x0, 0x7f, 0x3, 0x3, 0x1f, 0x3, 0x3, 0x7f};
byte carafeliz[8]={0x0, 0x24, 0x24, 0x24, 0x0, 0x81, 0x42, 0x3c};

void enviarComando(byte reg, byte dato) {
  digitalWrite(MAX7219_CS_PIN, LOW);
  SPI.transfer(reg);
  SPI.transfer(dato);
  digitalWrite(MAX7219_CS_PIN, HIGH);
  delay(1); // Pequeña pausa para asegurar que los datos se envíen correctamente
}

void setup() {
  SPI.begin();
  pinMode(MAX7219_CS_PIN, OUTPUT);
  enviarComando(MAX7219_REG_NOOP, 0x00);
}

void loop() {
  // Mostrar la letra "A"
  for (int i = 0; i < 8; ++i) {
    enviarComando(i + 1, letraA[i]);
  }
  delay(1000); // Esperar 1 segundo
  
  // Mostrar la letra "B"
  for (int i = 0; i < 8; ++i) {
    enviarComando(i + 1, letraB[i]);
  }
  delay(1000); // Esperar 1 segundo
  //MOSTRAR LETRA C
   for (int i = 0; i < 8; ++i) {
    enviarComando(i + 1, letraC[i]);
  }
  delay(1000); // Esperar 1 segundo
  //MOSTRAR LETRA E
  for (int i = 0; i < 8; ++i) {
    enviarComando(i + 1, letraD[i]);
  }
  delay(1000);
    for (int i = 0; i < 8; ++i) {
    enviarComando(i + 1, carafeliz[i]);
  }
  delay(1000);
}