You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Arduino与GY-NEO-6Mv2交互:displayInfo()重复输出及setup()无输出问题

解决TinyGPS++ displayInfo()重复输出及setup()无输出问题

嘿,我看你在用TinyGPS++和SoftwareSerial的时候碰到了两个棘手的问题:displayInfo()在循环里不停重复输出相同字符串,把代码移到setup()里又啥都打不出来。这俩问题其实都是和Arduino的执行逻辑以及GPS模块的工作特性有关,我来给你拆解下并搞定它。

为啥会出现这俩问题?

  1. 重复输出的根源:
    Arduino的loop()函数是不停循环执行的,要是你每次循环都调用displayInfo(),但GPS模块的定位数据更新频率一般只有1次/秒,远赶不上loop()的执行速度。结果就是每次循环都打印旧的、还没更新的数据,看起来就像一直在重复输出。

  2. setup()里没输出的原因:
    setup()只在Arduino上电后跑一次,这时候GPS模块还没和卫星完成握手,根本没接收到任何有效定位数据。你这时候调用displayInfo(),TinyGPS++对象里的所有数据都是空的,自然啥都打不出来。

修复后的完整代码

我给你调整了代码,核心就是只在GPS有新数据时才打印,同时确保持续读取GPS串口的数据让解析正常工作:

#include <TinyGPS++.h>
#include <SoftwareSerial.h>

static const int RXPin = 12, TXPin = 13;
static const uint32_t GPSBaud = 9600;

TinyGPSPlus gps;
SoftwareSerial ss(RXPin, TXPin);

void setup() {
  Serial.begin(9600);
  ss.begin(GPSBaud);
  
  Serial.println("正在等待GPS定位,请稍候...");
}

void loop() {
  // 持续读取GPS串口的每一个字节,这是TinyGPS++解析数据的关键步骤
  while (ss.available() > 0) {
    gps.encode(ss.read());
    
    // 只有当GPS获取到新的位置数据时,才调用displayInfo打印
    if (gps.location.isUpdated()) {
      displayInfo();
    }
  }
}

void displayInfo() {
  Serial.print("纬度: "); 
  gps.location.isValid() ? Serial.print(gps.location.lat(), 6) : Serial.print("无效");

  Serial.print(" | 经度: "); 
  gps.location.isValid() ? Serial.print(gps.location.lng(), 6) : Serial.print("无效");

  Serial.print(" | 卫星数: ");
  gps.satellites.isValid() ? Serial.print(gps.satellites.value()) : Serial.print("无效");

  Serial.println();
}

关键改动说明

  • 新增数据更新判断:用gps.location.isUpdated()检查是否有新的位置数据,只有更新时才打印,彻底解决重复输出的问题
  • 持续读取串口数据:while (ss.available() > 0)确保不会漏掉GPS模块发来的任何数据,让TinyGPS++能正确解析定位信息
  • 有效性检查:在打印每个数据项前用isValid()判断,避免输出无效的空数据

额外小提示

  • 如果你想在时间、海拔等其他数据更新时也打印,可以对应使用gps.time.isUpdated()、gps.altitude.isUpdated()这类判断
  • GPS首次定位可能需要1-5分钟(室内更久),给模块接个有源外置天线能大幅加快定位速度

内容的提问来源于stack exchange,提问作者Nishant Agarwala

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:20:04