#include #include #include #include "Font_Data.h" #define DEBUG 0 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define MAX_ZONES 2 #define ZONE_SIZE 8 #define MAX_DEVICES (MAX_ZONES * ZONE_SIZE) #define SCROLL_SPEED 30 #define ZONE_UPPER 1 #define ZONE_LOWER 0 #define CLK_PIN 13 #define DATA_PIN 11 #define CS_PIN 10 // HARDWARE SPI MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES); // SOFTWARE SPI //MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); // Hardware adaptation parameters for scrolling bool invertUpperZone = false; #define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0])) char *msg[] = { "HellO", }; void setup(void) { invertUpperZone = (HARDWARE_TYPE == MD_MAX72XX::GENERIC_HW || HARDWARE_TYPE == MD_MAX72XX::PAROLA_HW); #if DEBUG Serial.begin(57600); Serial.println("[Double Height demo start]"); #endif P.begin(MAX_ZONES); P.setZone(ZONE_LOWER, 0, ZONE_SIZE - 1); P.setFont(ZONE_LOWER, BigFontLower); P.setZone(ZONE_UPPER, ZONE_SIZE, MAX_DEVICES-1); P.setFont(ZONE_UPPER, BigFontUpper); P.setCharSpacing(P.getCharSpacing() * 2); if (invertUpperZone) { P.setZoneEffect(ZONE_UPPER, true, PA_FLIP_UD); P.setZoneEffect(ZONE_UPPER, true, PA_FLIP_LR); } } void loop(void) { static uint8_t cycle = 0; P.displayAnimate(); if (P.getZoneStatus(ZONE_LOWER) && P.getZoneStatus(ZONE_UPPER)) { #if DEBUG Serial.println(cycle); #endif switch (cycle) { default: P.setFont(ZONE_LOWER, BigFontLower); P.setFont(ZONE_UPPER, BigFontUpper); if (invertUpperZone) { P.displayZoneText(ZONE_LOWER, msg[cycle], PA_LEFT, SCROLL_SPEED, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); P.displayZoneText(ZONE_UPPER, msg[cycle], PA_LEFT, SCROLL_SPEED, 0, PA_SCROLL_RIGHT, PA_SCROLL_RIGHT); } else { P.displayZoneText(ZONE_LOWER, msg[cycle], PA_RIGHT, SCROLL_SPEED, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); P.displayZoneText(ZONE_UPPER, msg[cycle], PA_LEFT, SCROLL_SPEED, 0, PA_SCROLL_LEFT, PA_SCROLL_LEFT); } break; } cycle = (cycle + 1) % ARRAY_SIZE(msg); P.displayClear(); P.synchZoneStart(); } }