Arduino-Random Numbers関数(乱数関数)の使い方
当記事では、ArduinoのRandom Numbers関数(乱数関数)の使い方について詳しく解説します。
Random Numbers関数を使うことによって、乱数列を作成して乱数を取得することができます。
なお、その他のArduino関数・ライブラリについては、以下の記事をご覧ください。
Random Numbers関数(乱数関数)
関数 | 引数 | 戻り値 | 説明 |
---|---|---|---|
void randomSeed(unsigned int seed) | seed:乱数の種 | なし | 乱数の種を指定 |
long random(long max) long random(long min, long max) | min:範囲の最小値 max:範囲の最大値 | 取得した乱数 | 乱数を取得 |
randomSeed()/乱数の種を指定
- 関数:void randomSeed(unsigned int seed)
- 引数:seed⇒乱数の種
- 戻り値:なし
randomSeed()関数は疑似乱数ジェネレータを初期化して、引数に乱数の種を指定します。 random()関数と組み合わせることで、乱数を取得することができます。
random()/乱数を取得
- 関数:long random(long max)/long random(long min, long max)
- 引数:min⇒範囲の最小値
- :max⇒範囲の最大値
- 戻り値:取得した乱数
random()関数は、randomSeed()関数で乱数の種を指定した後に、引数に取得する乱数の最小値・最大値を指定して、取得した乱数を戻り値で返します。
サンプルプログラム(サンプルスケッチ)
- Arduino Uno
- USBケーブル
- PC(プログラム書き込み・シリアルモニタ表示)
randomSeed()/乱数の種を指定
void setup() {
Serial.begin(9600);//シリアル通信を9600bpsで初期化
randomSeed(100);//乱数の種となる数値を100に指定
}
void loop() {
long RandomNumber;//「RandomNumber」をlongで変数宣言
RandomNumber = random(300);//乱数の最大値を300に指定
Serial.println(RandomNumber);//乱数を送信、改行
delay(1000);//1秒待機(1000msec待機)
}
100
189
275
185
209
113
212
151
151
229
サンプルプログラムでは、乱数の種を300に指定して乱数列が作成され、シリアルモニタに乱数が表示されていきます。なお、乱数の種が同じ値であれば同じ乱数列が作成されるので、同じような乱数を取得してしまう可能性があります。
void setup() {
Serial.begin(9600);//シリアル通信を9600bpsで初期化
randomSeed(analogRead(0));//乱数の種となる数値を未接続のアナログ入力0番ピンに指定
}
void loop() {
long RandomNumber;//「RandomNumber」をlongで変数宣言
RandomNumber = random(300);//乱数の最大値を300に指定
Serial.println(RandomNumber);//乱数を送信、改行
delay(1000);//1秒待機(1000msec待機)
}
275
40
238
32
28
229
107
214
139
166
191
299
85
271
250
106
179
54
39
75
乱数の種となる数値を未接続のアナログ入力ピンに指定することで、完全にランダムなノイズからの値となるため、毎回、異なる乱数列を作成することができます。
サンプルプログラムでは、乱数の種となる数値を未接続のアナログ入力0番ピンにして、シリアルモニタに乱数を表示させました。
Arduinoボードのリセットボタンでプログラムをリセットすることにより、2つの乱数列(シリアルモニタ パターン1とパターン2)からそれぞれ乱数を取得してみました。
random()/乱数を取得
void setup() {
Serial.begin(9600);//シリアル通信を9600bpsで初期化
randomSeed(100);//乱数の種となる数値を100に指定
}
void loop() {
long RandomNumber;//「RandomNumber」をlongで変数宣言
RandomNumber = random(200, 300);//乱数の最小値を200、最大値を300に指定
Serial.println(RandomNumber);//乱数を送信、改行
delay(1000);//1秒待機(1000msec待機)
}
200
289
275
285
209
213
212
251
251
229
すでに「randomSeed()/乱数の種を指定」のサンプルプログラムでも出てきましたが、random()は乱数の最大値のみを指定する他に、乱数の最小値と最大値を指定することもできます。
サンプルプログラムでは、random()乱数の最小値を200、最大値を300に指定しているので、シリアルモニタには200~300の乱数が表示されます。
おすすめのArduinoボードはどれ?
当記事『Arduino-Random Numbers関数(乱数関数)の使い方』では、Arduino Unoを使用したサンプルプログラムを解説してきました。
やはり、たくさんの種類のあるArduinoボードの中でも、最も基本的なエディションのArduino Unoがおすすめなのですが、Arduino Unoと電子部品を組み合わせたキットも存在します。
電子工作初心者にとっては、いちいち電子部品を別途購入する必要がないので非常に有用です。以下の記事で初心者でもわかりやすいように、ランキング形式でおすすめのArduino Unoを紹介しているので、ぜひご覧ください。
また、以下の記事で、安価でWi-Fi/Bluetoothに対応している「ESP32開発ボード」についてもまとめてみました。
このボードは、Arduinoボードではありませんが、Arduino IDEでソフト開発ができるため、電子工作でIoTを実現したい方におすすめです。