乱数

乱数を取得するためのライブラリです。

真性乱数はサンプルに示す通り、ESP32から取得できます。

randomSeed

概要
乱数を得るための種を与えます。この種が同じ場合、毎回同じ順番で乱数が得られます。
文法
randomSeed(unsigned int seed)
パラメータ
seed: 種となる値
戻り値
なし

random

概要
乱数を取得します。この関数を使う前に一度はrandomSeedを呼んでください。
文法
long random(long min_num, long max_num)
パラメータ
min_num: 乱数の取りうる最小値。省略可
max_num: 乱数の取りうる最大値。省略可
戻り値
乱数(long)

サンプルプログラム

0~99までの乱数を100ms間隔でシリアル通信で出力する。


#include <Arduino.h>
#define INTERVAL 100
 
void setup()
{
    Serial.begin(9600);
    randomSeed(millis());
}
 
void loop()
{
    Serial.println( random(0, 100) );
    delay(INTERVAL);
}

 

32ビットの真性乱数を取得する。


#include <Arduino.h>
#include <Wire.h>
#define ESP32_I2C_ADDR    0x28
 
void setup() {
    Serial.begin(9600);
 
    Wire.setFrequency(150000);
    Wire.begin();
 
    pinMode(PIN_ESP_EN, OUTPUT);
    pinMode(PIN_ESP_IO0, OUTPUT);
    pinMode(PIN_SW0, INPUT);
    pinMode(PIN_SW1, INPUT);
 
    digitalWrite(PIN_ESP_IO0, HIGH);
    delay(100);
    digitalWrite(PIN_ESP_EN, HIGH);
    delay(1000);
 
}
 
void loop() {
    Wire.beginTransmission(ESP32_I2C_ADDR);
    Wire.write(0);
    Wire.endTransmission();
 
    uint32_t rand;
    Wire.requestFrom(ESP32_I2C_ADDR, 4);
    rand = Wire.read();
    rand <<= 8;
    rand += Wire.read();
    rand <<= 8;
    rand += Wire.read();
    rand <<= 8;
    rand += Wire.read();
    Serial.print(rand, HEX);         // print the character
    Serial.println();
    delay(100);
}