#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#include "Font_Data.h"
// Definisci il tipo di hardware e il numero di moduli
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_ZONES 2
#define ZONE_SIZE 4 // 4 moduli in orizzontale per zona
#define MAX_DEVICES (MAX_ZONES * ZONE_SIZE)
#define ZONE_LOWER 0
#define ZONE_UPPER 1
bool invertUpperZone = false;
// Alignment of the two zones
#ifdef INVERT_UPPER_ZONE
// if inverted, alignment should be opposite and
// CENTER may not work well depending on message
#define ALIGN_LOWER PA_LEFT
#define ALIGN_UPPER PA_RIGHT
#else
// if not inverted, should always be the same
#define ALIGN_LOWER PA_CENTER
#define ALIGN_UPPER ALIGN_LOWER
#endif
// Definisci i pin di connessione
#define DATA_PIN 23 // BLU
#define CLK_PIN 18 // GIALLO
#define CS_PIN 5 // GRIGIO
MD_Parola parola = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
// Testo da visualizzare
String scroller = "Ciao Amici!";
uint16_t scrollSpeed = 100;
textEffect_t effectIn = PA_SCROLL_LEFT;
textEffect_t effectOut = PA_SCROLL_LEFT;
void setup() {
// uint8_t max = 0;
invertUpperZone = (HARDWARE_TYPE == MD_MAX72XX::PAROLA_HW || HARDWARE_TYPE == MD_MAX72XX::GENERIC_HW);
// catalog = (invertUpperZone ? catalogInvert : catalogNoInvert);
Serial.begin(115200);
parola.begin(MAX_ZONES); // Inizializza Parola con 2 zone
// Configura le zone
parola.setZone(ZONE_LOWER, 0, ZONE_SIZE - 1); // Prima riga (moduli 0-11)
parola.setFont(ZONE_LOWER, BigFontLower);
parola.setZone(ZONE_UPPER, ZONE_SIZE, MAX_DEVICES - 1); // Seconda riga (moduli 12-23)
parola.setFont(ZONE_UPPER, BigFontUpper);
parola.setZoneEffect(ZONE_UPPER, true, PA_FLIP_UD); // Capovolgi la seconda riga
parola.setZoneEffect(ZONE_UPPER, true, PA_FLIP_LR);
parola.setCharSpacing(parola.getCharSpacing() * 2); // double height --> double spacing
if (invertUpperZone)
{
parola.setZoneEffect(ZONE_UPPER, true, PA_FLIP_UD);
parola.setZoneEffect(ZONE_UPPER, true, PA_FLIP_LR);
}
parola.setIntensity(0); // Imposta la luminosità (0-15)
parola.displayClear();
parola.displayText(scroller.c_str(), PA_CENTER, scrollSpeed, 0, effectIn, effectOut);
parola.displayAnimate();
}
void loop() {
parola.displayZoneText(ZONE_LOWER, scroller.c_str(), PA_CENTER, scrollSpeed, 0, effectIn, effectOut);
parola.displayZoneText(ZONE_UPPER, scroller.c_str(), PA_CENTER, scrollSpeed, 0, effectIn, effectOut);
//parola.synchZoneStart(); // Sincronizza l'inizio dell'animazione
// Continua l'animazione del messaggio
if (parola.displayAnimate()) {
parola.displayReset();
//if (parola.getZoneStatus(ZONE_LOWER) && parola.getZoneStatus(ZONE_UPPER)) {
// parola.displayAnimate(); // Avvia l'animazione per sincronizzare le zone
}
}