Japanino特設サイト トップに戻る

Sketch スケッチ

“JAPANINO”スクロール

// 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);
      }
    }
  }
}
このページのトップへ