嗨,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()
{
}发布于 2019-12-23 03:55:55
你得先随机播种。使用randomSeed(seed)。
在使用任何PRNG (伪随机数生成器)之前,必须先为生成器添加种子。每次种子应该是不同的,否则你会得到相同的序列一遍又一遍。也就是说,如果您调用randomSeed(2);,然后调用random(),那么每次都会得到相同的编号。对于给定的种子,数字的模式是相同的。正如注释中所提到的,每个程序只运行一次种子。
所以,您每次都要用不同的数字来为PRNG添加种子。从网站中获取,您可以只使用randomSeed( analogRead(pinNum) );,其中pinNum应该是一个未连接的引脚。
https://stackoverflow.com/questions/59448876
复制相似问题