Made MD* libraries (Parola, MAX72XX) project specific, to be able to use the newest software version from github.
This commit is contained in:
@@ -0,0 +1,125 @@
|
||||
// Use the MD_MAX72XX library to Print some text on the display
|
||||
// while cycling through the hardware types.
|
||||
//
|
||||
// Easy way to determine what type of hardware is being used.
|
||||
// Prints out the module type - the one that is legible is the type
|
||||
// of hardware being used.
|
||||
//
|
||||
|
||||
#include <MD_MAX72xx.h>
|
||||
#include <SPI.h>
|
||||
|
||||
// Define the number of devices we have in the chain and the hardware interface
|
||||
// NOTE: These pin numbers will probably not work with your hardware and may
|
||||
// need to be adapted
|
||||
#define HARDWARE_TYPE MD_MAX72XX::PAROLA_HW
|
||||
#define MAX_DEVICES 11
|
||||
|
||||
#define CLK_PIN 13 // or SCK
|
||||
#define DATA_PIN 11 // or MOSI
|
||||
#define CS_PIN 10 // or SS
|
||||
|
||||
// SPI hardware interface
|
||||
MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, CS_PIN, MAX_DEVICES);
|
||||
// Arbitrary pins
|
||||
//MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES);
|
||||
|
||||
// Text parameters
|
||||
#define CHAR_SPACING 1 // pixels between characters
|
||||
|
||||
// Global message buffers shared by Serial and Scrolling functions
|
||||
#define BUF_SIZE 20
|
||||
char message[BUF_SIZE] = "";
|
||||
bool newMessageAvailable = true;
|
||||
|
||||
void newMessage(void)
|
||||
{
|
||||
static uint8_t msgIndex = 0;
|
||||
MD_MAX72XX::moduleType_t mod;
|
||||
|
||||
switch (msgIndex)
|
||||
{
|
||||
case 0: mod = MD_MAX72XX::PAROLA_HW; strcpy(message, "Parola"); break;
|
||||
case 1: mod = MD_MAX72XX::GENERIC_HW; strcpy(message, "Generic"); break;
|
||||
case 2: mod = MD_MAX72XX::ICSTATION_HW; strcpy(message, "ICStation"); break;
|
||||
case 3: mod = MD_MAX72XX::FC16_HW; strcpy(message, "FC16"); break;
|
||||
}
|
||||
msgIndex = (msgIndex + 1) % 4;
|
||||
mx.setModuleType(mod); // change the module type
|
||||
}
|
||||
|
||||
void printText(uint8_t modStart, uint8_t modEnd, char *pMsg)
|
||||
// Print the text string to the LED matrix modules specified.
|
||||
// Message area is padded with blank columns after printing.
|
||||
{
|
||||
uint8_t state = 0;
|
||||
uint8_t curLen;
|
||||
uint16_t showLen;
|
||||
uint8_t cBuf[8];
|
||||
int16_t col = ((modEnd + 1) * COL_SIZE) - 1;
|
||||
|
||||
mx.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::OFF);
|
||||
mx.clear();
|
||||
|
||||
do // finite state machine to print the characters in the space available
|
||||
{
|
||||
switch(state)
|
||||
{
|
||||
case 0: // Load the next character from the font table
|
||||
// if we reached end of message, reset the message pointer
|
||||
if (*pMsg == '\0')
|
||||
{
|
||||
showLen = col - (modEnd * COL_SIZE); // padding characters
|
||||
state = 2;
|
||||
break;
|
||||
}
|
||||
|
||||
// retrieve the next character form the font file
|
||||
showLen = mx.getChar(*pMsg++, sizeof(cBuf)/sizeof(cBuf[0]), cBuf);
|
||||
curLen = 0;
|
||||
state++;
|
||||
// !! deliberately fall through to next state to start displaying
|
||||
|
||||
case 1: // display the next part of the character
|
||||
mx.setColumn(col--, cBuf[curLen++]);
|
||||
|
||||
// done with font character, now display the space between chars
|
||||
if (curLen == showLen)
|
||||
{
|
||||
showLen = CHAR_SPACING;
|
||||
state = 2;
|
||||
}
|
||||
break;
|
||||
|
||||
case 2: // initialize state for displaying empty columns
|
||||
curLen = 0;
|
||||
state++;
|
||||
// fall through
|
||||
|
||||
case 3: // display inter-character spacing or end of message padding (blank columns)
|
||||
mx.setColumn(col--, 0);
|
||||
curLen++;
|
||||
if (curLen == showLen)
|
||||
state = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
col = -1; // this definitely ends the do loop
|
||||
}
|
||||
} while (col >= (modStart * COL_SIZE));
|
||||
|
||||
mx.control(modStart, modEnd, MD_MAX72XX::UPDATE, MD_MAX72XX::ON);
|
||||
}
|
||||
|
||||
void setup()
|
||||
{
|
||||
mx.begin();
|
||||
}
|
||||
|
||||
void loop()
|
||||
{
|
||||
newMessage();
|
||||
printText(0, MAX_DEVICES-1, message);
|
||||
delay(2000);
|
||||
}
|
||||
|
Reference in New Issue
Block a user