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

 

 

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

 

続き

テトリスに挑戦の2回目はブロックを作って行きます。

 

作り方は色々ありますがLEDマトリックス用にビット操作がしやすい形で持つようにしました。

また、データもdisp();用を追加しました。

ブロックは二次配列で向き毎のデータも持っています。

 

int x_pos = 6;
int y_pos = 0;
int select = 0;
int muki = 0;
short data_hex[] = {0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004,
                    0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x2004, 0x3ffc};
short block[7][4] = {{0x0660, 0x0660, 0x0660, 0x0660},
                    {0x4444, 0x00f0, 0x2222, 0x0f00},
                    {0x2640, 0x0c60, 0x0264, 0x0630},
                    {0x4620, 0x0630, 0x0462, 0x0360},
                    {0x0644, 0x0470, 0x2260, 0x0e20},
                    {0x0622, 0x0740, 0x4460, 0x02e0},
                    {0x04e0, 0x0262, 0x0720, 0x4640}};
short disp_hex[16];
              
void setup() {
  // put your setup code here, to run once:
  pinMode(2,OUTPUT);
  pinMode(3,OUTPUT);
  pinMode(4,OUTPUT);
  pinMode(5,OUTPUT);
  pinMode(6,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  data_make();
  disp();
 }

void data_make(){
  for (int i = 0;i < 16;i++)
    disp_hex[i] = data_hex[i];
  for (int i = 0;i < 4;i++)
    disp_hex[i + y_pos] |= ((block[select][muki] >> 4 * i) & 0xf) << x_pos ;
}

void disp(){
  for (int i = 0;i < 16;i++) {
    for (int j = 0;j < 16;j++) {
      digitalWrite(2,LOW);
      if ((disp_hex[i] & 0x8000 >> j) != 0)
        digitalWrite(2,HIGH);
      digitalWrite(4,HIGH);
      digitalWrite(4,LOW);
    }
    digitalWrite(5,HIGH);
    digitalWrite(5,LOW);
  }
  digitalWrite(6,HIGH);
  digitalWrite(6,LOW);
}

data_make()で表示データを作っています。

 

0x0660, 0x0660, 0x0660, 0x0660 データは上右下左の順

 

0x4444, 0x00f0, 0x2222, 0x0f00 データは上右下左の順

 

0x2640, 0x0c60, 0x0264, 0x0630 データは上右下左の順

 

0x4620, 0x0630, 0x0462, 0x0360 データは上右下左の順

 

0x0644, 0x0470, 0x2260, 0x0e20 データは上右下左の順

 

0x0622, 0x0740, 0x4460, 0x02e0 データは上右下左の順

 

0x04e0, 0x0262, 0x0720, 0x4640 データは上右下左の順

ブロックはselect、向きはmukiで選べる様にしています。

テスト用なので動きは有りません。

 

次回はブロックの落下を作って行きます。

 

では、また。

 

mckeechan.hatenadiary.com