Печать данных с gps на Serial1 и датчиков на Serial

У меня возникли проблемы с использованием GPS (на Serial1) с другими датчиками.

Они оба отлично работают независимо друг от друга, но когда я использую их в одном и том же коде, либо GPS, либо датчики получают возможность писать на последовательном мониторе.

Для моего GPS я использую TinyGPS++, но мне кажется, что проблема здесь не в этом.

Для упрощения кода я заменю то, что датчики должны писать, следующим:

Serial.println("Hello there");

Вот код

  if (Serial1.available() > 0) {
    gps.encode(Serial1.read());
    if (gps.location.isUpdated()){
      Serial.println("Satellite Count:");
      Serial.println(gps.satellites.value());
      Serial.println("Latitude:");
      Serial.println(gps.location.lat(), 6);
      Serial.println("Longitude:");
      Serial.println(gps.location.lng(), 6);
      Serial.println("Speed KT:");
      Serial.println(gps.speed.knots());
      Serial.println("Altitude Feet:");
      Serial.println(gps.altitude.feet());
      Serial.println("");
    }
  }
  Serial.println("Hello there");

Я понял

Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there
Hello there

Если строка удалена, я получаю это

Satellite Count:
5
Latitude:
xx.xxxxx
Longitude:
-xx.xxxxxx
Speed KT:
0.19
Altitude Feet:
331.69

Спасибо

, 👍1

Обсуждение

добавить скетч к вопросу? библиотека GPS возвращает данные только в том случае, если они собираются во время выполнения цикла печати в каждом цикле., @Juraj

@Juraj извините, я не понимаю. Не могли бы вы сказать еще раз другими словами?, @Omar Ben Salah

напечатать временную метку внутри блока if... добавить serial.println (millis()); перед "Satellite Count:" .... также добавить ее в "Hello there", @jsotola

@jsotola Я изменил его на текст. Моя временная метка на самом деле представляет собой просто количество секунд с 1 января 1970 года [вот так] (https://www.unixtimestamp.com/), @Omar Ben Salah

спасибо за удаление картинок, теперь листинг программы читабельный .... вы упускаете из виду вопрос о миллис () ... напечатайте значение миллис () и проверьте результат .... как часто loop () повторить? ... как часто повторяется if (gps.location.isUpdated()){?, @jsotola

оба повторяются до бесконечности, @Omar Ben Salah

похоже, что моя проблема похожа на эту https://arduinoprosto.ru/q/70269/my-gps-coordinate-does-not-show-only-my-ultrasonic-output-came-out, @Omar Ben Salah


1 ответ


1

Похоже, это очередной случай серийного спама. Я рекомендую перейти на подход, основанный на кадрах, и контролировать эту скорость с помощью проверок в миллисекундах.

Это ограничивает спам. Альтернативой является прямое ограничение до 1:

//статический глобальный:
static int isaidHELLO = 0;

// далее в цикле
if (Serial1.available() > 0) {
    gps.encode(Serial1.read());
    if (gps.location.isUpdated()){
      Serial.println("Satellite Count:");
      Serial.println(gps.satellites.value());
      Serial.println("Latitude:");
      Serial.println(gps.location.lat(), 6);
      Serial.println("Longitude:");
      Serial.println(gps.location.lng(), 6);
      Serial.println("Speed KT:");
      Serial.println(gps.speed.knots());
      Serial.println("Altitude Feet:");
      Serial.println(gps.altitude.feet());
      Serial.println("");
      isaidHELLO = 0;
    }
  }
  if(isaidHELLO == 0)
  {
      Serial.println("Hello there");
      isaidHELLO = 1;
  }

,

Спасибо, это отлично работает!, @Omar Ben Salah