【问题标题】:How do I establish multiple random numbers in a single Arduino sketch?如何在单个 Arduino 草图中建立多个随机数?
【发布时间】:2013-08-09 01:56:38
【问题描述】:

我有一个 Arduino 草图,我计划用它来控制 8 个 LED 以不同的速率闪烁或消失。我想为我的输出引脚设置一个 1-8random 的随机数,为循环内的 delay() 值设置一个从 30-300 的随机数,并为控制淡入淡出速度的 +=X 设置第三个随机数进或出。我还想建立一个随机数来指示灯是闪烁还是消失(布尔随机数在这里可以工作......)。

这就是我模糊的地方。从文档中,我了解到randomSeed() 函数将驱动random(x,y),但似乎推断我定义的所有random(x,y) 值将在同一个草图中使用相同的种子。

似乎没有办法定义种子 A 驱动随机 A 和种子 B 驱动随机 B。我读对了吗?我找不到任何可以做我想做的事情的样本。

伪代码如下:

void setup() {
    pinMode(12, OUTPUT);
    pinMode(11, OUTPUT);
    pinMode(10, OUTPUT);
    pinMode(9, OUTPUT);
    pinMode(8, OUTPUT);
    pinMode(7, OUTPUT);
    pinMode(6, OUTPUT);
    pinMode(5, OUTPUT);
    pinMode(4, OUTPUT);
}

void loop() {
#
#  How can I assocaiate pinSeed with pin, delaySeed with delay and velSeed with velocity?
#
    int pinSeed = RandomSeed(analogRead(0));
    int pin = Random1(4,13);
    int delaySeed = RandomSeed(analogRead(0));
    int delay = Random(30,200);
    int velSeed = RandomSeed(analogRead(0);
    int velocity = Random(1,21);
    for (i=0;i=255;+=velocity) {
        analogWrite(pin,i);
        delay(velocity);
    }
}

【问题讨论】:

    标签: for-loop random arduino


    【解决方案1】:

    种子值设置随机(实际上是伪随机)数字序列的起点。设置种子后,您可以绘制随机数,不要重置或重新定义种子以获得第二个随机数。通常一个种子只需要在程序中生成一次。

    能够设置种子允许您在第二次、第三次等执行代码时重新创建随机数序列。这有助于调试!

    此外,返回的每个随机数都可以归一化为不同的值范围,例如 1-8 或 30-300,布尔值可以定义为 = 5 (true)当随机数归一化为 1 到 10 时(例如)。

    希望这会有所帮助。

    【讨论】:

    • 我想我明白了你的意思:在每次执行时设置种子仍然允许我选择多个不同的随机数而无需重新播种。相同代码的第二次执行将产生相同的多个不同的随机数。种子每次执行发生一次,而不是每一代随机数发生一次。基本上就是你刚才说的吗? :)
    • @dwwilson66,是的,这正是我的意思。为清楚起见,将进行编辑。
    猜你喜欢
    • 1970-01-01
    • 2015-12-24
    • 1970-01-01
    • 2014-01-10
    • 2019-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多