#include <MD_Parola.h> // inclure la bibliothèque MajicDesigns Parola
#include <MD_MAX72xx.h> // inclure la bibliothèque de matrices LED MajicDesigns MAX72xx
#include <SPI.h> // inclure la bibliothèque Arduino SPI
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
const int DATA_PIN = 11, CLK_PIN = 13; // DATA PIN et CLOCK PIN Communes aux 4 matrices
const int M1_CS = 12, M2_CS = 10, M3_CS = 9, M4_CS = 8; // CS (Chip Select) pour chaque matrice.
const int MAX_DEVICES = 10; //nombre d'appareils que nous avons dans la chaîne et l'interface matérielle
// MATÉRIEL SPI
MD_Parola Matrice_1 = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, M1_CS, MAX_DEVICES); // top
MD_Parola Matrice_2 = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, M2_CS, MAX_DEVICES); // top
MD_Parola Matrice_3 = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, M3_CS, MAX_DEVICES); // top
MD_Parola Matrice_4 = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, M4_CS, MAX_DEVICES); // top
int PotAlignement = A0,
PotAlignementValue = 0,
AlignementValue = 0;
int PotSpeed = A1, PotSpeedValue = 0, SpeedValue = 0;
int PotPause = A2, PotPauseValue = 0, PauseValue = 0;
char txtAlignement [4][10] = {"PA_LEFT", "PA_CENTER", "PA_RIGHT"};
char texte1[20], texte2[20];
char * Note = "";
// Tampons de messages globaux partagés par les fonctions série et de défilement
char buffer[10][2] = {"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};
char * buffer2 = "|";
static uint8_t zone = 0; // Mode d'affichage actuel
void setup() {
Matrice_1.begin(10); Matrice_2.begin();
Matrice_3.begin(2);
Matrice_4.begin();
// défini les 10 zones de la matrice 1
Matrice_1.setZone(0, 0, 0); // zone 0, chaine 0
Matrice_1.setZone(1, 1, 1); // zone 1, chaine 1
Matrice_1.setZone(2, 2, 2); // zone 2, chaine 2
Matrice_1.setZone(3, 3, 3); // zone 3, chaine 3
Matrice_1.setZone(4, 4, 4); // zone 4, chaine 4
Matrice_1.setZone(5, 5, 5); // zone 5, chaine 5
Matrice_1.setZone(6, 6, 6); // zone 6, chaine 6
Matrice_1.setZone(7, 7, 7); // zone 7, chaine 7
Matrice_1.setZone(8, 8, 8); // zone 8, chaine 8
Matrice_1.setZone(9, 9, 9); // zone 9, chaine 9
Matrice_3.setZone(0, 0, 4); // zone 9, chaine 9
Matrice_3.setZone(1, 5, 9); // zone 9, chaine 9
}
void loop() {
Pot_Settings();
displayMatrice_4();
displayMatrice_3();
displayMatrice_2();
displayMatrice_1();
}
void displayMatrice_1() {
Matrice_1.displayAnimate();
// défini les 10 zones de la matrice 1
if (Matrice_1.displayAnimate()) for (uint8_t i = 0; i < 10; i++)
if (Matrice_1.getZoneStatus(zone)) {
Matrice_1.displayReset(zone);
Matrice_1.displayZoneText(zone, // zone ciblée
buffer2,
//buffer[zone], // No. de la zone
AlignementValue, // alignement
SpeedValue, // vitesse d'animation
PauseValue, // délais d'affichage
PA_NO_EFFECT, // animation entrée
PA_NO_EFFECT //animation sortie
);
}
zone++; if (zone > 9)zone = 0;
}
void displayMatrice_2() {
Matrice_2.displayAnimate();
// défini les 10 zones de la matrice 1
if (Matrice_2.displayAnimate()) for (uint8_t i = 0; i < 3; i++)
if (Matrice_2.getZoneStatus(zone)) {
Matrice_2.displayText( txtAlignement[AlignementValue], // No. de la zone
AlignementValue, // alignement
SpeedValue, // vitesse d'animation
PauseValue, // délais d'affichage
PA_NO_EFFECT, // animation entrée
PA_BLINDS); //animation sortie
Matrice_2.displayReset();
}
}
void displayMatrice_3() {
Matrice_3.displayAnimate();
// défini les 10 zones de la matrice 1
//if (Matrice_3.displayAnimate())
if (Matrice_3.getZoneStatus(0) &&
Matrice_3.getZoneStatus(1)) {
//char * note;
if (SpeedValue < 50) Note = "LO";
if (SpeedValue > 50 && SpeedValue < 75 ) Note = "MID";
if (SpeedValue > 75 && SpeedValue < 150) Note = "HI";
//sprintf(texte1, "%3d", SpeedValue);
Matrice_3.displayZoneText(0,
"|",
//Note, // Texte speedValue
AlignementValue, // alignement
10, // vitesse d'animation
100, // délais d'affichage
PA_NO_EFFECT, // animation entrée
PA_NO_EFFECT); //animation sortie
//sprintf(texte2, "%s", "Speed:");
Matrice_3.displayZoneText(1,
"|",
//"Speed:", // Texte speedValue
AlignementValue, // alignement
10, // vitesse d'animation
100, // délais d'affichage
PA_NO_EFFECT, // animation entrée
PA_NO_EFFECT); //animation sortie
Matrice_3.displayReset();
}
//zone++; if (zone > 2)zone = 0
}
void displayMatrice_4() {
Matrice_4.displayAnimate();
// défini les 10 zones de la matrice 1
if (Matrice_4.displayAnimate()) for (uint8_t i = 0; i < 3; i++)
if (Matrice_4.getZoneStatus(zone)) {
sprintf(texte2, "Pause %4d%s", PauseValue, "ms");
Matrice_4.displayText( texte2, // Texte pause value
PA_CENTER, // alignement
10, // vitesse d'animation
100, // délais d'affichage
PA_NO_EFFECT, // animation entrée
PA_NO_EFFECT); //animation sortie
Matrice_4.displayReset();
}
}
void Pot_Settings() {
PotAlignementValue = map(analogRead(PotAlignement), 0, 1023, 0, 100);
if (PotAlignementValue < 33) AlignementValue = 0;
if (PotAlignementValue > 33 && PotAlignementValue < 66) AlignementValue = 1;
if (PotAlignementValue > 66 && PotAlignementValue < 100) AlignementValue = 2;
SpeedValue = map(analogRead(PotSpeed), 0, 1023, 149, 10);
PauseValue = map(analogRead(PotPause), 0, 1023, 5000, 10);
}
Droite
Gauche
Centre
Alignement du texte
Vitesse d'animation
Lente
Rapide
Durée de la pause In/Out
Longue
Très courte
Moyenne
Moyenne