改进代码#include <SoftwareSerial.h> #include <TinyGPS.h> #include <LiquidCrystal.h> // 定义GPS模块的引脚 #define RXPin 4 #define TXPin 3 // 定义LCD12864的引脚 #define RS 8 #define EN 9 #define D4 4 #define D5 5 #define D6 6 #define D7 7 SoftwareSerial gpsSerial(RXPin, TXPin); TinyGPS gps; LiquidCrystal lcd(RS, EN, D4, D5, D6, D7); float lastLat = 0.0; float lastLng = 0.0; void setup() { gpsSerial.begin(9600); lcd.begin(16, 2); lcd.clear(); lcd.setCursor(0, 0); lcd.print("GPS Test"); } void loop() { while (gpsSerial.available()) { if (gps.encode(gpsSerial.read())) { displayInfo(); } } } void displayInfo() { if (gps.location.isValid()) { float lat = gps.location.lat(); float lng = gps.location.lng(); if (lat != lastLat || lng != lastLng) { lastLat = lat; lastLng = lng; lcd.setCursor(0, 0); lcd.print("Lat: "); lcd.print(lat, 8); lcd.setCursor(0, 1); lcd.print("Lng: "); lcd.print(lng, 8); } } else { lcd.setCursor(0, 0); lcd.print("GPS not located"); } }
时间: 2023-12-10 13:39:46 浏览: 84
解析GPS模块数据的代码程序
这段代码主要是使用了SoftwareSerial库和TinyGPS库来读取GPS模块的数据,并且将经纬度信息显示在LCD12864屏幕上。不过,我注意到其中有几个地方可以改进:
1. 在setup()函数中,可以添加一行代码来设置GPS模块的波特率,以便与程序中的波特率匹配,这样可以确保正确解析GPS数据。
2. 在displayInfo()函数中,可以添加判断语句来检测GPS模块是否定位成功,如果没有定位成功,可以输出相应的提示信息。
3. 在lastLat和lastLng变量的定义中,可以将它们初始化为一个无效的数值,以便在第一次读取GPS数据时,可以正确更新屏幕上的经纬度信息。
改进后的代码如下:
```
#include <SoftwareSerial.h>
#include <TinyGPS.h>
#include <LiquidCrystal.h>
#define RXPin 4
#define TXPin 3
#define RS 8
#define EN 9
#define D4 4
#define D5 5
#define D6 6
#define D7 7
SoftwareSerial gpsSerial(RXPin, TXPin);
TinyGPS gps;
LiquidCrystal lcd(RS, EN, D4, D5, D6, D7);
float lastLat = -999.0;
float lastLng = -999.0;
void setup() {
gpsSerial.begin(9600);
gpsSerial.println("$PMTK251,9600*17"); // 设置GPS模块的波特率为9600
lcd.begin(16, 2);
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GPS Test");
}
void loop() {
while (gpsSerial.available()) {
if (gps.encode(gpsSerial.read())) {
displayInfo();
}
}
}
void displayInfo() {
if (gps.location.isValid()) {
float lat = gps.location.lat();
float lng = gps.location.lng();
if (lat != lastLat || lng != lastLng) {
lastLat = lat;
lastLng = lng;
lcd.setCursor(0, 0);
lcd.print("Lat: ");
lcd.print(lat, 8);
lcd.setCursor(0, 1);
lcd.print("Lng: ");
lcd.print(lng, 8);
}
} else {
lcd.setCursor(0, 0);
lcd.print("GPS not located");
lcd.setCursor(0, 1);
lcd.print("Waiting for signal");
}
}
```
希望这些改进能够使你的代码更加完善。
阅读全文