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

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

 

続き

前回は「あ」が横になって表示された所で終わりましたが、修正出来ました。

 

正立した「あ」

プログラム

int num = 0;
short data_hex = {0x0000, 0x0200, 0x0200, 0x3ff8, 0x0200, 0x0220, 0x03f0, 0x0628,
                    0x1a44, 0x1244, 0x2284, 0x2304, 0x260c, 0x3d18, 0x0070, 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[i] & 0x8000 >> num) != 0)   // 横向きの「あ」
    if ((data_hex[15 - num] & 0x8000 >> i) != 0) // 正立の「あ」
      digitalWrite(4,HIGH); // カラムA
    else
      digitalWrite(4,LOW); // カラムA
    clock();
  }
  digitalWrite(7,HIGH); // ラッチ
  digitalWrite(8,LOW); // イネーブル
  digitalWrite(7,LOW); // ラッチ

//  delay(100);
  num++;
  if(15 < num) {
    num = 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); // クロック
}

書き替えたのは

if ((data_hex[i] & 0x8000 >> num) != 0) → if ((data_hex[15 - num] & 0x8000 >> i) != 0)

ココだけです。

ココをいろいろ触ってみると反転したり倒立したりします。

正常に表示できる様になったので更に2文字表示に挑戦していきます。

 

「あい」の表示

プログラム

int num = 0;

short data_hex = {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};
                    
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] & 0x8000 >> i) != 0) 
      digitalWrite(4,HIGH); // カラムA
    else
      digitalWrite(4,LOW); // カラムA
      
    if ((data_hex[15 - num] & 0x8000 >> i) != 0) 
      digitalWrite(5,HIGH); // カラムB // カラムAからカラムBに変更
    else
      digitalWrite(5,LOW); // カラムB  // カラムAからカラムBに変更
    clock();
  }
  digitalWrite(7,HIGH); // ラッチ
  digitalWrite(8,LOW); // イネーブル
  digitalWrite(7,LOW); // ラッチ

//  delay(100);
  num++;
  if(15 < num) {
    num = 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); // クロック
}

上手く行きました。

 

ここでちょっと実験

 

上のプログラムでdelay(100);のコメントアウトを外すとどうなるか?


www.youtube.com

delay(100) → delay(10) → delay(1) - コメントアウトの順

1列ずつ点灯させている表示プロセスが分って面白い。

 

次回はスクロールに挑戦していきます。

 

では、また。

 

mckeechan.hatenadiary.com