マイコンArduinoを使って電光掲示板を作る。
続き
今回はスクロールさせてみます。
先ずは考え付いたプログラム
int num = 0;
int scroll = 0;
int count = 0;
short data_hex[ ] = {0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
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,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 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 + scroll] & 0x8000 >> i) != 0)
digitalWrite(4,HIGH); // カラムA
else
digitalWrite(4,LOW); // カラムA
if ((data_hex[15 - num + scroll] & 0x8000 >> i) != 0)
digitalWrite(5,HIGH); // カラムB
else
digitalWrite(5,LOW); // カラムB
clock();
}
digitalWrite(7,HIGH); // ラッチ
digitalWrite(8,LOW); // イネーブル
digitalWrite(7,LOW); // ラッチ
// delay(100);
num++;
if(15 < num) {
num = 0;
count++;
if (count > 10) {
count = 0;
scroll++;
if (scroll > 64)
scroll = 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); // クロック
}
プログラムの説明
int scroll = 0;はスクロール数 64ドット分で0に戻る
int count = 0;は16回ループして1増える10でスクロール1増 スクロール速度に影響
data_hex[]の「あい」文字前後に2文字分ずつ余白を追加
これはプログラムを複雑にしない為。(ちょっと姑息な方法)
if ((data_hex[31 - num + scroll] & 0x8000 >> i) != 0) でスクロール分を前進
if ((data_hex[15 - num + scroll] & 0x8000 >> i) != 0) でスクロール分を前進
これでマイコンボードに書き込むを押した。
結果
またもや思いに反して、今回は上下にスクロールしてしまった。
勿論、横方向にスクロールさせるつもりでプログラムは書いています。
横スクロールは次回に持ち越し
では、また。