戻る

51 電子ルーレット

回路かいろ

Arduino と抵抗(1kΩ茶黒赤金, 11本)とスイッチを用意し図のように配線します。 できればLEDを円形に並べるとルーレットの雰囲気が出ます。

プログラム

動作どうさ

このプログラムを実行している間にスイッチを押すと電子ルーレットがスタートします。 毎回違うところに止まります。

解説かいせつ

このプログラムは大きく分けると5つに分かれています。

  1. (黄)初期化:乱数を初期化し、3番ピンから12番ピンを出力にする
  2. (青)スイッチが押されるまで待つ
  3. (緑)点灯したままのLEDを消す(2回目以降)。乱数で3から12を出す。
  4. (赤)20回+乱数の回数だけ、0.2秒LEDを点灯、0.2秒LEDを消灯を3番につながったLEDから順に繰り返す
  5. (水色)最後に点灯したLEDの番号より、iの数はforループを抜けたときに1大きいので、1引く。最後のLEDを2回点滅して、最後に点灯したままにして終了。
1は一回だけ実行し、2から5をforの無限ループで繰り返します。

ここでrandomSeedは乱数を初期化する関数です。A0ピンに加わっているノイズの電圧で乱数を初期化します。random()は1つめの引数と(2つめの引数)ー1の間の乱数を返す関数です。最初のrandomSeedがないとArduinoはrandom()関数を呼び出した回数が同じなら同じ値を返します。

int c;
int i;

void setup()
{
    randomSeed(analogRead(0));
    for(i=3; i<=12; i=i+1) {
        pinMode(i, OUTPUT);
    }
}

void loop()
{
    while(digitalRead(2)==HIGH) {
        delay(10);
    }

    digitalWrite(i, LOW);
    c = random(3, 12+1);

    for(i=0; i<=20+c; i=i+1) {
        digitalWrite(((i%10)+3), HIGH);
   	delay(200);
   	digitalWrite(((i%10)+3), LOW);
   	delay(200);
    }
    i = i - 1;
    digitalWrite(i, HIGH);
    delay(100);
    digitalWrite(i, LOW);
    delay(100);
    digitalWrite(i, HIGH);
    delay(100);
    digitalWrite(i, LOW);
    delay(100);
    digitalWrite(i, HIGH);
}


戻る
(c) 2014-2015 N. Mitsunaga
サンプルプログラムの著作権は放棄します。fritzingで作成した図は、そちらのライセンスに従って再配布して構いません。