マイコン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);のコメントアウトを外すとどうなるか?
delay(100) → delay(10) → delay(1) - コメントアウトの順
1列ずつ点灯させている表示プロセスが分って面白い。
次回はスクロールに挑戦していきます。
では、また。