//http://xantorohara.github.io/led-matrix-editor/#ff00000000000000
//http://robojax.com/learn/arduino/8x8LED/
//We always have to include the library
#include "LedControl.h"
#include <TimerOne.h>
/*
Now we need a LedControl to work with.
***** These pin numbers will probably not work with your hardware *****
pin 12 is connected to the DataIn
pin 11 is connected to the CLK
pin 10 is connected to LOAD
We have only a single MAX72XX.
*/
const byte interruptPinA = 2;
const byte interruptPinB = 3;
const byte interruptPinC = 18;
const int LEDRIGHT = 7; // the pin with a LED
const int LEDLEFT = 6; // the pin with a LED
int ledState = LOW;
volatile byte state = 0;
LedControl lc = LedControl(12, 11, 10, 1);
byte LEFT[] = { B00011000, B00110000, B01100000, B11011111, B11011111, B01100000, B00110000, B00011000};
byte RIGHT[] = { B00011000, B00001100, B00000110, B11111011, B11111011, B00000110, B00001100, B00011000};
byte UP[] = { B00011000, B00111100, B01100110, B11011011, B10011001, B00011000, B00011000, B00011000};
byte DN[] = { B00011000, B00011000, B00011000, B10011001, B11011011, B01100110, B00111100, B00011000};
byte DIAMOND[] = { B00011000, B00111100, B01111110, B11111111, B11111111, B01111110, B00111100, B00011000};
byte SQUARE0[] = { B00000000, B00000000, B00000000, B00011000, B00011000, B00000000, B00000000, B00000000};
byte SQUARE1[] = { B00000000, B00000000, B00111100, B00100100, B00100100, B00111100, B00000000, B00000000};
byte SQUARE2[] = { B00000000, B01111110, B01000010, B01000010, B01000010, B01000010, B01111110, B00000000};
byte SQUARE3[] = { B11111111, B10000001, B10000001, B10000001, B10000001, B10000001, B10000001, B11111111};
byte CIRCLE0[] = { B00000000, B00000000, B00000000, B00011000, B00011000, B00000000, B00000000, B00000000};
byte CIRCLE1[] = { B00000000, B00000000, B00011000, B00100100, B00100100, B00011000, B00000000, B00000000};
byte CIRCLE2[] = { B00000000, B00111100, B01000010, B01000010, B01000010, B01000010, B00111100, B00000000};
byte CIRCLE3[] = { B01111110, B10000001, B10000001, B10000001, B10000001, B10000001, B10000001, B01111110};
const byte ROTATE[][8] = {
{ B10001111, B11001110, B11101100, B11111000, B00011111, B00110111, B01110011, B11110001 },
{ B11110001, B01110011, B00110111, B00011111, B11111000, B11101100, B11001110, B10001111 },
{ B00011100, B00011100, B11001000, B11111011, B11011111, B00010011, B00111000, B00111000 }
};
const int ROTATE_LEN = sizeof(ROTATE) / 8;
byte BANK[8][8];
byte VAR1[] = { B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000,
B10000000
};
byte TEST[] = { B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B00000000, B11111111};
byte TEMP[8] ;
/* we always wait a bit between updates of the display */
unsigned long delaytime = 50;
void setup() {
/*
The MAX72XX is in power-saving mode on startup,
we have to do a wakeup call
*/
lc.shutdown(0, false);
/* Set the brightness to a medium values */
lc.setIntensity(0, 8);
/* and clear the display */
lc.clearDisplay(0);
attachInterrupt(digitalPinToInterrupt(interruptPinA), MovetoLEFT, CHANGE);
attachInterrupt(digitalPinToInterrupt(interruptPinB), MovetoRIGHT, CHANGE);
attachInterrupt(digitalPinToInterrupt(interruptPinC), OFFMATRIX, CHANGE);
Timer1.initialize(500000);
Timer1.attachInterrupt(blinkLED); // blinkLED to run every 500ms
pinMode(LEDRIGHT, OUTPUT);
pinMode(LEDLEFT, OUTPUT);
}
void blinkLED(void)
{
if (ledState == LOW) {
ledState = HIGH;
} else {
ledState = LOW;
}
if (state == 1)
digitalWrite(LEDRIGHT, ledState);
else
digitalWrite(LEDRIGHT, HIGH);
if (state == 2)
digitalWrite(LEDLEFT, ledState);
else
digitalWrite(LEDLEFT, HIGH);
}
void matrix(byte PARAM[]) {
for (int i = 0; i < 8; i++) {
lc.setRow(0, i, PARAM[i]);
}
}
void matrixShiftRIGHT(void) {
//SHift to left
memcpy(TEMP, RIGHT, 8); // or strcpy( TEMP, RIGHT);
for (int j = 8; j > 0; j--) {
for (int i = 0; i < 8; i++) {
TEMP[i] = TEMP[i] << j;
}
matrix(TEMP);
delay(delaytime);
memcpy(TEMP, RIGHT, 8);
}
for (int j = 1; j < 8; j++) {
for (int i = 0; i < 8; i++) {
TEMP[i] = TEMP[i] >> j;
}
matrix(TEMP);
delay(delaytime);
memcpy(TEMP, RIGHT, 8);
}
}
void matrixShiftLEFT(void) {
//SHift to left
memcpy(TEMP, LEFT, 8);
for (int j = 8; j > 0; j--) {
for (int i = 0; i < 8; i++) {
TEMP[i] = TEMP[i] >> j;
}
matrix(TEMP);
delay(delaytime);
memcpy(TEMP, LEFT, 8);
}
for (int j = 0; j < 8; j++) {
for (int i = 0; i < 8; i++) {
TEMP[i] = TEMP[i] << j;
}
matrix(TEMP);
delay(delaytime);
memcpy(TEMP, LEFT, 8);
}
}
void matrixShiftUP(void) {
int k = 0;
memcpy(TEMP, UP, 8);
memcpy(BANK[k++], TEMP, 8);
// matrix(TEMP);
// delay(delaytime);
for (int j = 0; j < 8; j++) {
for (int i = 7; i > 0; i--) {
TEMP[i] = TEMP[i - 1];
}
TEMP[0] = 0;
// matrix(TEMP);
memcpy(BANK[k++], TEMP, 8);
// delay(delaytime);
}
for (int j = 7; j >= 0; j--) {
matrix(BANK[j]);
delay(delaytime);
}
memcpy(TEMP, UP, 8);
for (int i = 0; i < 7; i++) {
for (int i = 0; i < 7; i++) {
TEMP[i] = TEMP[i + 1];
}
TEMP[7] = 0;
matrix(TEMP);
delay(delaytime);
}
}
void matrixShiftDN(void) {
memcpy(TEMP, DN, 8);
matrix(TEMP);
delay(delaytime);
for (int i = 0; i <= 8; i++) {
for (int i = 6; i >= 0; i--) {
TEMP[i + 1] = TEMP[i];
}
TEMP[0] = 0;
matrix(TEMP);
delay(delaytime);
}
}
void matrixShiftSquare(void) {
int delayTime = 150;
matrix(SQUARE0);
delay(delayTime);
matrix(SQUARE1);
delay(delayTime);
matrix(SQUARE2);
delay(delayTime);
matrix(SQUARE3);
delay(delayTime);
lc.clearDisplay(0);
delay(delayTime);
matrix(SQUARE2);
delay(delayTime);
matrix(SQUARE1);
delay(delayTime);
matrix(SQUARE0);
delay(delayTime);
lc.clearDisplay(0);
delay(delayTime);
}
void matrixRotateLED(void) {
int delayTime = 150;
matrix(ROTATE[0]);
delay(delayTime);
matrix(ROTATE[1]);
delay(delayTime);
matrix(ROTATE[2]);
delay(delayTime);
}
void loop() {
// switch (state) {
// case 0:
// break;
// case 1:
// break;
// }
if (state == 1) {
matrixShiftRIGHT();
} if (state == 2) {
matrixShiftLEFT();
}
if (state == 3) {
// lc.clearDisplay(0);
matrixRotateLED();
}
// matrixShiftUP();
// matrixShiftUP();
// matrixShiftUP();
// matrixShiftLEFT();
// matrixShiftLEFT();
// matrixShiftLEFT();
// matrixShiftRIGHT();
// matrixShiftRIGHT();
// matrixShiftRIGHT();
// matrix(LEFT);
// delay(delaytime);
// matrix(RIGHT);
// delay(delaytime);
// matrix(UP);
// delay(delaytime);
// matrix(DIAMOND);
// delay(delaytime);
// matrix(SQUARE);
// delay(delaytime);
// matrix(SQUARE1);
// delay(delaytime);
// matrix(SQUARE2);
// delay(delaytime);
// matrix(SQUARE3);
// delay(delaytime);
// matrix(CIRCLE0);
// delay(delaytime);
// matrix(CIRCLE1);
// delay(delaytime);
// matrix(CIRCLE2);
// delay(delaytime);
// matrix(CIRCLE3);
// delay(delaytime);
// for (int i = 0; i < 4; i++) {
// matrix(CIRCLE3);
// delay(delaytime);
// matrix(CIRCLE2);
// delay(delaytime);
// matrix(CIRCLE1);
// delay(delaytime);
// }
// lc.clearDisplay(0);
// delay(100);
}
void MovetoLEFT() {
state = 1;
}
void MovetoRIGHT() {
state = 2;
}
void OFFMATRIX() {
state = 3;
}
Comments