Последовательный порт Arduino печатает все строки, только когда я помещаю строку Serial.println ("") в цикл - PullRequest
0 голосов
/ 06 февраля 2019

У меня есть некоторые сегменты с контролируемым временем внутри моего основного цикла, которые включают / выключают светодиоды и сохраняют значения от датчика в связанный список (Используя эту библиотеку связанного списка: https://github.com/ivanseidel/LinkedList). У меня установлена ​​скорость передачи в бодах34800, потому что я хочу, чтобы данные передавались с более высокой скоростью, и у меня есть функция, которая зацикливает данные датчика, захваченные в синхронизированных циклах, и печатает их.

Странная проблема, с которой я сталкиваюсь, это когда яSerial.print () данных, он работает только тогда, когда у меня есть Serial.println () ( просто Serial.print () не работает ) внутри каждого из блоков if. Если я удаляю этот Serial.println () код не работает, а просто выдает мусор в Serial monitor.

Что вызывает эту проблему? Как мне ее решить? Вот код:

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);
      }
  }
}

1 Ответ

0 голосов
/ 06 февраля 2019

Вызывайте Serial.print () только один раз.

Если вы определяете обстоятельства, при которых вы хотите, а не хотите вызывать Serial.print (), мы можем помочь вам понять, что это происходит так, чтоway.

По сути, вам нужно посчитать, сколько раз вы уже напечатали.На самом деле вызовите print только если счет равен 0.

...