// Japanino POV (scrolling) by Musashinodenpa
#define LEDPIN 7
#define NUMLED 7
#define SWPIN 6
#define WIDTH 25 // スクロール表示する幅
// ビットマップ(画像)を定義
byte bitmap[] = {
0b00000000,
0b01110000,
0b01000000,
0b01000000,
0b01000000,
0b01111111,
0b00000000,
0b01100000,
0b00011000,
0b00001110,
0b00001001,
0b00001110,
0b00011000,
0b01100000,
0b00000000,
0b01111111,
0b00001001,
0b00001001,
0b00001001,
0b00001111,
0b00000000,
0b01100000,
0b00011000,
0b00001110,
0b00001001,
0b00001110,
0b00011000,
0b01100000,
0b00000000,
0b01111111,
0b00000010,
0b00001100,
0b00011000,
0b01111111,
0b00000000,
0b00000000,
0b01111111,
0b00000000,
0b00000000,
0b01111111,
0b00000010,
0b00001100,
0b00011000,
0b01111111,
0b00000000,
0b01111111,
0b01000001,
0b01000001,
0b01111111,
0b00000000,
0b10000000
};
unsigned char pos;
char scroll = WIDTH; // スクロール位置
unsigned char i, j;
byte b; // 画像のバッファ(1列分)
void setup() {
for(char pin = LEDPIN; pin < LEDPIN + NUMLED; pin++) {
pinMode(pin, OUTPUT);
}
pinMode(SWPIN, INPUT);
digitalWrite(SWPIN, HIGH);
}
void loop() {
if(digitalRead(SWPIN) == LOW) {
delay(8);
pos = 0;
scroll--; // 表示の開始位置をシフト
for(j = 0; j < WIDTH; j++) { // スクロール処理
if(j >= scroll && scroll > 0) { // 右端から始まる
b = bitmap[pos++];
} else if(scroll < 0) { // 左端に消えていく
b = bitmap[-scroll + pos];
if(b == 0b10000000) { // 画像の末端まできた
if(j == 0) { // 完全に左へ消えた
scroll = WIDTH; // また右端から始める
break;
}
b = 0;
} else {
pos++;
}
} else {
b = 0;
}
for(i = 0; i < NUMLED; i++) {
digitalWrite(LEDPIN + NUMLED - 1 - i, (b >> i) & 0b00000001);
}
delay(1);
for(i = LEDPIN; i < LEDPIN + NUMLED; i++) {
digitalWrite(i, LOW);
}
}
}
}