Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何防止每次arduino启动时颜色数组都是相同的随机数组_C++_Arrays_Random_Arduino_Random Seed - Fatal编程技术网

C++ 如何防止每次arduino启动时颜色数组都是相同的随机数组

C++ 如何防止每次arduino启动时颜色数组都是相同的随机数组,c++,arrays,random,arduino,random-seed,C++,Arrays,Random,Arduino,Random Seed,我有一个数组,它存储一些uint32_t新片颜色:红色、绿色、蓝色和黄色: uint32_t colorRed = pixels.Color(255, 0, 0); uint32_t colorGreen = pixels.Color(0, 150, 0); uint32_t colorBlue = pixels.Color(0, 255, 255); uint32_t colorYellow = pixels.Color(255, 255, 0); uint32_t colorArray[4

我有一个数组,它存储一些uint32_t新片颜色:红色、绿色、蓝色和黄色:

uint32_t colorRed = pixels.Color(255, 0, 0);
uint32_t colorGreen = pixels.Color(0, 150, 0);
uint32_t colorBlue = pixels.Color(0, 255, 255);
uint32_t colorYellow = pixels.Color(255, 255, 0);

uint32_t colorArray[4] = {colorRed, colorGreen, colorBlue, colorYellow};
然后我想制作一个数组,在每次arduino启动时以随机顺序保存这些颜色

uint32_t patternArray[4] = {colorArray[random(4)], colorArray[random(4)], colorArray[random(4)], colorArray[random(4)]};
这似乎对这4种颜色进行了随机排序,但每次arduino启动时都是相同的“随机”顺序(黄色、绿色、绿色、蓝色)

每次arduino启动时,我如何使随机顺序不同

我尝试过声明占位符数组,并在大多数论坛帖子建议的随机种子(0)之后初始化它,但我似乎无法获得正确的语法来声明数组,然后为其赋值:

//uint32_t patternArray; //nope
//uint32_t patternArray[4]; //nope


setup(){
  randomSeed(analogRead(0));
  //patternArray = {colorArray[random(4)], colorArray[random(4)], colorArray[random(4)], colorArray[random(4)]}; //nope
  patternArray[4] = {colorArray[random(4)], colorArray[random(4)], colorArray[random(4)], colorArray[random(4)]}; //nope

}

从指定的模拟引脚读取值。Arduino板包含一个多通道、10位模数转换器。这意味着它将0和工作电压(5V或3.3V)之间的输入电压映射为0和1023之间的整数值

所以无论引脚0处的电压电平是什么,它总是相同的,因此随机的种子总是相同的


使用时间作为种子值可确保每次启动程序时具有不同的值,例如

返回自Arduino板开始运行当前程序以来经过的毫秒数。大约50天后,该数字将溢出(归零)


或者,看看下面的示例

示例代码
该代码生成一个伪随机数,并将生成的数字发送到串行端口

这几乎就是你所拥有的。也许做
Serial.begin()
是必要的技巧。

来自

从指定的模拟引脚读取值。Arduino板包含一个多通道、10位模数转换器。这意味着它将0和工作电压(5V或3.3V)之间的输入电压映射为0和1023之间的整数值

所以无论引脚0处的电压电平是什么,它总是相同的,因此随机的种子总是相同的


使用时间作为种子值可确保每次启动程序时具有不同的值,例如

返回自Arduino板开始运行当前程序以来经过的毫秒数。大约50天后,该数字将溢出(归零)


或者,看看下面的示例

示例代码
该代码生成一个伪随机数,并将生成的数字发送到串行端口


这几乎就是你所拥有的。也许做
Serial.begin()
是必要的技巧。

最终奏效的解决方案与@NathanOliver-Restore Monica建议的类似。我以错误的方式分配数组值。另外,中的
randomSeed(millis())
不起作用,但是
randomSeed(analogRead(1))
起作用,但是
random()
调用不能在setup方法中-它必须在循环中

void setup() {
  Serial.begin(115200);
  randomSeed(analogRead(1));
}

void loop(){
  for (int i=-0; i<totalPatternLength;i++){
    int randIndex = random(totalNumColors);
    patternArray[i] = colorArray[randIndex];
  }
}
void setup(){
序列号开始(115200);
随机种子(模拟读取(1));
}
void循环(){

对于(int i=-0;i最终起作用的解决方案与@NathanOliver-Restore Monica建议的类似。我以错误的方式分配数组值。此外,
randomSeed(millis())
in不起作用,但
randomSeed(analogRead(1))
起作用,然而,
random()
调用不能在设置方法中-它必须在循环中

void setup() {
  Serial.begin(115200);
  randomSeed(analogRead(1));
}

void loop(){
  for (int i=-0; i<totalPatternLength;i++){
    int randIndex = random(totalNumColors);
    patternArray[i] = colorArray[randIndex];
  }
}
void setup(){
序列号开始(115200);
随机种子(模拟读取(1));
}
void循环(){

对于(int i=-0;iTry
randomSeed(millis());
相反。可能是pin
0
始终是相同的值,这意味着种子将始终是相同的,这意味着序列将是相同的。谢谢-我考虑过这一点-它仍然返回相同的模式。我想部分问题可能是我在安装程序调用randomSeed之前声明patternArray-但是我不知道如何做一个占位符数组,然后推送值到它没有错误。哦,doh。你不能指定C++中的数组。你需要“代码>模式数组[0 ] = CORLARDATABOR[RAPDATION(4)];TopnNald[1] = CORLARDALAR[随机(4)];PATTMANARDROL[4] = CORLARDARCTOR[随机(4)];TopnReal[3 ] = CurralSale[随机(4)];< /Calp>(或使用循环)Dang-在randomSeed之后实例化颜色数组是有效的,但它每次(黄、绿、绿、蓝)都会生成相同的颜色图案@NathanOliver-Monica-我是根据你的评论得出的。如果你把它作为一个答案(减去randomSeed(millis())部分,那就行不通了),我会接受它。请尝试
randomSeed(millis());
相反。可能是pin
0
始终是相同的值,这意味着种子将始终是相同的,这意味着序列将是相同的。谢谢-我考虑过这一点-它仍然返回相同的模式。我想部分问题可能是我在安装程序调用randomSeed之前声明patternArray-但是我不知道如何做一个占位符数组,然后推送值到它没有错误。哦,doh。你不能指定C++中的数组。你需要“代码>模式数组[0 ] = CORLARDATABOR[RAPDATION(4)];TopnNald[1] = CORLARDALAR[随机(4)];PATTMANARDROL[4] = CORLARDARCTOR[随机(4)];TopnReal[3 ] = CurralSale[随机(4)];< /Calp>(或使用循环)Dang-在randomSeed之后实例化颜色数组是有效的,但它每次(黄、绿、绿、蓝)都会生成相同的颜色图案@NathanOliver-Monica-我是根据你的评论得出的。如果你把它作为一个答案(减去randomSeed(millis())部分,那就行不通了),我会接受的。谢谢@Olaf Dietsche-知道如何创建每次都不同的颜色数组吗?是的,我已经添加了Serial.begin before analogRead,但它仍然不起作用。@mheavers,我不知道该怎么做了