嗨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 播种。取自网站,你可以只使用randomSeed( analogRead(pinNum) );
,其中pinNum应该是一个未连接的引脚。