JavaScript が無効です。有効にしてください。
ななよんのホームページ
トップ > 電子工作 > 鉄道部品制御のすすめ > 【鉄道部品】広島高速交通アストラムライン 車内電光案内表示器の制御方法

【鉄道部品】広島高速交通アストラムライン 車内電光案内表示器の制御方法

最終更新日さいしゅうこうしんび:2023-08-10

 Sanyo トラフィコの「鉄道部品株式会社」で販売されている広島高速交通アストラムライン 6000 系の車内電光案内表示器の制御方法です。speedFunctions2 ライブラリを使用します。

配線

配線図

 LED モジュールは、SHARP 製ですが、シフトレジスタタイプの LUM とピン配置・制御方法ともに同じです。

静止表示

 16 x 128 の表示データを作り、こちらのツールで配列に変換しスケッチ内に貼り付けてください。

// 高速関数ライブラリ
#include <speedFunctions2.h>

// 大きいとちらつきます
#define SPEED 500

// ピンの定義
#define CTCLR  2  // 4520 のリセット
#define CTCLK  3  // 4520 のクロック
#define RED    4  // 赤色データ
#define GREEN  5  // 緑色データ
#define LATCH  6  // ラッチ
#define ENABLE 7  // イネーブル
#define CLOCK  8  // クロック

// カウンタ用変数
unsigned long i,j;

// 表示データ
const unsigned char data[16][128] PROGMEM = {
  // ここに配列を入れる
};

// 色をセットする関数
void setColor(unsigned char color) {
  switch(color) {
    case 0: // 黒
      low(RED);
      low(GREEN);
      break;
    case 1: // 赤
      high(RED);
      low(GREEN);
      break;
    case 2: // 緑
      low(RED);
      high(GREEN);
      break;
    case 3: // 橙
      high(RED);
      high(GREEN);
      break;
  }
}


void setup() {
  // 出力に設定
  pinMode(CTCLR, OUTPUT);
  pinMode(CTCLK, OUTPUT);
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(LATCH, OUTPUT);
  pinMode(ENABLE, OUTPUT);
  pinMode(CLOCK, OUTPUT);

  // カウンタ(4520)をリセットする
  high(CTCLR);
  low(CTCLR);
}


void loop() {
  for(i=0; i<16; i++) {
    for(j=0;j<128;j++) {
      setColor(pgm_read_byte(&data[i][j]));
      high(CLOCK);
      low(CLOCK);
    }
    high(LATCH);
    low(LATCH);
    low(ENABLE);
    delayMicroseconds(SPEED);
    high(CTCLK);
    low(CTCLK);
    high(ENABLE);
  }
}

スクロール

横幅よりスクロール文字数が大きい場合

 定数 LENGTH に表示データの横幅を入れてください。

// 高速関数ライブラリ
#include <speedFunctions2.h>

// 大きいとスクロールが遅くなりちらつきます
#define SPEED 500

// 表示データの横幅
#define LENGTH 144

// ピンの定義
#define CTCLR  2  // 4520 のリセット
#define CTCLK  3  // 4520 のクロック
#define RED    4  // 赤色データ
#define GREEN  5  // 緑色データ
#define LATCH  6  // ラッチ
#define ENABLE 7  // イネーブル
#define CLOCK  8  // クロック

// カウンタ用変数
unsigned long i,j,k;

// 表示データ
const unsigned char data[16][144] PROGMEM = {
  // 表示データ
};

// 色をセットする関数
void setColor(unsigned char color) {
  switch(color) {
    case 0: // 黒
      low(RED);
      low(GREEN);
      break;
    case 1: // 赤
      high(RED);
      low(GREEN);
      break;
    case 2: // 緑
      low(RED);
      high(GREEN);
      break;
    case 3: // 橙
      high(RED);
      high(GREEN);
      break;
  }
}


void setup() {
  // 出力に設定
  pinMode(CTCLR, OUTPUT);
  pinMode(CTCLK, OUTPUT);
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(LATCH, OUTPUT);
  pinMode(ENABLE, OUTPUT);
  pinMode(CLOCK, OUTPUT);

  // カウンタ(4520)をリセットする
  high(CTCLR);
  low(CTCLR);
}


void loop() {
  // 右から現れる
  for(i=0;i<128;i++) {
    for(j=0;j<16;j++) {
      for(k=0;k<128-i;k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<i;k++) {
        setColor(pgm_read_byte(&data[j][k]));
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }
  // 左へスクロール
  for(i=0;i<LENGTH-128;i++) {
    for(j=0;j<16;j++) {
      for(k=0;k<128;k++) {
        setColor(pgm_read_byte(&data[j][i+k]));
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }
  // 左へ消えていく
  for(i=0;i<128;i++) {
    for(j=0;j<16;j++) {
      for(k=i;k<128;k++) {
        setColor(pgm_read_byte(&data[j][(LENGTH-128)+k]));
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<i;k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }

  // 1 秒待つ
  delay(1000);
}

横幅とスクロール文字数が等しい場合

// 高速関数ライブラリ
#include <speedFunctions2.h>

// 大きいとスクロールが遅くなりちらつきます
#define SPEED 500

// ピンの定義
#define CTCLR  2  // 4520 のリセット
#define CTCLK  3  // 4520 のクロック
#define RED    4  // 赤色データ
#define GREEN  5  // 緑色データ
#define LATCH  6  // ラッチ
#define ENABLE 7  // イネーブル
#define CLOCK  8  // クロック

// カウンタ用変数
unsigned long i,j,k;

// 表示データ
const unsigned char data[16][128] PROGMEM = {
  // 表示データ
};

// 色をセットする関数
void setColor(unsigned char color) {
  switch(color) {
    case 0: // 黒
      low(RED);
      low(GREEN);
      break;
    case 1: // 赤
      high(RED);
      low(GREEN);
      break;
    case 2: // 緑
      low(RED);
      high(GREEN);
      break;
    case 3: // 橙
      high(RED);
      high(GREEN);
      break;
  }
}


void setup() {
  // 出力に設定
  pinMode(CTCLR, OUTPUT);
  pinMode(CTCLK, OUTPUT);
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(LATCH, OUTPUT);
  pinMode(ENABLE, OUTPUT);
  pinMode(CLOCK, OUTPUT);

  // カウンタ(4520)をリセットする
  high(CTCLR);
  low(CTCLR);
}


void loop() {
  // 右から現れる
  for(i=0;i<128;i++) {
    for(j=0;j<16;j++) {
      for(k=0;k<128-i;k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<i;k++) {
        setColor(pgm_read_byte(&data[j][k]));
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }
  // 左へ消えていく
  for(i=0;i<128;i++) {
    for(j=0;j<16;j++) {
      for(k=i;k<128;k++) {
        setColor(pgm_read_byte(&data[j][k]));
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<i;k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }

  // 1 秒待つ
  delay(1000);
}

横幅よりスクロール文字数が小さい場合

 定数 LENGTH に表示データの横幅を入れてください。

// 高速関数ライブラリ
#include <speedFunctions2.h>

// 大きいとスクロールが遅くなりちらつきます
#define SPEED 500

// 表示データの横幅
#define LENGTH 80

// ピンの定義
#define CTCLR  2  // 4520 のリセット
#define CTCLK  3  // 4520 のクロック
#define RED    4  // 赤色データ
#define GREEN  5  // 緑色データ
#define LATCH  6  // ラッチ
#define ENABLE 7  // イネーブル
#define CLOCK  8  // クロック

// カウンタ用変数
unsigned long i,j,k;

// 表示データ
const unsigned char data[16][80] PROGMEM = {
  // 表示データ
};

// 色をセットする関数
void setColor(unsigned char color) {
  switch(color) {
    case 0: // 黒
      low(RED);
      low(GREEN);
      break;
    case 1: // 赤
      high(RED);
      low(GREEN);
      break;
    case 2: // 緑
      low(RED);
      high(GREEN);
      break;
    case 3: // 橙
      high(RED);
      high(GREEN);
      break;
  }
}


void setup() {
  // 出力に設定
  pinMode(CTCLR, OUTPUT);
  pinMode(CTCLK, OUTPUT);
  pinMode(RED, OUTPUT);
  pinMode(GREEN, OUTPUT);
  pinMode(LATCH, OUTPUT);
  pinMode(ENABLE, OUTPUT);
  pinMode(CLOCK, OUTPUT);

  // カウンタ(4520)をリセットする
  high(CTCLR);
  low(CTCLR);
}


void loop() {
  // 右から現れる
  for(i=0;i<80;i++) {
    for(j=0;j<16;j++) {
      for(k=0;k<128-i;k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<i;k++) {
        setColor(pgm_read_byte(&data[j][k]));
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }
  // 左へスクロール
  for(i=0;i<128-80;i++) {
    for(j=0;j<16;j++) {
      for(k=0;k<128-80-i;k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<80;k++) {
        setColor(pgm_read_byte(&data[j][k]));
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<i;k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }
  // 左へ消えていく
  for(i=0;i<80;i++) {
    for(j=0;j<16;j++) {
      for(k=i;k<80;k++) {
        setColor(pgm_read_byte(&data[j][k]));
        high(CLOCK);
        low(CLOCK);
      }
      for(k=0;k<128-(80-i);k++) {
        setColor(0);
        high(CLOCK);
        low(CLOCK);
      }
      high(LATCH);
      low(LATCH);
      low(ENABLE);
      delayMicroseconds(SPEED);
      high(CTCLK);
      low(CTCLK);
      high(ENABLE);
    }
  }

  // 1 秒待つ
  delay(1000);
}

戻る

右メニュー

【表示がおかしい・崩れる場合】PC では Shift と F5 を同時押し。スマホではキャッシュを削除してみてください。



とうサイトでは Cookieくっきー使用しようします。くわしくは上記じょうきの「プライバシーポリシー・免責事項等めんせきじこうとう」もご確認かくにんください。



上へ戻る