改进代码 #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); 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() { lcd.clear(); lcd.setCursor(0, 0); lcd.print("Lat: "); lcd.print(gps.location.lat(), 6); lcd.setCursor(0, 1); lcd.print("Lng: "); lcd.print(gps.location.lng(), 6); }
时间: 2023-12-10 15:39:43 浏览: 140
这段代码的主要功能是通过GPS模块获取当前的经纬度信息,并在LCD12864屏幕上显示出来。但是,该代码存在一些可以改进的地方:
1. 在displayInfo()函数中,每次都会清空屏幕并重新设置光标位置,这样会导致闪烁和卡顿。可以考虑只在经纬度信息发生变化时才更新屏幕。
2. 经纬度的小数位数为6,但是在实际应用中,需要更高的精度。可以考虑增加小数位数或者使用其他方式(如UTM坐标)来表示位置信息。
3. 没有对GPS模块的状态进行检查,如果GPS模块没有定位成功,获取到的经纬度信息将是无效的。可以在displayInfo()函数中增加判断,如果GPS模块没有定位成功,则显示“GPS未定位”。
下面是改进后的代码:
```
#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");
}
}
```
改进后的代码中,增加了lastLat和lastLng两个变量来保存上一次显示的经纬度信息,只有当经纬度信息发生变化时才更新屏幕。同时,在displayInfo()函数中增加了对GPS状态的判断,如果GPS未定位成功,则显示“GPS未定位”。经纬度的小数位数也从6位增加到了8位,提高了精度。
阅读全文