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

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

 

続き

今回からはまたゲームを作って行きます。

 

作るゲームはドライブゲームです。

 

車を運転して障害物を避けながら進む定番ゲームです。

 

プログラムとしてはテニスのラケットを動かす所に似ています。

モジュールを立てて使うので左右上下の違いはありますが。

 

作ったプログラム

// slx_5024
byte address[ ] = {5, 4, 3, 2};      // アドレスは扱いやすい様に配列で持つ
int count = 0;
int speed = 5;
int car_pos = 0;
short car_data[ ] = {0x0000, 0x03c0, 0x03c0, 0x0180, 0x0180, 0x03c0, 0x03c0};

void setup() {
  for (int i = 0; i < 11; i++) {
    pinMode(i, OUTPUT);             // 各ピンの設定 全てアウトプット
  }

  pinMode(11, INPUT_PULLUP);
  pinMode(12, INPUT_PULLUP);

  digitalWrite(0,LOW); // SE     L 自動でRAM切り替わり
  digitalWrite(1,LOW); // A/BB   書き込み用RAM選択
  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++) {
      digitalWrite(9,LOW); // RED    赤データ              // データのセット
      if (k < 7) {
        if ((car_data[k] & 0x8000 >> i + car_pos) != 0)
          digitalWrite(9,HIGH); // RED    赤データ              // データのセット
      }
      clock(); // クロック
    }
    write_ale_we(); // 書き込み操作 関数にまとめて有る
  }
  count++;
  if (count > speed) {
    count = 0;

    // 車の位置
    if (digitalRead(11) == 0)
      if (car_pos < 6)
        car_pos++;

    if (digitalRead(12) == 0)
      if (car_pos > -6)
        car_pos--;
  }
}

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();
}

car_data[ ]で車のパターンを作っています。

ラケット移動で使ったタクトスイッチをそのまま流用しています。

 

車が左右に移動する様子


www.youtube.com

 

次回は道路を作って行きます。

 

では、また。

 

mckeechan.hatenadiary.com