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

最新更新