マイコンArduinoを使って電光掲示板を作る。

 

 

マイコンArduinoを使って電光掲示板を作る。

 

続き

今回はスクロールさせてみます。

 

先ずは考え付いたプログラム

int num = 0;
int scroll = 0;
int count = 0;

short data_hex[ ] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0200, 0x0200, 0x3ff8, 0x0200, 0x0220, 0x03f0, 0x0628, 0x1a44, 0x1244, 0x2284, 0x2304, 0x260c, 0x3d18, 0x0070, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x2010, 0x2018, 0x2008, 0x200c, 0x2004, 0x3004, 0x3004, 0x1186, 0x1106, 0x1b00, 0x0e00, 0x0400, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
                    0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000};
                    
void setup() {
  // put your setup code here, to run once:
  pinMode(3,OUTPUT); // デジタルピンのD3を出力に設定する
  pinMode(4,OUTPUT); // デジタルピンのD4を出力に設定する
  pinMode(5,OUTPUT); // デジタルピンのD5を出力に設定する
  pinMode(6,OUTPUT); // デジタルピンのD6を出力に設定する
  pinMode(7,OUTPUT); // デジタルピンのD7を出力に設定する
  pinMode(8,OUTPUT); // デジタルピンのD8を出力に設定する
  cls();
 }

void loop() {
  // put your main code here, to run repeatedly:
  for (int i = 0;i < 16;i++) {
    if (i == num)
      digitalWrite(3,HIGH); // コモン
    else
      digitalWrite(3,LOW); // コモン
    if ((data_hex[31 - num + scroll] & 0x8000 >> i) != 0) 
      digitalWrite(4,HIGH); // カラムA
    else
      digitalWrite(4,LOW); // カラムA
      
    if ((data_hex[15 - num + scroll] & 0x8000 >> i) != 0) 
      digitalWrite(5,HIGH); // カラムB
    else
      digitalWrite(5,LOW); // カラムB
    clock();
  }
  digitalWrite(7,HIGH); // ラッチ
  digitalWrite(8,LOW); // イネーブル
  digitalWrite(7,LOW); // ラッチ

//  delay(100);
  num++;
  if(15 < num) {
    num = 0;
    count++;
    if (count > 10) {
      count = 0;
      scroll++;
      if (scroll > 64)
        scroll = 0;
    }
  }
}

void cls() {
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,LOW); // カラムA
  digitalWrite(5,LOW); // カラムB
  clock();clock();clock();clock();clock();clock();clock();clock();
  clock();clock();clock();clock();clock();clock();clock();clock();
  digitalWrite(7,HIGH); // ラッチ
  digitalWrite(7,LOW); // ラッチ
  }

void clock() {
  digitalWrite(6,HIGH);  // クロック
  digitalWrite(6,LOW); // クロック
}

プログラムの説明

int scroll = 0;はスクロール数 64ドット分で0に戻る

int count = 0;は16回ループして1増える10でスクロール1増 スクロール速度に影響

data_hex[]の「あい」文字前後に2文字分ずつ余白を追加

これはプログラムを複雑にしない為。(ちょっと姑息な方法)

if ((data_hex[31 - num + scroll] & 0x8000 >> i) != 0) でスクロール分を前進

if ((data_hex[15 - num + scroll] & 0x8000 >> i) != 0) でスクロール分を前進

これでマイコンボードに書き込むを押した。

 

結果


www.youtube.com

またもや思いに反して、今回は上下にスクロールしてしまった。

勿論、横方向にスクロールさせるつもりでプログラムは書いています。

 

横スクロールは次回に持ち越し

 

では、また。

 

mckeechan.hatenadiary.com