#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 8
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
MD_Parola matrixDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
uint16_t onHoldOrders = 7;
uint16_t lastOnHoldOrders = 5;
char textToDisplay[50] {"NO ORDERS"};
unsigned long myDemoTimer;
unsigned long myPrintOnceASecondTimer;
long SecondCnt = 0;
void setup() {
Serial.begin(115200);
Serial.println("Setup-Start");
matrixDisplay.begin();
matrixDisplay.setIntensity(2);
myDemoTimer = millis();
}
void loop() {
if ( TimePeriodIsOver (myPrintOnceASecondTimer, 1000) ) {
Serial.print(".");
}
if ( TimePeriodIsOver (myDemoTimer, 10000) ) {
Serial.println("increment onholdOrders by 1");
onHoldOrders ++;
}
if (onHoldOrders != lastOnHoldOrders) { // check if ordernumber has changed
// only in case order number HAS REALLY changed
Serial.println("change in onHoldOrders detected start new animation");
Serial.println();
slicedOut();
slicedIn();
Serial.println("waiting some time before changing onHoldOrders");
lastOnHoldOrders = onHoldOrders;
myDemoTimer = millis(); // update timer-variable to start waiting if animations have finished
}
}
void slicedIn () {
sprintf (textToDisplay, "%d ORDERS", onHoldOrders);
matrixDisplay.displayZoneText(0, textToDisplay, PA_CENTER, 10, 0, PA_SLICE, PA_NO_EFFECT);
Serial.println("start slicedIn animation");
while (matrixDisplay.displayAnimate() == false) { // just wait until animation has finished
if ( TimePeriodIsOver (myPrintOnceASecondTimer, 1000) ) {
Serial.print("i");
}
}
Serial.println("slicedIn animation finished");
Serial.println();
matrixDisplay.displayReset();
}
void slicedOut () {
matrixDisplay.displayZoneText(0, textToDisplay, PA_CENTER, 10, 0, PA_NO_EFFECT, PA_SLICE);
Serial.println("start slicedOut animation");
while (matrixDisplay.displayAnimate() == false) { // just wait until animation has finished
if ( TimePeriodIsOver (myPrintOnceASecondTimer, 1000) ) {
Serial.print("o");
}
}
Serial.println("slicedOut animation finished");
Serial.println();
matrixDisplay.displayReset();
}
// easy to use helper-function for non-blocking timing
// explanation see here
// https://forum.arduino.cc/t/example-code-for-timing-based-on-millis-easier-to-understand-through-the-use-of-example-numbers-avoiding-delay/974017
boolean TimePeriodIsOver (unsigned long &startOfPeriod, unsigned long TimePeriod) {
unsigned long currentMillis = millis();
if ( currentMillis - startOfPeriod >= TimePeriod ) {
// more time than TimePeriod has elapsed since last time if-condition was true
startOfPeriod = currentMillis; // a new period starts right here so set new starttime
return true;
}
else return false; // actual TimePeriod is NOT yet over
}