【问题标题】:Arduino serial port printing all lines only when I put a Serial.println(" ") line in the loop仅当我将 Serial.println(" ") 行放入循环时,Arduino 串口才打印所有行
【发布时间】:2019-02-06 06:12:35
【问题描述】:

我的主循环中有一些时间控制段,用于打开/关闭 LED,并将传感器中的值存储到链接列表中(使用此链接列表库:https://github.com/ivanseidel/LinkedList)。我将波特率设置为 34800,因为我希望以更快的速率传输数据,并且我有一个函数可以循环在定时循环中捕获的传感器数据并打印它们。

我面临的奇怪问题是当我使用 Serial.print() 数据时,它仅在我有 Serial.println() 时才有效(只是 Serial.print() 不起作用 ) 在每个 if 块内。如果我删除这个 Serial.println() 代码不起作用,只会在串行监视器中发出垃圾。

是什么导致了这个问题?我该如何解决?代码如下:

void setup( void )
{
  Serial.begin( 38400 );
  while(!Serial){
    }
  pinMode (ledPin670, OUTPUT);
  pinMode (ledPin850, OUTPUT);
  digitalWrite(ledPin670,HIGH);
  digitalWrite(ledPin850,HIGH);
  Start = millis();
  timer = micros();
}

void loop( void )
{
  if ( millis() - Start < 100 )
  {
    //Serial.read();
    Serial.println(" ");
    digitalWrite(ledPin670,LOW);
    analogRead( A0 );
    valList670.add(analogRead( A0 ));
    time670.add(micros() - timer);
    ++Count;
  }
  else if ((millis() - Start >= 100) && (millis() - Start < 110)){
    digitalWrite(ledPin670,HIGH);
    }
  else if ((millis() - Start >= 110) && (millis() - Start < 220))
  {
//    Serial.read();
    Serial.println(" ");
    digitalWrite(ledPin670,HIGH);
    digitalWrite(ledPin850,LOW);
    analogRead( A0 );
    valList950.add(analogRead( A0 ));
    time850.add(micros() - timer);
    ++Count2;
  }
  else if ((millis() - Start >= 220) && (millis() - Start < 230)){
    digitalWrite(ledPin850,HIGH);

  else
  {
    //Serial.println(millis() - Start);
    Serial.println("count:");
    Serial.println( Count );
    Serial.println( Count2 );
    Serial.println( Count3 );
    arrayLoop(valList670, time670,10);
    arrayLoop(valList850, time850,10);

    valList670.clear();
    valList850.clear();
    time850.clear();
    time670.clear();
    timer = micros();
    Count = 0;
    Count2 = 0;
    Start = millis();
}

void arrayLoop(LinkedList<int> &pinNum,LinkedList<unsigned long> &timer, int valDiff){
//  Serial.println(pinNum);
  int listSize = pinNum.size();
  for (int h = 0; h < listSize; h+=valDiff) {
      //Get value from list
      if (h <= listSize){
        int val = pinNum.get(h);
        unsigned long tim = timer.get(h);
        Serial.print(tim);
        Serial.print("\t");
        Serial.println(val);
      }
  }
}

【问题讨论】:

    标签: c arduino serial-port sensors


    【解决方案1】:

    只调用一次 Serial.print()。

    如果您定义了在什么情况下您想要调用 Serial.print() 或不想调用 Serial.print(),我们可以帮助您了解它是以这种方式发生的。

    不过,基本上,您需要计算已经打印了多少次。只有当计数为 0 时才真正调用 print。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-26
      • 1970-01-01
      • 1970-01-01
      • 2020-10-18
      • 2020-09-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多