【问题标题】:Arduino: Generating 100 int random array results in first 10 integers of 0Arduino:生成 100 个 int 随机数组导致前 10 个整数为 0
【发布时间】:2014-12-30 15:31:37
【问题描述】:

我正在使用具有 32.000 字节存储空间的 Arduino UNO。 在编写程序时,我创建了一个用随机数填充数组的小函数。 该函数使用我在脚本顶部定义的变量:

int mode1[100];

这是填充上面数组的函数。 RandomSeed 接受一个数字作为其种子,由analogRead(0) 提供,其中0 表示我的Arduino 板上的引脚0。

void fillArray(int aSize){
    if (aSize == 100){
        randomSeed(analogRead(0));
        for (int i=0; i < aSize; i++){
            mode1[i] = random(1, aSize);}

当我调用 fillArray(100) 之类的 fillArray 函数时;它将生成我的整数。然后我通过这段代码在我的电脑上阅读它们:

  Serial.println("Filled array");
  for (int i=0; i <= 99; i++){Serial.println((int)mode1[i]);}

一切似乎都运行良好,但我注意到我的函数将生成的前 10 个整数始终为 0。我的主要问题是我不知道如何解决这个问题,因为脚本没有给我任何错误。因此,我的问题是:该数组的前 10 个整数始终为 0 的原因是什么?

我对原因的可能解释是 AnalogRead 函数做了一些奇怪的事情(目前它在 A0 插槽中只有一个引脚,没有任何连接,这应该工作。我也知道它不是存储容量,因为 32.000 字节足以在数组中存储 100 个整数,而我的脚本只有 5000 字节。

我对此有点卡住,因为我不知道是什么导致了问题,对此问题的任何帮助将不胜感激。

【问题讨论】:

  • 输出的其余部分是否始终相同?您还可以通过手动将 randomSeed 设置为 5000 并查看是否得到类似结果(前 10 个为 0)来测试它吗?我选择了 5000,因为它超出了 AnalogRead 将返回的范围。
  • 0random 被这样调用时不能返回:random(1, aSize);...
  • 你有没有在数组被填充后运行的代码?我怀疑可能有什么东西正在破坏你的数组......
  • 您可能还希望在生成每个随机数时打印出来。我怀疑是内存损坏了。如果生成随机数的循环总是生成正确的非零数,那么稍后您的数组似乎有 0,那么您可以确定您遇到了内存损坏的情况。
  • Minor:for (int i=0; i &lt; aSize; i++)for (int i=0; i &lt;= (aSize-1); i++) 更容易混淆

标签: c arrays arduino


【解决方案1】:

我无法发表评论(还没有足够的声誉),但是您是否检查了输出中的行数?在开始日志之前,您的代码中可能有“其他东西”发送数据。您可能想用 "mode1[xxx]= yyy" 编写行,其中 xxx 是索引,yyy存储在索引中的值,以确保您正在查看您的数组内容。

【讨论】:

    猜你喜欢
    • 2013-11-19
    • 1970-01-01
    • 2016-03-27
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-26
    • 2017-12-21
    • 1970-01-01
    相关资源
    最近更新 更多