目次
前
次
クリスマスツリー
LEDを利用した点滅回路の応用例として
クリスマスツリーを考えます。
クリスマスツリーは、LEGがランダムに点灯と消灯を
繰り返すので、乱数を利用して点滅させればよいと
わかります。
Arduinoでは、乱数生成の関数が用意されています。
これを利用することにしましょう。
ArduinoIDEから、リファレンスをアクセスして
乱数に関する関数の説明まで辿りついてみます。
ArduinoIDEの「ヘルプ」をアクセス
ArduinoIDEのメニューバーにある「ヘルプ」をクリック。
「リファレンス」をアクセス
randomの説明にアクセス
「リファレンス」をクリックして、トップページ表示。
Random Numbersが見えるまで、スクロールダウン。
random()をクリック。
random利用のサンプルスケッチ表示
random()に関連するトップページ表示。
サンプルスケッチが見えるまで、スクロールダウン。
説明で関数randomの利用方法を理解します。
random()の引数には、整数を指定。
与えた整数より1だけ少ない数値を返す。
開始整数、終了整数を与えると、その範囲の整数値を返す。
クリスマスツリーにつけたLEDの点灯、消灯を
どう実現するかを考えます。
9個のLEDランプがあるので、時間をおいて乱数を発生させ
点灯するLEDランプの番号を決めます。
消灯するLEDランプの番号は、次のように計算します。
8−(点灯するLEDの番号)
loop中の実現処理シーケンスを決めます。
- random()で、0〜8の整数を生成
- 1で作成した番号のLEDを点灯
- 消灯するLEDの番号を計算
- 3で算出した番号のLEDを消灯
- ディレイ
シーケンスを作成すると、以下でよいでしょう。
// generate LED number
i = random(LAST);
// turn on target LED
digitalWrite(i,LOW);
// generate other LED number
i = MAX - i ;
// turn off target LED
digitalWrite(i,HIGH);
// delay
delay(xinterval);
乱数を使う場合、種(シーズ)を決めなければ
毎回同じ動作をしてしまいます。
乱数のシーズを与えるには、いくつかの定番があります。
今回は、Arduinoに電源が入ってからの経過時間を使い
異なるシーズを生成します。
次のように記述してsetupに入れておきます。
randomSeed((millis() % DIVX));
関数millis()は、Arduinoに電源が入ってからの
経過時間を返します。
スケッチにまとめます。
typedef unsigned char UBYTE ;
#define DIVX 1000
#define LED 2
#define LAST 9
#define MAX 8
int xinterval ;
UBYTE i ;
void setup() {
// initialize the digital pin as output:
for ( i = 0 ; i < LAST ; i++ ) {
pinMode(LED+i, OUTPUT);
}
// set random seed
randomSeed((millis() % DIVX));
// set interval
xinterval = 500 ;
}
// the loop() method runs over and over again,
// as long as the Arduino has power
void loop()
{
// generate LED number
i = random(LAST);
// turn on target LED
digitalWrite(i,LOW);
// generate other LED number
i = MAX - i ;
// turn off target LED
digitalWrite(i,HIGH);
// delay
delay(xinterval);
}
スケッチができたなら、ブレッドボードにLEDと
抵抗をつけて、動作確認します。
Arduinoには、5Vと3.3Vの電源出力があります。
LEDの電流制限抵抗の値は、2つの電源でどの程度
にしたらよいか計算してから接続します。
LEDには1mAを流すとします。
目次
前
次