嗨,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/