#include <LedControl.h>
// Pin definitions for MAX7219
const int DIN_PIN = 11; // Data In (MOSI)
const int CS_PIN = 10; // Chip Select
const int CLK_PIN = 13; // Clock (SCK)
// Number of MAX7219 units
const int NUM_DEVICES = 4;
// Create a LedControl instance
LedControl lc = LedControl(DIN_PIN, CLK_PIN, CS_PIN, NUM_DEVICES);
// Define bitmaps for sine wave and arrows
byte sineWave[8] = {
B00000000,
B00011000,
B00100100,
B01000010,
B10000001,
B01000010,
B00100100,
B00011000
};
byte arrowLeft[8] = {
B00001000,
B00001100,
B00001110,
B11111111,
B00001110,
B00001100,
B00001000,
B00000000
};
byte arrowRight[8] = {
B00010000,
B00011000,
B00011100,
B00011110,
B11111111,
B00011110,
B00011100,
B00011000
};
byte arrowUp[8] = {
B00001000,
B00011100,
B00111110,
B01111111,
B00000000,
B00000000,
B00000000,
B00000000
};
byte arrowDown[8] = {
B00000000,
B00000000,
B00000000,
B01111111,
B00111110,
B00011100,
B00001000,
B00000000
};
void setup() {
// Initialize the MAX7219
for (int device = 0; device < NUM_DEVICES; device++) {
lc.shutdown(device, false); // Wake up the MAX7219 from power-saving mode
lc.setIntensity(device, 8); // Set brightness level (0 is min, 15 is max)
lc.clearDisplay(device); // Clear the display
}
}
void loop() {
// Display left arrow
displayPattern(arrowLeft);
delay(2000); // Display for 2 seconds
// Clear the display
clearAllDisplays();
delay(500); // Short pause before next pattern
// Display right arrow
displayPattern(arrowRight);
delay(2000); // Display for 2 seconds
// Clear the display
clearAllDisplays();
delay(500); // Short pause before next pattern
// Display up arrow
displayPattern(arrowUp);
delay(2000); // Display for 2 seconds
// Clear the display
clearAllDisplays();
delay(500); // Short pause before next pattern
// Display down arrow
displayPattern(arrowDown);
delay(2000); // Display for 2 seconds
// Clear the display
clearAllDisplays();
delay(500); // Short pause before displaying sine wave
// Display sine wave
displayPattern(sineWave);
delay(2000); // Display for 2 seconds
// Clear the display
clearAllDisplays();
delay(500); // Short pause before looping again
}
// Function to clear all displays
void clearAllDisplays() {
for (int device = 0; device < NUM_DEVICES; device++) {
lc.clearDisplay(device);
}
}
// Function to display a pattern on all 4 units
void displayPattern(byte pattern[8]) {
for (int device = 0; device < NUM_DEVICES; device++) {
for (int row = 0; row < 8; row++) {
lc.setRow(device, row, pattern[row]);
}
}
}