以前、頑丈な自作プロトシールドで製作した8×8 LED Matrix シールドにスイッチを取り付けると、電子サイコロとかゲームが作れそうなので改造しました。

スイッチ取り付け

白いスイッチは従来からあるリセットスイッチ。追加したのは黒のスイッチです。

スイッチを増設した8x8 Matrix シールド

スイッチを増設した8x8 Matrix シールド

ピンポンゲームの作成

8×8 LED Matrix シールドで何かということで、ピンポンゲームを思いついた。そこで作ってみた。

動きはこんな感じ、片手にカメラを持ってるので即ゲームオーパ!!
You need to a flashplayer enabled browser to view this YouTube video

プログラム(スケッチ)は、コレ

#include <Dots.h>

const int RightButtonPin = 14;  // 右ボタンピン
const int LeftButtonPin = 1;    // 左ボタンピン

// ボール情報
static int ball_x = 4; // 現在x座標
static int ball_y = 4; // 現在y座標
static int ball_vect_x = 1;  // x 方向移動ベクタ量
static int ball_vect_y = 1;  // y 方向移動ベクタ量
// バー情報
static int bar_x = 0; // 現在x座標
static int bar_y = 0; // 現在y座標
static int bar_vect_x = 0; // 現在y座標

static int playflg = 1;

// ×表示

const byte batsu[] =
{
    B10000001,
    B01000010,
    B00100100,
    B00011000,
    B00011000,
    B00100100,
    B01000010,
    B10000001,
 };

Dots myDots =  Dots(8, 10, 5, 9, 3, 6, 4, 7,
                    13, 18, 19, 11, 2, 12, 17, 16 );

void setup()
{
    myDots.begin();

    pinMode(RightButtonPin, INPUT);          // スイッチの入力ピンを設
    digitalWrite(RightButtonPin, HIGH);      // プルアップ抵抗を有効に
    pinMode(LeftButtonPin, INPUT);          
   digitalWrite(LeftButtonPin, HIGH);
}

void loop()
{

    if (playflg)
    {
        // パーの位置計算
        bar_vect_x = 0;
        if (digitalRead(RightButtonPin) == LOW)
        {
            bar_vect_x = 1;
        }
        else if (digitalRead(LeftButtonPin) == LOW)
        {
            bar_vect_x = -1;
        }
        bar_x += bar_vect_x;

        if (bar_x == 7)
        {
            bar_x = 6;
        }
        else if (bar_x == -1)
        {
            bar_x = 0;
        }

        // ボールの位置計算
        if (ball_x == 0 || ball_x == 7)
        {
            ball_vect_x *= -1;
        }
        ball_x += ball_vect_x;

        if (ball_y == 7)
        {
            ball_vect_y *= -1;
        }
        else if (ball_y ==1 && (ball_x == bar_x || ball_x == bar_x-1))
        {
            ball_vect_y *= -1;
        }
        ball_y += ball_vect_y;

        myDots.clear();
        myDots.write(7-ball_x, ball_y, HIGH);
        myDots.write(7-bar_x, bar_y, HIGH);
        myDots.write(6-bar_x, bar_y, HIGH);

        if (ball_y == 0)
        {
            playflg = 0;
        }
    }
    else
    {
        myDots.write(0, batsu, 8);
    }
    myDots.updateWithDelay(100);
}

あとがき

8×8 LED Matrixの表示には、arms32さんのDotsduinoのDotsライブラリを利用させていただいきました。おかげで簡単なプログラムでピンポンゲームを作ることができました。ありがとうございます。