// #include <SPI.h>
// const uint32_t CS_PIN = D10; // à adapter à votre cablage
// const uint16_t DIG0 = 0x01; // ligne 0

// void exo1_1()
// {
//   SPISettings cfgSPI(10000000, MSBFIRST, SPI_MODE0);
//   uint16_t trame;
//   trame = DIG0 << 8;
//   trame |= 0x55;
//   digitalWrite(CS_PIN, LOW);
//   SPI.beginTransaction(cfgSPI);
//   SPI.transfer16(trame);
//   SPI.transfer16(trame);
//   SPI.endTransaction();
//   digitalWrite(CS_PIN, HIGH); // le front montant provoque le verrouillage des données dans le(s) MAX7219
// }

// void exo1_2()
// {
//   SPISettings cfgSPI(10000000, MSBFIRST, SPI_MODE0);
//   SPI.beginTransaction(cfgSPI);
//   uint16_t trame;
//   for(uint8_t dig = 0; dig<8; dig++)
//   {  
//     trame = (DIG0+dig) << 8;
//     trame |= 0x55;
//     digitalWrite(CS_PIN, LOW);
//     for(uint8_t i=0; i<4; i++)
//     {
//       SPI.transfer16(trame);
//     }
//     SPI.endTransaction();
//     digitalWrite(CS_PIN, HIGH);
//   }
// }

// void exo1_3()
// {
//   SPISettings cfgSPI(10000000, MSBFIRST, SPI_MODE0);
//   SPI.beginTransaction(cfgSPI);
//   uint16_t trame;
//   for(uint8_t dig = 0; dig<8; dig++)
//   {  
//     static uint8_t data = 0x55;
//     trame = (DIG0+dig) << 8;
//     trame |= data;
//     digitalWrite(CS_PIN, LOW);
//     for(uint8_t i=0; i<4; i++)
//     {
//       SPI.transfer16(trame);
//     }
//     data ^= 0xFF;
//     digitalWrite(CS_PIN, HIGH);
//   }
//   SPI.endTransaction();
// }

// void exo1_4()
// {
//   SPISettings cfgSPI(10000000, MSBFIRST, SPI_MODE0);
//   uint8_t addr;
//   uint8_t data;
//   SPI.beginTransaction(cfgSPI);
//   for(uint8_t dig = 0; dig<8; dig++)
//   { 
//     addr = DIG0+dig;
//     digitalWrite(CS_PIN, LOW);
//     data = 0xFF << (7 - dig);
//     SPI.transfer(addr);
//     SPI.transfer(data);
//     data = 0xFF;
//     SPI.transfer(addr);
//     SPI.transfer(data);
//     SPI.transfer(addr);
//     SPI.transfer(data);
//     data = 0xFF >> dig;
//     SPI.transfer(addr);
//     SPI.transfer(data);
//     digitalWrite(CS_PIN, HIGH);
//   }
//   SPI.endTransaction();
// }
#include <MD_MAX72xx.h>
const uint32_t CS_PIN = D10;
const uint32_t DATA_PIN = D11;
const uint32_t CLK_PIN = D13;

const uint8_t NB_MAX7219=4; // nombre d'afficheur(s) juxtaposé(s)
MD_MAX72XX afficheurs( MD_MAX72XX::PAROLA_HW, DATA_PIN, CLK_PIN, CS_PIN, NB_MAX7219);

void setup() 
{
  // Exercice 1

  // Serial.begin(115200);
  // Serial.println("Boot");
  // pinMode(CS_PIN, OUTPUT);
  //exo1_1()
  //exo1_2();
  //exo1_3();
  //exo1_4();

  // Exercice 2
  afficheurs.begin();
}

void loop() 
{
  // Exercice 1
 // put your main code here, to run repeatedly:
 //delay(10); // this speeds up the simulation

 //Exercie 2 
 static uint8_t colonne_b = 0;
 uint8_t colonne_m = (colonne_b + 6) % 40;
 afficheurs.clear();
 afficheurs.setChar(colonne_b,'b');
 afficheurs.setChar(colonne_m,'m');
 colonne_b = (colonne_b +1) % 40;
 afficheurs.update();
 delay(100); 
}