#include <LedControl.h>
#include <IRremote.h>
LedControl lc = LedControl(10, 8, 9, 4);
IRrecv receiver(2);
// From https://xantorohara.github.io/led-matrix-editor/
const uint8_t LETTERS[][8] = {
{
0b00000000,
0b00111100,
0b01100110,
0b01100110,
0b01111110,
0b01100110,
0b01100110,
0b01100110
},{
0b00000000,
0b01111100,
0b01100110,
0b01100110,
0b01111100,
0b01100110,
0b01100110,
0b01111100
},{
0b00000000,
0b00111100,
0b01100110,
0b01100000,
0b01100000,
0b01100000,
0b01100110,
0b00111100
},{
0b00000000,
0b01111100,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b01111100
},{
0b00000000,
0b01111110,
0b01100000,
0b01100000,
0b01111100,
0b01100000,
0b01100000,
0b01111110
},{
0b00000000,
0b01111110,
0b01100000,
0b01100000,
0b01111100,
0b01100000,
0b01100000,
0b01100000
},{
0b00000000,
0b00111100,
0b01100110,
0b01100000,
0b01100000,
0b01101110,
0b01100110,
0b00111100
},{
0b00000000,
0b01100110,
0b01100110,
0b01100110,
0b01111110,
0b01100110,
0b01100110,
0b01100110
},{
0b00000000,
0b00111100,
0b00011000,
0b00011000,
0b00011000,
0b00011000,
0b00011000,
0b00111100
},{
0b00000000,
0b00011110,
0b00001100,
0b00001100,
0b00001100,
0b01101100,
0b01101100,
0b00111000
},{
0b00000000,
0b01100110,
0b01101100,
0b01111000,
0b01110000,
0b01111000,
0b01101100,
0b01100110
},{
0b00000000,
0b01100000,
0b01100000,
0b01100000,
0b01100000,
0b01100000,
0b01100000,
0b01111110
},{
0b00000000,
0b01100011,
0b01110111,
0b01111111,
0b01101011,
0b01100011,
0b01100011,
0b01100011
},{
0b00000000,
0b01100011,
0b01110011,
0b01111011,
0b01101111,
0b01100111,
0b01100011,
0b01100011
},{
0b00000000,
0b00111100,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b00111100
},{
0b00000000,
0b01111100,
0b01100110,
0b01100110,
0b01100110,
0b01111100,
0b01100000,
0b01100000
},{
0b00000000,
0b00111100,
0b01100110,
0b01100110,
0b01100110,
0b01101110,
0b00111100,
0b00000110
},{
0b00000000,
0b01111100,
0b01100110,
0b01100110,
0b01111100,
0b01111000,
0b01101100,
0b01100110
},{
0b00000000,
0b00111100,
0b01100110,
0b01100000,
0b00111100,
0b00000110,
0b01100110,
0b00111100
},{
0b00000000,
0b01111110,
0b01011010,
0b00011000,
0b00011000,
0b00011000,
0b00011000,
0b00011000
},{
0b00000000,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b00111110
},{
0b00000000,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b01100110,
0b00111100,
0b00011000
},{
0b00000000,
0b01100011,
0b01100011,
0b01100011,
0b01101011,
0b01111111,
0b01110111,
0b01100011
},{
0b00000000,
0b01100011,
0b01100011,
0b00110110,
0b00011100,
0b00110110,
0b01100011,
0b01100011
},{
0b00000000,
0b01100110,
0b01100110,
0b01100110,
0b00111100,
0b00011000,
0b00011000,
0b00011000
},{
0b00000000,
0b01111110,
0b00000110,
0b00001100,
0b00011000,
0b00110000,
0b01100000,
0b01111110
},{
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000,
0b00000000
}};
// ONLY CAPITAL & SPACE LETTER, ENTER '[' FOR SPACE
char words[10][50]={"[[[[DRIVE[SAFELY[DRIVE[SAFELY[[[[","[[[[REALLY[SORRY[REALLY[SORRY[[[[",
"[[[[THANK[YOU[THANK[YOU[[[[","[[[[ACCIDENT[AHEAD[ACCIDENT[AHEAD[[[[",
"[[[[POLICE[AHEAD[POLICE[AHEAD[[[[","[[[[TRAFFIC[JAM[TRAFFIC[JAM[[[[",
"[[[[ICY[ROAD[ICY[ROAD[[[[","[[[[OBSTACLE[IN[ROAD[OBSTACLE[IN[ROAD[[[[",
"[[[[PEOPLE[AHEAD[PEOPLE[AHEAD[[[[","[[[[BEWARE[BICYCLE[BEWARE[BICYCLE[[[["};
//int wlen=strlen(words);
void setup()
{
lc.shutdown(0, false);
lc.setIntensity(0, 15);
lc.clearDisplay(0);
receiver.enableIRIn(); // Start the receiver
}
void loop()
{
// Checks received an IR signal
if (receiver.decode()) {
translateIR();
receiver.resume(); // Receive the next value
}
}
void translateIR()
{
// Takes command based on IR code received
switch (receiver.decodedIRData.command) {
case 48:
dotprint(1,strlen(words[1]));
break;
case 24:
dotprint(2,strlen(words[2]));
break;
case 122:
dotprint(3,strlen(words[3]));
break;
case 16:
dotprint(4,strlen(words[4]));
break;
case 56:
dotprint(5,strlen(words[5]));
break;
case 90:
dotprint(6,strlen(words[6]));;
break;
case 66:
dotprint(7,strlen(words[7]));
break;
case 74:
dotprint(8,strlen(words[8]));
break;
case 82:
dotprint(9,strlen(words[9]));
break;
default:
dotprint(0,strlen(words[0]));
}
}
void dotprint(int w,int wlen)
{
int i, k, j;
for (k=3;k<wlen;k++) {
for (j=0;j<8;j++) {
for (i=0;i<8;i++) {
lc.setRow(0,i,(LETTERS[words[w][(k)%wlen]-'A'][i]<<j)|(LETTERS[words[w][(k+1)%wlen]-'A'][i]>>8-j));
lc.setRow(1,i,(LETTERS[words[w][(k-1)%wlen]-'A'][i]<<j)|(LETTERS[words[w][(k)%wlen]-'A'][i]>>8-j));
lc.setRow(2,i,(LETTERS[words[w][(k-2)%wlen]-'A'][i]<<j)|(LETTERS[words[w][(k-1)%wlen]-'A'][i]>>8-j));
lc.setRow(3,i,(LETTERS[words[w][(k-3)%wlen]-'A'][i]<<j)|(LETTERS[words[w][(k-2)%wlen]-'A'][i]>>8-j));
}
delay(40);
}
}
}