//ESP32(MH-ET LIVE ESP32 MiniKIT)
//Quimat RGB LEDパネルQWS03 (8X32)
//2020.01.18 Koji Ohashi MaDA Lab@Morioka Iwate Japan
#include <FastLED.h>
#define DATA_PIN 16
#define WIDTH 32
#define HEIGHT 8
#define NUM_LEDS (WIDTH * HEIGHT)
CRGBArray<NUM_LEDS> leds;
int Pos[WIDTH][HEIGHT];
boolean FontMask[WIDTH][HEIGHT];
//96 font starting from ' '(space)
byte FFont[96*5]={
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x5F,0x00,0x00,
0x00,0x07,0x00,0x07,0x00,
0x14,0x7F,0x14,0x7F,0x14,
0x24,0x2A,0x7F,0x2A,0x12,
0x23,0x13,0x08,0x64,0x62,
0x36,0x49,0x56,0x20,0x50,
0x00,0x00,0x07,0x00,0x00,
0x00,0x1C,0x22,0x41,0x00,
0x00,0x41,0x22,0x1C,0x00,
0x22,0x14,0x7F,0x14,0x22,
0x08,0x08,0x3E,0x08,0x08,
0x00,0x40,0x30,0x00,0x00,
0x08,0x08,0x08,0x08,0x08,
0x00,0x00,0x40,0x00,0x00,
0x20,0x10,0x08,0x04,0x02,
0x3E,0x51,0x49,0x45,0x3E,
0x00,0x42,0x7F,0x40,0x00,
0x62,0x51,0x49,0x49,0x46,
0x21,0x41,0x49,0x4D,0x33,
0x18,0x14,0x12,0x7F,0x10,
0x27,0x45,0x45,0x45,0x39,
0x3C,0x4A,0x49,0x49,0x31,
0x01,0x71,0x09,0x05,0x03,
0x36,0x49,0x49,0x49,0x36,
0x46,0x49,0x49,0x29,0x1E,
0x00,0x00,0x14,0x00,0x00,
0x00,0x40,0x34,0x00,0x00,
0x08,0x14,0x22,0x41,0x00,
0x14,0x14,0x14,0x14,0x14,
0x00,0x41,0x22,0x14,0x08,
0x02,0x01,0x59,0x05,0x02,
0x3E,0x41,0x5D,0x59,0x4E,
0x7C,0x12,0x11,0x12,0x7C,
0x7F,0x49,0x49,0x49,0x36,
0x3E,0x41,0x41,0x41,0x22,
0x7F,0x41,0x41,0x41,0x3E,
0x7F,0x49,0x49,0x49,0x41,
0x7F,0x09,0x09,0x09,0x01,
0x3E,0x41,0x41,0x51,0x71,
0x7F,0x08,0x08,0x08,0x7F,
0x00,0x41,0x7F,0x41,0x00,
0x20,0x40,0x40,0x40,0x3F,
0x7F,0x08,0x14,0x22,0x41,
0x7F,0x40,0x40,0x40,0x40,
0x7F,0x02,0x0C,0x02,0x7F,
0x7F,0x04,0x08,0x10,0x7F,
0x3E,0x41,0x41,0x41,0x3E,
0x7F,0x09,0x09,0x09,0x06,
0x3E,0x41,0x51,0x21,0x5E,
0x7F,0x09,0x19,0x29,0x46,
0x26,0x49,0x49,0x49,0x32,
0x01,0x01,0x7F,0x01,0x01,
0x3F,0x40,0x40,0x40,0x3F,
0x1F,0x20,0x40,0x20,0x1F,
0x7F,0x20,0x18,0x20,0x7F,
0x63,0x14,0x08,0x14,0x63,
0x03,0x04,0x78,0x04,0x03,
0x61,0x51,0x49,0x45,0x43,
0x7F,0x7F,0x41,0x41,0x41,
0x02,0x04,0x08,0x10,0x20,
0x41,0x41,0x41,0x7F,0x7F,
0x10,0x08,0x04,0x08,0x10,
0x40,0x40,0x40,0x40,0x40,
0x00,0x01,0x02,0x04,0x00,
0x20,0x54,0x54,0x54,0x78,
0x7F,0x44,0x44,0x44,0x38,
0x38,0x44,0x44,0x44,0x44,
0x38,0x44,0x44,0x44,0x7F,
0x38,0x54,0x54,0x54,0x58,
0x08,0x7E,0x09,0x09,0x02,
0x18,0xA4,0xA4,0xA4,0x78,
0x7F,0x04,0x04,0x04,0x78,
0x00,0x44,0x7D,0x40,0x00,
0x40,0x80,0x84,0x7D,0x00,
0x00,0x7F,0x10,0x28,0x44,
0x00,0x41,0x7F,0x40,0x00,
0x7C,0x04,0x18,0x04,0x7C,
0x7C,0x04,0x04,0x04,0x78,
0x38,0x44,0x44,0x44,0x38,
0xFC,0x24,0x24,0x24,0x18,
0x18,0x24,0x24,0x24,0xFC,
0x7C,0x08,0x04,0x04,0x04,
0x48,0x54,0x54,0x54,0x24,
0x04,0x3F,0x44,0x40,0x20,
0x3C,0x40,0x40,0x20,0x7C,
0x1C,0x20,0x40,0x20,0x1C,
0x7C,0x40,0x30,0x40,0x7C,
0x44,0x28,0x10,0x28,0x44,
0x1C,0xA0,0xA0,0xA0,0x7C,
0x44,0x64,0x54,0x4C,0x44,
0x08,0x3E,0x77,0x41,0x41,
0x00,0x00,0xFF,0x00,0x00,
0x41,0x41,0x77,0x3E,0x08,
0x02,0x01,0x03,0x02,0x01,
0x2A,0x14,0x2A,0x14,0x2A,
};
int count=0;
//Display Word
char word0[] = "Nice";
char word1[] = "to";
char word2[] = "MEET";
char word3[] = "YOU";
char word4[] = "SQUARE";
char word5[] = "CUBE";
char word6[] = "PUZZLE";
void setup() {
Serial.begin(115200);
FastLED.addLeds<WS2812B, DATA_PIN, GRB>(leds, NUM_LEDS);
//LEDS.setBrightness(20);
LEDS.setBrightness(40);
Serial.println("WelcomeDisplay06");
initFontMask();
setPosArray();
}
void loop(){
static uint8_t hue;
if(count>18){ count=0;}
if(count==0){ dispWord(word0,4);}
if(count==2){ dispWord(word1,2);}
if(count==4){ dispWord(word2,4);}
if(count==6){ dispWord(word3,3);}
if(count==8){ initFontMask();}
if(count==9){ dispWord(word4,6);}
if(count==12){ dispWord(word5,4);}
if(count==15){ dispWord(word6,6);}
for(int j=0;j<WIDTH;j++){
for(int i=0; i < HEIGHT; i++){
if(FontMask[j][i]==true){
int led_num=Pos[j][i];
leds[led_num] = CHSV(hue++,255,255);
}
}
leds.fadeToBlackBy(10);
FastLED.delay(50);
}
count=count+1;
}
void FontArray2BitMap(int Num, int Pos){
for(int i=0;i<5;i++){
byte font_col=FFont[Num*5+i];//FullFont
for(int j=0;j<8;j++){
if((font_col & 1)==1){
FontMask[Pos+i][j]=true;
} else {
FontMask[Pos+i][j]=false;
}
font_col=font_col>>1;
}
}
}
void dispWord(char *s1,int n){
initFontMask();
for(int i=0;i<n;i++){
FontArray2BitMap(s1[i]-' ',i*5);//from space
}
}
void setPosArray(){
for(int i=0; i < HEIGHT; i++){
for(int j=0; j < WIDTH; j++){
if(i%2==0){
Pos[j][i]=i*WIDTH+j;
} else{
Pos[j][i]=(i+1)*WIDTH-j-1;
}
}
}
}
void initFontMask(){
for(int i=0; i < HEIGHT; i++){
for(int j=0; j < WIDTH; j++){
FontMask[j][i]=false;
}
}
}