戻る

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の無限ループで繰り返します。

ここでrand()は-32768から32767の間の乱数を返す関数です。 「%」は左の式を右の式で割ったときのあまりを計算する記号です この二つを組み合わせてrand() % 10により0から9の乱数を作っています(10で割ったあまりは0(あまりなし)から9までだから)。 これに3を足すことで3から12の乱数になります。

for(i=3; i<=12; i=i+1) {
 pinMode(i, OUTPUT);
}
for(;;) {
 while(digitalRead(2)==HIGH) {
   delay(10);
 }
  digitalWrite(i, LOW);
  c = (rand() % 10) + 3;
  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 N. Mitsunaga
サンプルプログラムの著作権は放棄します。fritzingで作成した図は、そちらのライセンスに従って再配布して構いません。