弘毅 发表于 2014-4-25 16:16:04

OCROBOT入门教程020--获取随机数

本帖最后由 董董soul 于 2016-10-27 11:12 编辑

在对程序进行加密过程中,我们常常会用到随机数,怎样在OCROBOT控制板中获取随机数呢,我们这节课就学习一下。

获取随机数我们需要一个种子,这个种子我们可以使用断开连接的A0端口ADC读数。

下面的代码是把A0端口的读数作为随机数种子,产生一个最大值不超过600的随机数。

long randNumber;

void setup(){
Serial.begin(9600);
randomSeed(analogRead(A0));
}

void loop(){
randNumber = random(600);
Serial.println(randNumber);

delay(200);
}
我们打开串口监视器来查看产生的随机数。



http://player.youku.com/player.php/sid/XNzE5NzQ3MTY0/v.swf

产生的随机数除了可以限制最大值,还可以同时限制最小值。我们重新烧录下面的代码,每次首先输出一个最大值不超过300的随机数,然后输出一个10到19之间的随机数。

long randNumber;

void setup(){
Serial.begin(9600);

//如果模拟输入引脚0为断开,随机的模拟噪声
//将会调用randomSeed()函数在每次代码运行时生成
//不同的种子数值。
//randomSeed()将随机打乱random函数。
randomSeed(analogRead(0));
}

void loop() {
//打印一个0到299之间的随机数
randNumber = random(300);
Serial.println(randNumber);

//打印一个10到19之间的随机数
randNumber = random(10, 20);
Serial.println(randNumber);

delay(200);
}

打开串口监视器进行查看~



http://player.youku.com/player.php/sid/XNzE5NzYxMDA0/v.swf


randomSeed(seed)
描述
使用randomSeed()初始化伪随机数生成器,使生成器在随机序列中的任意点开始。这个序列,虽然很长,并且是随机的,但始终是同一序列。
如需要在一个random()序列上生成真正意义的随机数,在执行其子序列时使用randomSeed()函数预设一个绝对的随机输入,例如在一个断开引脚上的analogRead()函数的返回值。
反之,有些时候伪随机数的精确重复也是有用的。这可以在一个随机系列开始前,通过调用一个使用固定数值的randomSeed()函数来完成。
参数
long,int – 通过数字生成种子。
random()
描述
使用random()函数将生成伪随机数。
语法
random(max)
random(min, max)
参数
min – 随机数的最小值,随机数将包含此值。 (此参数可选)
max – 随机数的最大值,随机数不包含此值。
返回
min和max-1之间的随机数( 数据类型为long )
注意
如需要在一个random()序列上生成真正意义的随机数,在执行其子序列时使用randomSeed()函数预设一个绝对的随机输入,例如在一个断开引脚上的analogRead()函数的返回值。

反之,有些时候伪随机数的精确重复也是有用的。这可以在一个随机系列开始前,通过调用一个使用固定数值的randomSeed()函数来完成。
页: [1]
查看完整版本: OCROBOT入门教程020--获取随机数