マイコンArduinoを使って電光掲示板を作る。
続き
前回のプログラムをloop()の中で実行するように書き換えてみました。
新しく書き替えたプログラム
// slx_5024
byte address[ ] = {5, 4, 3, 2}; // アドレスは扱いやすい様に配列で持つ
void setup() {
for (int i = 0; i < 11; i++) {
pinMode(i, OUTPUT); // 各ピンの設定 全てアウトプット
}
digitalWrite(0,LOW); // SE L 自動でRAM切り替わり
digitalWrite(1,LOW); // A/BB 書き込み用RAM選択 // その他は全てLをセット
digitalWrite(6,LOW); // GREEN 緑データ
digitalWrite(7,LOW); // CLK クロック
digitalWrite(8,LOW); // WE 書き込み信号 Hで書き込み
digitalWrite(9,LOW); // RED 赤データ
digitalWrite(10,LOW); // ALE アドレスラッチ Hで有効
}
void loop() {
for (int i = 0; i < 16; i++) { // アドレス0~15
for (int j = 0; j < sizeof(address); j++)
if ((i & 0x1 << j) != 0) // address[0]~address[3]にビットをセット
digitalWrite(address[j], HIGH);
else
digitalWrite(address[j], LOW);
digitalWrite(9,LOW); // RED 赤データ // データのセット
digitalWrite(6,LOW); // GREEN 緑データ // データのセット
clock_n(32); // クロック
write_ale_we(); // 書き込み操作 関数にまとめて有る
}
}
void write_ale_we() {
digitalWrite(10,HIGH); // ALE アドレスラッチ Hで有効
digitalWrite(8,HIGH); // WE 書き込み信号 Hで書き込み
digitalWrite(8,LOW); // WE 書き込み信号 Hで書き込み
digitalWrite(10,LOW); // ALE アドレスラッチ Hで有効
}
void clock() {
digitalWrite(7,HIGH); // クロック
digitalWrite(7,LOW); // クロック
}
void clock_n(int n) {
for (int i = 0;i < n;i++)
clock();
}
大事な変更点
digitalWrite(0,LOW);をHIGH→LOW A/BBの切り替えが自動になる
このプログラムではひたすらクリアを繰り返すだけで動きがよく判らない。
なので、次は動きのあるプログラムに改造
// slx_5024
byte address[] = {5, 4, 3, 2}; // アドレスは扱いやすい様に配列で持つ
int pos = 0;
int count = 0;
void setup() {
for (int i = 0; i < 11; i++) {
pinMode(i, OUTPUT); // 各ピンの設定 全てアウトプット
}
digitalWrite(0,LOW); // SE L 自動でRAM切り替わり
digitalWrite(1,LOW); // A/BB 書き込み用RAM選択 // その他は全てLをセット
digitalWrite(6,LOW); // GREEN 緑データ
digitalWrite(7,LOW); // CLK クロック
digitalWrite(8,LOW); // WE 書き込み信号 Hで書き込み
digitalWrite(9,LOW); // RED 赤データ
digitalWrite(10,LOW); // ALE アドレスラッチ Hで有効
}
void loop() {
for (int i = 0; i < 16; i++) { // アドレス0~15
for (int j = 0; j < sizeof(address); j++)
if ((i & 0x1 << j) != 0) // address[0]~address[3]にビットをセット
digitalWrite(address[j], HIGH);
else
digitalWrite(address[j], LOW);
for (int k = 0;k < 32;k++) {
if (i == pos)
digitalWrite(9,HIGH); // RED 赤データ // データのセット
else
digitalWrite(9,LOW); // RED 赤データ // データのセット
clock(); // クロック
}
write_ale_we(); // 書き込み操作 関数にまとめて有る
}
count++;
if (count > 20) {
count = 0;
pos++;
if (pos > 15) {
pos = 0;
}
}
}
void write_ale_we() {
digitalWrite(10,HIGH); // ALE アドレスラッチ Hで有効
digitalWrite(8,HIGH); // WE 書き込み信号 Hで書き込み
digitalWrite(8,LOW); // WE 書き込み信号 Hで書き込み
digitalWrite(10,LOW); // ALE アドレスラッチ Hで有効
}
void clock() {
digitalWrite(7,HIGH); // クロック
digitalWrite(7,LOW); // クロック
}
void clock_n(int n) {
for (int i = 0;i < n;i++)
clock();
}
このプログラムを実行した様子
次回、
次のステップ文字を表示。
ですが趣向を変えて簡単なゲームを作って行きます。
では、また。