Печать данных с 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
Спасибо
@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
добавить скетч к вопросу? библиотека 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