#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 4
#define CLK_PIN 13
#define DATA_PIN 11
#define CS_PIN 10
#define BUTTON_PIN_1 2 // Pin untuk push button 1
#define BUTTON_PIN_2 3 // Pin untuk push button 2
#define BUTTON_PIN_3 4 // Pin untuk push button 3
#define BUTTON_PIN_4 5 // Pin untuk push button 4
#define BUTTON_RESET 6 // Pin untuk push button reset
MD_Parola P = MD_Parola(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
String pesan_tampil = "Nothing";
uint8_t cnt = 0;
textEffect_t efek[] =
{
PA_SCROLL_LEFT, // Efek tambahan
};
int buttonState_1 = 0;
int lastButtonState_1 = 0;
int buttonState_2 = 0;
int lastButtonState_2 = 0;
int buttonState_3 = 0;
int lastButtonState_3 = 0;
int buttonState_4 = 0;
int lastButtonState_4 = 0;
int buttonState_reset = 0;
int lastButtonState_reset = 0;
void setup() {
Serial.begin(115200);
P.begin();
P.displayClear();
P.displayScroll(pesan_tampil.c_str(), PA_CENTER, efek[cnt], 100);
cnt++;
pinMode(BUTTON_PIN_1, INPUT);
pinMode(BUTTON_PIN_2, INPUT);
pinMode(BUTTON_PIN_3, INPUT);
pinMode(BUTTON_PIN_4, INPUT);
pinMode(BUTTON_RESET, INPUT);
}
void loop() {
buttonState_1 = digitalRead(BUTTON_PIN_1);
buttonState_2 = digitalRead(BUTTON_PIN_2);
buttonState_3 = digitalRead(BUTTON_PIN_3);
buttonState_4 = digitalRead(BUTTON_PIN_4);
buttonState_reset = digitalRead(BUTTON_RESET);
if (buttonState_1 != lastButtonState_1) {
if (buttonState_1 == HIGH) {
changeEffect(PA_WIPE);
}
delay(50); // Debounce
}
if (buttonState_2 != lastButtonState_2) {
if (buttonState_2 == HIGH) {
changeEffect(PA_OPENING_CURSOR);
}
delay(50); // Debounce
}
if (buttonState_3 != lastButtonState_3) {
if (buttonState_3 == HIGH) {
changeEffect(PA_GROW_UP);
}
delay(50); // Debounce
}
if (buttonState_4 != lastButtonState_4) {
if (buttonState_4 == HIGH) {
textEffect_t multipleEffects[] = {
PA_SCROLL_DOWN,
PA_SCROLL_LEFT,
PA_SCROLL_RIGHT,
PA_SPRITE,
PA_SLICE,
PA_MESH,
PA_FADE,
PA_DISSOLVE,
PA_BLINDS,
PA_RANDOM,
PA_WIPE,
PA_WIPE_CURSOR,
PA_SCAN_HORIZ,
PA_SCAN_HORIZX,
PA_SCAN_VERT,
PA_SCAN_VERTX,
PA_OPENING,
PA_OPENING_CURSOR,
PA_CLOSING,
PA_CLOSING_CURSOR,
PA_SCROLL_UP_LEFT,
PA_SCROLL_UP_RIGHT,
PA_SCROLL_DOWN_LEFT,
PA_SCROLL_DOWN_RIGHT,
PA_GROW_UP,
PA_GROW_DOWN
};
changeEffect(multipleEffects, sizeof(multipleEffects) / sizeof(multipleEffects[0]));
}
delay(50); // Debounce
}
if (buttonState_reset != lastButtonState_reset) {
if (buttonState_reset == HIGH) {
resetDisplay();
}
delay(50); // Debounce
}
if (P.displayAnimate()) {
P.setTextEffect(efek[cnt], efek[cnt]);
cnt++;
if (cnt == 4) {
cnt = 0;
}
P.displayReset();
}
lastButtonState_1 = buttonState_1;
lastButtonState_2 = buttonState_2;
lastButtonState_3 = buttonState_3;
lastButtonState_4 = buttonState_4;
lastButtonState_reset = buttonState_reset;
}
void changeEffect(textEffect_t newEffect) {
efek[0] = newEffect;
}
void changeEffect(textEffect_t newEffects[], size_t numEffects) {
for (size_t i = 0; i < numEffects; i++) {
efek[i] = newEffects[i];
}
}
void resetDisplay() {
P.displayClear();
P.displayScroll(pesan_tampil.c_str(), PA_CENTER, PA_SCROLL_LEFT, 100);
cnt = 1; // Kembalikan indeks efek ke 1 (PA_SCROLL_LEFT) setelah reset
}