はじめに

8×8 LED Matrix シールドで何か作るシリーズの第2弾。8×8 LED Matrix シールドで電子サイコロ、酒を飲みながら30分ほどでプログラムはできた。

電子サイコロ

スイッチは1つあれば良いのですが8×8 LED Matrix シールドには2つスイッチがあるので、1つは結果が出るのが遅いスイッチ、もう1つは早いスイッチにした。

動きは、こんな感じ
You need to a flashplayer enabled browser to view this YouTube video

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

#include <Dots.h>

const int SlowButtonPin = 14;  // 右ボタンピン
const int QuickButtonPin = 1;    // 左ボタンピン

// 1データ
const byte one[] =
{
    B00000000,
    B00000000,
    B00000000,
    B00011000,
    B00011000,
    B00000000,
    B00000000,
    B00000000,
};

// 2データ
const byte two[] =
{
    B00000000,
    B01100000,
    B01100000,
    B00000000,
    B00000000,
    B00000110,
    B00000110,
    B00000000,
};

const byte tree[] =
{
    B00000000,
    B01100000,
    B01100000,
    B00011000,
    B00011000,
    B00000110,
    B00000110,
    B00000000,
};

const byte four[] =
{
    B00000000,
    B01100110,
    B01100110,
    B00000000,
    B00000000,
    B01100110,
    B01100110,
    B00000000,
};

const byte five[] =
{
    B00000000,
    B01100110,
    B01100110,
    B00011000,
    B00011000,
    B01100110,
    B01100110,
    B00000000,
};

const byte six[] =
{
    B01100110,
    B01100110,
    B00000000,
    B01100110,
    B01100110,
    B00000000,
    B01100110,
    B01100110,
};

const byte start[] =
{
    B10101010,
    B01010101,
    B10101010,
    B01010101,
    B10101010,
    B01010101,
    B10101010,
    B01010101,
};

static int disp_num = 0;
static int atari = 0;
static int count = 0;

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

void setup()
{
    myDots.begin();

    pinMode(QuickButtonPin, INPUT);          // スイッチの入力ピンを設定
    digitalWrite(QuickButtonPin, HIGH);      // プルアップ抵抗を有効に
    pinMode(SlowButtonPin, INPUT);
    digitalWrite(SlowButtonPin, HIGH);
    randomSeed(analogRead(1)); // 乱数の種取得
}

void loop()
{
    if (digitalRead(SlowButtonPin) == LOW)
    {
        count = 99;  // ループ99回
        atari = random(1, 7); // 1~6 までの当たり数決定
    }
    else if (digitalRead(QuickButtonPin) == LOW)
    {
        count = 5;  // ループ5回
        atari = random(1, 7); // 1~6 までの当たり数決定
    }

    if (atari == 0)
    {
        disp_num=0;
    }
    else
    {
        if (count==0)
        {
            disp_num = atari;
        }
        else
        {
            if (++disp_num>6)
            {
                disp_num = 1;
            }
            count--;
        }
    }

    myDots.clear();
    switch (disp_num)
    {
    case 1:
        myDots.write(0, one, 8);
        break;
    case 2:
        myDots.write(0, two, 8);
        break;
    case 3:
        myDots.write(0, tree, 8);
        break;
    case 4:
        myDots.write(0, four, 8);
        break;
    case 5:
        myDots.write(0, five, 8);
        break;
    case 6:
        myDots.write(0, six, 8);
        break;
    default:
        myDots.write(0, start, 8);
        break;
    }
    myDots.updateWithDelay(100);
}

あとがき

8×8 LED Matrix シールドのネタ尽きた。8×8 LED Matrix シールドでプログラム組むのは終わりかな?