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()
{
}
答案 0 :(得分:2)
您需要先随机植入种子。使用runAllManagedModulesForAllRequests
。
在使用任何PRNG(伪随机数生成器)之前,必须播种生成器。种子每次都应该不同,否则您将一遍又一遍地获得相同的序列。也就是说,如果先呼叫randomSeed(seed)
然后再呼叫randomSeed(2);
,则每次都会获得相同顺序的相同数字。对于给定的种子,数字的模式相同。如评论中所述,每个程序仅种子一次
因此,您每次都想给PRNG注入不同的编号。取自website,您可以只使用random()
,其中pinNum应该是未连接的引脚。