randomSeed関数
randomSeed関数は乱数を生成する関数(random関数)を初期化します。 完全にランダムな数字が必要な場合は、random関数を実行する前に空きアナログポートをanalogRead関数で読み込んだ値の様な、真にランダムな値を用いて、randomSeed関数を実行します。
試しにこのプログラムをArduino UNOで実行すると、13ピンのLEDが1秒未満の周期で完全に不規則な間隔で点滅します。
※以下プログラム中からrandomSeed(analogRead(0))の一文を抜いてもLEDは一見ランダムに点滅しますが、Arduinoを再起動すると、再起動前と同一な周期でLEDが点滅します。この為random関数は疑似乱数と言われています。
void setup() { //一回だけ実行する pinMode(13, OUTPUT); //LEDを接続した13番ピンを出力用に設定する } void loop() { //{}内を無限ループで実行する randomSeed(analogRead(0)); // 未接続ピンのノイズを利用 int i = random (1000); //iに0~999の整数で生成した乱数を代入する。 digitalWrite(13, HIGH); //LEDが接続された13番ピンをHIGH(5V)にする delay(i); //iミリ秒LEDを点灯した状態で止める digitalWrite(13, LOW); //LEDが接続された13番ピンをLOW(0V)にする delay(1000 - i); //1000-iミリ秒LEDを消灯した状態で止める }
図1:プログラム例
randomSeed(seed)のパラメータ