LoginSignup
2
0

More than 5 years have passed since last update.

Arduino Nanoでミニ電光掲示板(8×8マトリクスLED + MAX7219)を作る #7 ミニ電光掲示板編(2)

Last updated at Posted at 2017-12-27

1 ソフトウェア インストール編
2 電子パーツ購入編
3 (共通)準備編
4 基本編
5 フルカラーLED編
6 ミニ電光掲示板編(1)
7 ミニ電光掲示板編(2)


配線はそのままで、プログラムを下記のものと入れ替えてください。

int dataIn = 2;
int load = 3;
int clock = 4;
int count = 0;
void putByte( byte data ) {
  byte i = 8;
  byte mask;
  while( i > 0 ) {
    mask = 0x01 << ( i - 1 );
    digitalWrite( clock, LOW );
    if( data & mask ){
      digitalWrite( dataIn, HIGH );
    }else{
      digitalWrite( dataIn, LOW );
    }
    digitalWrite( clock, HIGH );
    --i;
  }
}
void maxAll( byte reg, byte col ) {
  int c = 0;
  digitalWrite( load, LOW );
  for( c = 1; c <= 4; c++ ) {
    putByte( reg );
    putByte( col );
  }
  digitalWrite( load, LOW );
  digitalWrite( load,HIGH );
}
void setup() {
  pinMode( dataIn, OUTPUT );
  pinMode( clock,  OUTPUT );
  pinMode( load,   OUTPUT );
  digitalWrite( 13, HIGH );
  maxAll( 0x0b, 0x07 );
  maxAll( 0x09, 0x00 );
  maxAll( 0x0c, 0x01 );
  maxAll( 0x0f, 0x00 );
  for( count = 1; count <= 8; count++ ) {
    maxAll( count,0 );
  }
  maxAll( 0x0a, 0x0f & 0x0f );
}
void loop( ) {
  int wait_time = 300;
  a();
  delay( wait_time );
  b();
  delay( wait_time );
  c();
  delay( wait_time );
  d();
  delay( wait_time );
  e();
  delay( wait_time );
  f();
  delay( wait_time );
  g();
  delay( wait_time );
  h();
  delay( wait_time );
  i();
  delay( wait_time );
  j();
  delay( wait_time );
  k();
  delay( wait_time );
  l();
  delay( wait_time );
  m();
  delay( wait_time );
  n();
  delay( wait_time );
  o();
  delay( wait_time );
  p();
  delay( wait_time );
  q();
  delay( wait_time );
  r();
  delay( wait_time );
  s();
  delay( wait_time );
  t();
  delay( wait_time );
  u();
  delay( wait_time );
  v();
  delay( wait_time );
  w();
  delay( wait_time );
  x();
  delay( wait_time );
  y();
  delay( wait_time );
  z();
  delay( wait_time );
  space();
  delay( wait_time );
  heart();
  delay( wait_time );
  space();
  delay( wait_time );
}

// アルファベット表示
void a(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01111110 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b01000010 );
  maxAll( 8,0b00000000 );
}
void b(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01111100 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b01111100 );
  maxAll( 8,0b00000000 );
}
void c(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000000 );
  maxAll( 5,0b01000000 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b00111100 );
  maxAll( 8,0b00000000 );
}
void d(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b01111100 );
  maxAll( 8,0b00000000 );
}
void e(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111110 );
  maxAll( 3,0b01000000 );
  maxAll( 4,0b01111110 );
  maxAll( 5,0b01000000 );
  maxAll( 6,0b01000000 );
  maxAll( 7,0b01111110 );
  maxAll( 8,0b00000000 );
}
void f(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111110 );
  maxAll( 3,0b01000000 );
  maxAll( 4,0b01111110 );
  maxAll( 5,0b01000000 );
  maxAll( 6,0b01000000 );
  maxAll( 7,0b01000000 );
  maxAll( 8,0b00000000 );
}
void g(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000000 );
  maxAll( 5,0b01001110 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b00111110 );
  maxAll( 8,0b00000000 );
}
void h(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01111110 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b01000010 );
  maxAll( 8,0b00000000 );
}
void i(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00011000 );
  maxAll( 3,0b00011000 );
  maxAll( 4,0b00011000 );
  maxAll( 5,0b00011000 );
  maxAll( 6,0b00011000 );
  maxAll( 7,0b00011000 );
  maxAll( 8,0b00000000 );
}
void j(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00000010 );
  maxAll( 3,0b00000010 );
  maxAll( 4,0b00000010 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b00111100 );
  maxAll( 8,0b00000000 );
}
void k(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b01000100 );
  maxAll( 4,0b01111000 );
  maxAll( 5,0b01001000 );
  maxAll( 6,0b01000100 );
  maxAll( 7,0b01000010 );
  maxAll( 8,0b00000000 );
}
void l(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000000 );
  maxAll( 3,0b01000000 );
  maxAll( 4,0b01000000 );
  maxAll( 5,0b01000000 );
  maxAll( 6,0b01000000 );
  maxAll( 7,0b01111110 );
  maxAll( 8,0b00000000 );
}
void m(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b01100110 );
  maxAll( 4,0b01011010 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b01000010 );
  maxAll( 8,0b00000000 );
}
void n(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b01100010 );
  maxAll( 4,0b01010010 );
  maxAll( 5,0b01001010 );
  maxAll( 6,0b01000110 );
  maxAll( 7,0b01000010 );
  maxAll( 8,0b00000000 );
}
void o(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b00111100 );
  maxAll( 8,0b00000000 );
}
void p(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01111100 );
  maxAll( 6,0b01000000 );
  maxAll( 7,0b01000000 );
  maxAll( 8,0b00000000 );
}
void q(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000110 );
  maxAll( 7,0b00111110 );
  maxAll( 8,0b00000000 );
}
void r(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01111100 );
  maxAll( 6,0b01001000 );
  maxAll( 7,0b01000110 );
  maxAll( 8,0b00000000 );
}
void s(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00111100 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01110000 );
  maxAll( 5,0b00001110 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b00111100 );
  maxAll( 8,0b00000000 );
}
void t(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111110 );
  maxAll( 3,0b00011000 );
  maxAll( 4,0b00011000 );
  maxAll( 5,0b00011000 );
  maxAll( 6,0b00011000 );
  maxAll( 7,0b00011000 );
  maxAll( 8,0b00000000 );
}
void u(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01000010 );
  maxAll( 6,0b01000010 );
  maxAll( 7,0b00111100 );
  maxAll( 8,0b00000000 );
}
void v(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b00100100 );
  maxAll( 6,0b00100100 );
  maxAll( 7,0b00011000 );
  maxAll( 8,0b00000000 );
}
void w(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b01000010 );
  maxAll( 4,0b01000010 );
  maxAll( 5,0b01011010 );
  maxAll( 6,0b01100110 );
  maxAll( 7,0b01000010 );
  maxAll( 8,0b00000000 );
}
void x(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b00100100 );
  maxAll( 4,0b00011000 );
  maxAll( 5,0b00011000 );
  maxAll( 6,0b00100100 );
  maxAll( 7,0b01000010 );
  maxAll( 8,0b00000000 );
}
void y(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01000010 );
  maxAll( 3,0b00100100 );
  maxAll( 4,0b00011000 );
  maxAll( 5,0b00011000 );
  maxAll( 6,0b00011000 );
  maxAll( 7,0b00011000 );
  maxAll( 8,0b00000000 );
}
void z(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b01111110 );
  maxAll( 3,0b00000100 );
  maxAll( 4,0b00001000 );
  maxAll( 5,0b00010000 );
  maxAll( 6,0b00100000 );
  maxAll( 7,0b01111110 );
  maxAll( 8,0b00000000 );
}

// 空白
void space(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00000000 );
  maxAll( 3,0b00000000 );
  maxAll( 4,0b00000000 );
  maxAll( 5,0b00000000 );
  maxAll( 6,0b00000000 );
  maxAll( 7,0b00000000 );
  maxAll( 8,0b00000000 );
}

// ハート
void heart(){
  maxAll( 1, 0b00000000 );
  maxAll( 2, 0b01100110 );
  maxAll( 3, 0b10011001 );
  maxAll( 4, 0b10000001 );
  maxAll( 5, 0b01000010 );
  maxAll( 6, 0b00100100 );
  maxAll( 7, 0b00011000 );
  maxAll( 8, 0b00000000 );
}

// マイマーク(自分で好きなマークを作ってみよう)
void mymark(){
  maxAll( 1,0b00000000 );
  maxAll( 2,0b00000000 );
  maxAll( 3,0b00000000 );
  maxAll( 4,0b00000000 );
  maxAll( 5,0b00000000 );
  maxAll( 6,0b00000000 );
  maxAll( 7,0b00000000 );
  maxAll( 8,0b00000000 );
}

// スモール to ラージ
void s_to_l(){
  int wait=20;
  maxAll( 1, 0b00000000 );
  maxAll( 2, 0b00000000 );
  maxAll( 3, 0b00000000 );
  maxAll( 4, 0b00000000 );
  maxAll( 5, 0b00000000 );
  maxAll( 6, 0b00000000 );
  maxAll( 7, 0b00000000 );
  maxAll( 8, 0b00000000 );
  maxAll( 1, 0b00000000 );
  delay( wait*2 );
  maxAll( 1, 0b00000000 );
  maxAll( 2, 0b00000000 );
  maxAll( 3, 0b00000000 );
  maxAll( 4, 0b00010000 );
  maxAll( 5, 0b00001000 );
  maxAll( 6, 0b00000000 );
  maxAll( 7, 0b00000000 );
  maxAll( 8, 0b00000000 );
  maxAll( 1, 0b00000000 );
  delay( wait );
  maxAll( 2, 0b00000000 );
  maxAll( 3, 0b00000000 );
  maxAll( 4, 0b00001000 );
  maxAll( 5, 0b00010000 );
  maxAll( 6, 0b00000000 );
  maxAll( 7, 0b00000000 );
  maxAll( 8, 0b00000000 );
  delay( wait );
  maxAll( 2, 0b00000000 );
  maxAll( 3, 0b00110000 );
  maxAll( 4, 0b00010000 );
  maxAll( 5, 0b00001000 );
  maxAll( 6, 0b00001100 );
  maxAll( 7, 0b00000000 );
  maxAll( 8, 0b00000000 );
  delay( wait );
  maxAll( 2, 0b00000000 );
  maxAll( 3, 0b00000100 );
  maxAll( 4, 0b00000100 );
  maxAll( 5, 0b00000000 );
  maxAll( 6, 0b00100000 );
  maxAll( 7, 0b00100000 );
  maxAll( 8, 0b00000000 );
  delay( wait );
}

// スクロール
void sub_scroll( int wait_time, int clum_nm ) {
int scr_i = 0;
int line_i = 0;
int cnt_i = 0;
int data_int[8];
int keta = 128;
int a;

char sc1[8][100+1]=
{
// 1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
  "0000000001111101010000000000001100000000000000000100000000100100000010000000000000000000000000000000",
  "0000000000000001010011000000000010000001111100111111110011111110000011111000000000000000000000000000",
  "0000000011111111000000100010011000010000000100100000010000100100000100001000000000000000000000000000",
  "0000000000001000000000000010000100010000000100100000010000100100001000001000000000000000000000000000",
  "0000000000001000000000000100000000100000000100000000100000100100000000010000000000000000000000000000",
  "0000000000001000000000001000000000100000000100000000100000000100000000010000000000000000000000000000",
  "0000000000001000000000110000000011000000000100000001000000001000000001100000000000000000000000000000",
  "0000000000010000000011000000001100000001111100000110000000110000000010000000000000000000000000000000",
};
  for( scr_i = 0; scr_i < clum_nm; scr_i++ ) {
    for( line_i = 0; line_i < 8; line_i++ ) {
      data_int[line_i] = 0;
      keta=128;
      for( cnt_i = 0; cnt_i < 8; cnt_i++ ) {
        if( sc1[line_i][cnt_i+scr_i] == '0' ) {
          a = 0;
        } else {
          a = 1;
        }
        data_int[line_i] = data_int[line_i] + a * keta;
        keta = keta / 2;
      }
    }
    maxAll( 1,data_int[0] ); 
    maxAll( 2,data_int[1] ); 
    maxAll( 3,data_int[2] ); 
    maxAll( 4,data_int[3] ); 
    maxAll( 5,data_int[4] ); 
    maxAll( 6,data_int[5] ); 
    maxAll( 7,data_int[6] ); 
    maxAll( 8,data_int[7] ); 
    delay( wait_time );
  }
}

putByte()、maxAll() に関しましては、下記のページを参考にさせていただきました。
https://playground.arduino.cc/Main/BadPage

A~Zとオマケの文字が表示されます。

image.png

loop関数の中で、a、b、c … と順に呼ばれて、間に0.3秒の待ち時間を入れています。
loop関数から呼ぶ関数を変えることで、自分の名前を表示することができます。

ここで、例えば私の名前は KANNO (カンノ)なのですが、N が続いているので、そこがイマイチな感じになります。
そこで、s_to_l関数を使ってみましょう。

s_to_l();  k();  delay(wait_time);
s_to_l();  a();  delay(wait_time);
s_to_l();  n();  delay(wait_time);
s_to_l();  n();  delay(wait_time);
s_to_l();  o();  delay(wait_time);

見やすいように、s_to_l関数とdelay関数(待ち時間)の関数も1行で書いてみました。
s_to_l はスモール→ラージの略で、文字が大きくなる感じが出ると思います。

続いて、loop関数の中に

sub_scroll( 100, 80 );

を追加してみましょう。
「デンシコウサク」の文字が流れると思います。
引数の意味は、sub_scroll( 速度, 列数 ); です。
第一引数を変えるとスピードが変わります。
データは100列作っていますが、80列で切っているので、第二引数は80にしています。
sc1という配列で文字を書いているので、0と1を書き換えると、好きなパターンを流すことができます。
ドットで文字を書くのは難しいと思いますが、「美咲フォント」という少ないドットのフォントを参考にすると良い感じにできると思います。
image.png

ミニ掲示板編は以上で終了です。


先頭へ

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0