// 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); } } } }