串行打印变量在特定的时间间隔打印数组的大小,即使数组没有被使用

Serial Printing Variables at a Specific Time Intervals Prints Size of Array Even If Array Is Not Used

本文关键字:打印 数组 变量 时间      更新时间:2023-10-16

我使用Arduino Uno和CD通过在CD的顶部和底部附加传感器来模拟装配线,这些传感器被读取到Arduino模拟端口并在每次样本通过时计数。它使用模拟输入来记录信号的高电平,并在信号变低时进行计数,就像计算数字信号的后沿一样。我想每小时显示一次结果,然后重置计数器,同时将旧值存储在数组中。这些值相当大,所以我将数组和数字声明为unsigned long。我对代码进行了故障排除,除了以特定的时间间隔显示结果和存储数组的适当值之外,一切都正常工作。下面是我为测试程序的这一特定部分而编写的代码:

unsigned long spins[200];
unsigned long positives[200];
unsigned long counter=0;
unsigned long greenCounter=0;
int numberofhours=0;
int timer=0;
int hour=3000;
void setup() {
  Serial.begin(115200);
}
void loop() {
  timer==millis();
  if (timer%hour==0){  //if the timer reaches 1 hour, it will print the results, store old and clear values for positive tests and CD spins, and print old values
     numberofhours++;
     spins[numberofhours]=counter;
     positives[numberofhours]=greenCounter;
      Serial.print("n Number of Hours");
      Serial.print(" ");
      Serial.print(numberofhours);  
      /*  for(int i=0; i<numberofhours; i++){
          Serial.print("n Number of Spins, Hour");
          Serial.print(" ");
          Serial.print(i);
          Serial.print(";");  
          Serial.print(spins[i]);   
          Serial.print("n Number of Postives, Hour");
          Serial.print(" ");
          Serial.print(i);
          Serial.print(";");  
          Serial.print(positives[i]);        
        } */
    }

  counter=0;
  greenCounter=0;
  }

将for循环注释掉后,我从序列中得到了这些结果。每3000毫秒打印一次监视器:

小时数小时数2学时数3…以此类推,直到:小时数198数量o

注意:第199条实际上是这样打印的。

激活for循环后,串行监视器上的结果如下:

小时数旋转次数,小时0阳性数,小时0小时数2旋转次数,小时0阳性数,小时0旋转次数,第1小时阳性数,第1小时学时数3旋转次数,小时0阳性数,小时0旋转次数,第1小时阳性数,第1小时旋转次数,第2小时阳性数,第2小时小时数4

除了一直持续到第200小时,这比300毫秒要长得多。然后暂停,然后重新开始。如何修复小时数计数问题,以便我可以将计数器和greenCounter的所有结果存储在与小时数变量对应的数组中的适当位置?

您正在不断地重置您的计数器。将reset移到if语句中

你的代码中似乎缺少了一些东西。你在哪里修改counter和greenCounter?此外,小时数将增加到超过199,并且您将索引超出数组的范围。您可能还想添加Serial.println()以使您的输出更易于阅读。