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

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

 

続き

今回はloop()の中で実行します。

1つ置きに点灯させました。

 

プログラム

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を出力に設定する

}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(4,HIGH); // カラムA
  clock();
  digitalWrite(4,LOW); // カラムA
  digitalWrite(3,HIGH); // コモン
  clock();
  digitalWrite(3,LOW); // コモン
  digitalWrite(7,HIGH); // ラッチ
  digitalWrite(7,LOW); // ラッチ
  digitalWrite(8,LOW); // イネーブル
}

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

カラムAとコモンを1クロック置きにHをセットしているのでLEDも1つ置き、1行置きに点灯。

前回にもコメントしましたが、カラムとコモンが共通なので同時に書き込まなければならない。

 

次は動きの有るものを作ります。


www.youtube.com

プログラム

int num = 0;

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 (15 - i == num)
      digitalWrite(3,HIGH); // コモン
    else
      digitalWrite(3,LOW); // コモン
    digitalWrite(4,HIGH); // カラムA
    digitalWrite(5,HIGH); // カラム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); // クロック
}

変数 num 何回ループしたか

関数 cls() クリア

if分、for文も使い始めて一気にプログラムらしくなりました。

if (15 - i == num) → if (i == num) に書き換えると下から上に移動する

その他、いろいろ書き換えるとより理解が進みます。

 

次回は文字データを表示して行きます。

 

では、また。

 

mckeechan.hatenadiary.com