#include <MD_Parola.h>
#include <MD_MAX72xx.h>
#include <SPI.h>
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW
#define MAX_DEVICES 8
#define CLK_PIN 13 //12
#define DATA_PIN 11
#define CS_PIN 10
// Define BCD input pins
#define BCD_A A0
#define BCD_B A1
#define BCD_C A2
#define BCD_D A3
#define BCD_E A4
//#define BCD_F A5
// Create a Parola object
MD_Parola myDisplay = MD_Parola(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
const int DEFAULT_SCROLL_SPEED = 30; //30
const int MESSAGE_1_SCROLL_SPEED = 30; //lower numberis faster
const int MESSAGE_2_SCROLL_SPEED = 35;
const int MESSAGE_15_SCROLL_SPEED = 2;
const int SCROLL_PAUSE = 2000;
// const int cs = 1;
bool loopingMessage = false;
// Create an array of messages and corresponding settings
struct MessageSetting {
const char *message;
textPosition_t scrollAlign;
uint8_t scrollSpeed; // default frame delay value
uint16_t scrollPause; // in milliseconds
textEffect_t scrollInEffect;
textEffect_t scrollOutEffect;
// setCharSpacing cs;
// setCharSpacing ( uint8_t , cs );
};
MessageSetting messages[33] = {
{" ", PA_LEFT, DEFAULT_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT }, // Message 0 0
{" TEST ", PA_LEFT, DEFAULT_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT }, // lEVEL 1 MESSAGE 1
//
{"APPRENTICES 1982 - GRANT LEVEY , JOHN O'NEIL, ZELJKO HOVANCEK, VINCE CURCIO, WARREN McKENZIE, GREG ORR, GLEN WRIGHT, RON McDONALD, TERRY PIGEON , NICK JAVNI ", PA_LEFT, MESSAGE_1_SCROLL_SPEED, 0, PA_SCROLL_LEFT,}, // LEVEL 2 MESSAGE 2
// {" 200 CITY ROAD 1908", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_SCROLL_RIGHT, PA_NO_EFFECT}, // LEVEL 2 MESSAGE 2
{" JOHNS PERRY 77' ", PA_LEFT, DEFAULT_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT }, // LEVEL 3 MESSAGE 3
//{" JOHNS PERRY 77' ", PA_LEFT, DEFAULT_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT }, // LEVEL 3 MESSAGE 3
//
{"370 QUEEN STREET ", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, // LEVEL 4 MESSAGE 4
//
{"BORAL ELEV 1986 ", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, // LEVEL 5 MESSAGE 5
{"45 LEVESON STREET ", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, // LEVEL 6 MESSAGE 6
{"BORAL BLD TECH 2006 ", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT},//LEVEL7 MESSAGE 7
{" OTIS 1995", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, //LEVEL 8 MESSAGE 8
{" Gimme 20 Johno ! ", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, //LEVEL 9 MESSAGE 9
{"ROSS IS AN ASSHOLE !", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, //LEVEL 11 MESSAGE 10
{"Test Tower Cheltenam", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, //LEVEL 15 MESSAGE 11
{"MIPRO-LOG MIPRO-LOG", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, // LEVEL 16 MESSAGE 12
{" THIS LIFT GOING UP", PA_LEFT, MESSAGE_2_SCROLL_SPEED, SCROLL_PAUSE, PA_SCROLL_RIGHT , PA_NO_EFFECT}, // Message 13
{" THIS LIFT GOING DN", PA_LEFT, MESSAGE_2_SCROLL_SPEED, SCROLL_PAUSE, PA_SCROLL_RIGHT , PA_NO_EFFECT}, // Message 14
{" DONT BE ALARMED !", PA_LEFT, MESSAGE_15_SCROLL_SPEED, SCROLL_PAUSE, PA_OPENING , PA_NO_EFFECT}, // Message 15
{"DONT STOP ME NOW ! ", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, // Message 16
{" LIFT ON MAINT. ", PA_LEFT, DEFAULT_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT}, // Message 17
// {"JOHNS PERRY LIFTS", PA_LEFT, MESSAGE_1_SCROLL_SPEED, SCROLL_PAUSE, PA_SCROLL_LEFT, PA_SCROLL_LEFT}, // Message 18
//{"BORAL ELEVATORS", PA_LEFT, MESSAGE_2_SCROLL_SPEED, SCROLL_PAUSE, PA_SCROLL_LEFT, PA_SCROLL_LEFT }, // Message 2
// {" HARDWARE LANE ", PA_LEFT, DEFAULT_SCROLL_SPEED, SCROLL_PAUSE, PA_PRINT , PA_NO_EFFECT }, // Message 3
// Add more messages and settings for 4 to 32
// {"APPRENTICS 1982 - GRANT LEVEY , JOHN O'NEIL, ZELJKO HOVANCEK, VINCE CURCIO, WARREN McKENZIE, GREG ORR, GLEN WRIGHT, RON McDONALD,TERRY PIGEON,NICK JAVNI", PA_PRINT, 20},
// {"Message 5", PA_SCROLL_LEFT, 60},
// ...
// {"Message 32", PA_SCROLL_UP, 40}
};
int bcd_stored = 55;
void setup() {
Serial.begin(9600);
myDisplay.begin();
myDisplay.setTextEffect(PA_SCROLL_LEFT, PA_SCROLL_LEFT); // Default effect and speed
myDisplay.setIntensity(3); // Adjust the display intensity if needed
//myDisplay.setCharSpacing(4);
pinMode(BCD_A, INPUT);
pinMode(BCD_B, INPUT);
pinMode(BCD_C, INPUT);
pinMode(BCD_D, INPUT);
pinMode(BCD_E, INPUT);
// pinMode(BCD_F, INPUT);
}
void loop() {
myDisplay.displayAnimate();
// Read the BCD state from the input pins
//int bcd = digitalRead(BCD_F) << 5 |
int bcd = digitalRead(BCD_E) << 4 |
digitalRead(BCD_D) << 3 |
digitalRead(BCD_C) << 2 |
digitalRead(BCD_B) << 1 |
digitalRead(BCD_A);
// Display the message based on the BCD value
if (bcd_stored != bcd) {
displayMessage(bcd);
if (bcd == 2){
loopingMessage = true;
}
else if(bcd > 0)
{
loopingMessage = false;
}
}
if (myDisplay.displayAnimate() && loopingMessage) {
// The scrolling has finished, restart the scrolling
Serial.println("bcd: " + String(bcd) + " looping");
myDisplay.displayReset();
}
bcd_stored = bcd;
}
void displayMessage(int bcd) {
Serial.println("bcd: " + String(bcd));
myDisplay.displayClear();
myDisplay.displayReset();
// Always display message 2
if (bcd >= 0 && bcd <= 32) {
// if (bcd >= 0 && bcd <= 16) {
myDisplay.displayText(messages[bcd].message, messages[bcd].scrollAlign, messages[bcd].scrollSpeed, messages[bcd].scrollPause, messages[bcd].scrollInEffect, messages[bcd].scrollOutEffect);
} else {
myDisplay.displayText(messages[0].message, messages[0].scrollAlign, messages[0].scrollSpeed, messages[0].scrollPause, messages[0].scrollInEffect, messages[0].scrollOutEffect);
}
}