//Global Dependencies, variables and definitions.
#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
// Define the number of devices for each instance
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
#define MAX_DEVICES 24 // Total modules
#define NUM_ZONES 6 // Total zones
#define ZONES_PER_INSTANCE 2 // Zones per instance
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN_P 10
#define CS_PIN_Q 9
#define CS_PIN_R 8
#define SPEED_TIME 1
#define PAUSE_TIME 250
// Create three MD_Parola instances
MD_Parola P = MD_Parola(HARDWARE_TYPE, CS_PIN_P, MAX_DEVICES / 3);
MD_Parola Q = MD_Parola(HARDWARE_TYPE, CS_PIN_Q, MAX_DEVICES / 3);
MD_Parola R = MD_Parola(HARDWARE_TYPE, CS_PIN_R, MAX_DEVICES / 3);
// Define button pins
#define BUTTON_PIN1 2 // Button for Zone 1
#define BUTTON_PIN2 3 // Button for Zone 2
#define BUTTON_PIN3 4 // Button for Zone 3
// Global variables
int counters[3] = {0, 0, 0}; // Initial counter values
const char* pc[3] = {
"Baris Atas",
"Baris Tengah",
"Baris Bawah",
};
// New string variables for user input
String zoneNames[3];
// String variables for each zone
String
zone1Text = "Zone 1",
zone2Text = "Zone 2",
zone3Text = "Zone 3",
zone4Text = "Zone 4",
zone5Text = "Zone 5",
zone6Text = "Zone 6";
void setup(void) {
Serial.begin(9600);
Serial.println(F("[Parola Multi-Instance Zone Display Demo]"));
pinMode(BUTTON_PIN1, INPUT_PULLUP);
pinMode(BUTTON_PIN2, INPUT_PULLUP);
pinMode(BUTTON_PIN3, INPUT_PULLUP);
// Prompt user to enter initial string values for each zone
for (uint8_t i = 0; i < 3; i++) {
Serial.print(F("Masukkan bahan untuk "));
Serial.println(pc[i]);
while (true) {
while (Serial.available() == 0) {}
zoneNames[i] = Serial.readStringUntil('\n');
zoneNames[i].trim();
if (zoneNames[i].length() > 0 && zoneNames[i] != "0") {
break;
}
while (Serial.available() > 0) {
Serial.read();
}
}
Serial.print(F("Name for "));
Serial.print(pc[i]);
Serial.print(F(": "));
Serial.println(zoneNames[i]);
}
for (uint8_t i = 0; i < 3; i++) {
Serial.print(F("Masukkan jumlah awal untuk "));
Serial.println(zoneNames[i]);
while (true) {
while (Serial.available() == 0) {}
int input = Serial.parseInt();
if (input > 0) {
counters[i] = input;
break;
}
while (Serial.available() > 0) {
Serial.read();
}
}
Serial.print(F("Initial value for "));
Serial.print(pc[i]);
Serial.print(F(": "));
Serial.println(counters[i]);
}
P.begin(ZONES_PER_INSTANCE);
Q.begin(ZONES_PER_INSTANCE);
R.begin(ZONES_PER_INSTANCE);
P.setZone(0, 0, 3); // Instance P: Zones 0 and 1
P.setZone(1, 4, 7);
Q.setZone(0, 0, 3); // Instance Q: Zones 2 and 3
Q.setZone(1, 4, 7);
R.setZone(0, 0, 3); // Instance R: Zones 4 and 5
R.setZone(1, 4, 7);
P.displayZoneText(0, zone1Text.c_str(), PA_RIGHT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_PRINT);
P.displayZoneText(1, zone2Text.c_str(), PA_LEFT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_PRINT);
Q.displayZoneText(0, zone3Text.c_str(), PA_RIGHT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_PRINT);
Q.displayZoneText(1, zone4Text.c_str(), PA_LEFT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_PRINT);
R.displayZoneText(0, zone5Text.c_str(), PA_RIGHT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_PRINT);
R.displayZoneText(1, zone6Text.c_str(), PA_LEFT, SPEED_TIME, PAUSE_TIME, PA_PRINT, PA_PRINT);}
void loop(void) {
zone1Text = String(counters[0]);
zone2Text = String(zoneNames[0]);
zone3Text = String(counters[1]);
zone4Text = String(zoneNames[1]);
zone5Text = String(counters[2]);
zone6Text = String(zoneNames[2]);
bool buttonPressed = false;
if (digitalRead(BUTTON_PIN1) == LOW) {
counters[0]--;
if (counters[0] < 0) counters[0] = 0;
delay(200);
buttonPressed = true;
}
if (digitalRead(BUTTON_PIN2) == LOW) {
counters[1]--;
if (counters[1] < 0) counters[1] = 0;
delay(200);
buttonPressed = true;
}
if (digitalRead(BUTTON_PIN3) == LOW) {
counters[2]--;
if (counters[2] < 0) counters[2] = 0;
delay(200);
buttonPressed = true;
}
if (buttonPressed) {
for (uint8_t i = 0; i < 3; i++) {
Serial.print(zoneNames[i]);
Serial.print(F(" - Counter: "));
Serial.println(counters[i]);
}
}
P.displayAnimate();
Q.displayAnimate();
R.displayAnimate();
for (uint8_t i = 0; i < ZONES_PER_INSTANCE; i++) {
P.displayReset(i);
Q.displayReset(i);
R.displayReset(i);
}
delay(100);
}