【问题标题】:Arduino Pick a random word from array every time sketch is ran每次运行草图时,Arduino 从数组中选择一个随机单词
【发布时间】:2020-12-13 14:16:16
【问题描述】:

我有一些代码:

char *fruits[]={"Lettuce", "Tomato", "Pineapple", "Apple"}; //This is the array
long fruit1; 
void setup(){
 Serial.begin(9600);
 randomSeed(500);
 fruit1 = random(sizeof(fruits)/sizeof(char*));
 Serial.println(fruits[fruit1]);//Prints random in serial
}

此代码在第一次运行 arduino 草图时会随机选择一个水果,但每隔一次我运行它时,它会使用与第一次运行草图时相同的随机水果。我希望它在每次运行草图时从数组中随机选择一个水果,这意味着每次我打开和关闭它时,我都希望看到与上一个不同的随机水果。对不起,如果我做错了什么。

代码来源:https://forum.arduino.cc/index.php?topic=45653.0

【问题讨论】:

    标签: arrays random arduino arduino-c++


    【解决方案1】:

    对于给定的种子值,您将始终获得相同的随机数序列。每次调用 setup 时都需要不同的种子:

    randomSeed()

    randomSeed() 初始化伪随机数生成器,导致 它从随机序列中的任意点开始。这 序列虽然很长,而且是随机的,但始终是相同的。

    如果对 random() 生成的值序列很重要 不同,在草图的后续执行中,使用randomSeed() 用相当随机的输入初始化随机数生成器, 例如analogRead() 在未连接的引脚上。

    相反,使用伪随机数有时会很有用 完全重复的序列。这可以通过调用来完成 randomSeed() 有一个固定的数字,在开始随机序列之前。

    【讨论】:

      【解决方案2】:

      我并不完全了解 PRNG 函数如何在较低级别工作,但我相信保持 seed 相同可能是导致问题的原因。

      arduino reference 建议您通过以下方式实现随机数生成代码来帮助您解决此问题 -

      long randNumber;
      
      void setup() {
        Serial.begin(9600);
      
        // if analog input pin 0 is unconnected, random analog
        // noise will cause the call to randomSeed() to generate
        // different seed numbers each time the sketch runs.
        // randomSeed() will then shuffle the random function.
        randomSeed(analogRead(0));
      }
      
      void loop() {
        // print a random number from 0 to 299
        randNumber = random(300);
        Serial.println(randNumber);
      
        // print a random number from 10 to 19
        randNumber = random(10, 20);
        Serial.println(randNumber);
      
        delay(50);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-26
        • 2014-08-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多