C++ Arduino - 随机函数不起作用

标签 c++ random arduino

嗨,C++ 开发人员和 StackOverflow 用户!

下面的代码是我所做的,但由于某些原因,随机函数不起作用,或者结果输出始终是相同的值“1”,我做错了什么吗?我应该如何解决这个问题?

  void setup()           
  {
  int randNumber;
  int i;

  randNumber = random(2);
  Serial.println(randNumber);
  pinMode(PIEZO, OUTPUT);
  delay(3000);

  if (randNumber == 0)
  {
    for (i = 0; i < 105; i++)                                       
    {
      tone(PIEZO, notes[i], time[i]);                                
      delay(time[i]);
    }
  }
  else if (randNumber == 1)                                     
    for (i = 0; i < 116; i++)                                       
    {
      tone(PIEZO, Snowman_Notes[i], Snowman_Rhythm[i]);                                  
      delay(Snowman_Rhythm[i]);
    }
}
void loop()                                                      
{
}

最佳答案

您需要先随机播种。使用 randomSeed(seed)

在使用任何 PRNG(伪随机数生成器)之前,您必须为生成器播种。种子每次都应该不同,否则你会一遍又一遍地得到相同的序列。也就是说,如果您先调用 randomSeed(2);,然后再调用 random(),您每次都会以相同的顺序获得相同的数字。给定种子的数字模式相同。正如评论中提到的,每个程序只播种一次

因此,您需要每次都使用不同的数字为 PRNG 播种。取自website ,您可以只使用 randomSeed( analogRead(pinNum) );,其中 pinNum 应该是未连接的引脚。

关于C++ Arduino - 随机函数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59448876/

相关文章:

python - 在numpy中绘制相同的随机数

random - Ada:随机播种

python - 在 Python 中生成随机 UTF-8 字符串

java - 安卓蓝牙字符串接收器

c++ - 重载函数调用 double 是不明确的

c++ - 是否可以将 `B<get_item<0,Ts...>>` 更改为 `template_with_params<B, 1, ...Ts>` ?

c++ - 结构成员初始化

c# - 如何将信息从 Kinect 发送到 Arduino?

c++ - 将模板化类转换为更通用的特化

c++ - 使用 std::initializer_list 参数将原始数组传递给函数