改进代码 #include <Adafruit_GPS.h> #include <SoftwareSerial.h> #include <LiquidCrystal.h> #define RXPin 3 #define TXPin 4 #define LCD_RS 7 #define LCD_E 8 #define LCD_D4 9 #define LCD_D5 10 #define LCD_D6 11 #define LCD_D7 12 SoftwareSerial mySerial(RXPin, TXPin); Adafruit_GPS GPS(&mySerial); LiquidCrystal lcd(LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7); void setup() { GPS.begin(9600); GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA); GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ); GPS.sendCommand(PGCMD_ANTENNA); lcd.begin(16, 2); } void loop() { if (GPS.newNMEAreceived()) { GPS.parse(GPS.lastNMEA()); } lcd.clear(); lcd.setCursor(0, 0); lcd.print("Lat: "); lcd.print(GPS.latitude, 4); lcd.print(" Long: "); lcd.print(GPS.longitude, 4); delay(1000); }
时间: 2023-12-10 19:39:30 浏览: 160
Adafruit_GFX_Library_Adafruit_GFX.h_
5星 · 资源好评率100%
这段代码看起来已经很不错了,但是我还是有几点建议可以改进:
1. 将 GPS 相关的常量(如 `PMTK_SET_NMEA_OUTPUT_RMCGGA`)定义为 `const` 或 `#define` 常量,以提高程序的可读性。
2. 在 `setup()` 函数中,将 GPS 的初始化和配置操作单独提取出来,方便代码维护和扩展。
3. 在 `loop()` 函数中,可以添加一些异常处理机制,如检测 GPS 模块是否正常工作,以避免程序出现异常崩溃。
下面是改进后的代码:
```
#include <Adafruit_GPS.h>
#include <SoftwareSerial.h>
#include <LiquidCrystal.h>
#define RXPin 3
#define TXPin 4
#define LCD_RS 7
#define LCD_E 8
#define LCD_D4 9
#define LCD_D5 10
#define LCD_D6 11
#define LCD_D7 12
SoftwareSerial mySerial(RXPin, TXPin);
Adafruit_GPS GPS(&mySerial);
LiquidCrystal lcd(LCD_RS, LCD_E, LCD_D4, LCD_D5, LCD_D6, LCD_D7);
// GPS 相关常量定义
const char PMTK_SET_NMEA_OUTPUT_RMCGGA[] PROGMEM = "$PMTK314,0,1,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0*29\r\n";
const char PMTK_SET_NMEA_UPDATE_1HZ[] PROGMEM = "$PMTK220,1000*1F\r\n";
const char PGCMD_ANTENNA[] PROGMEM = "$PGCMD,33,1*6C\r\n";
void setup() {
// 初始化 GPS
mySerial.begin(9600);
GPS.begin(9600);
GPS.sendCommand(PMTK_SET_NMEA_OUTPUT_RMCGGA);
GPS.sendCommand(PMTK_SET_NMEA_UPDATE_1HZ);
GPS.sendCommand(PGCMD_ANTENNA);
// 初始化 LCD
lcd.begin(16, 2);
}
void loop() {
// 检测 GPS 模块是否正常工作
if (!GPS.fix) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("GPS signal lost!");
return;
}
// 解析 GPS 数据
if (GPS.newNMEAreceived()) {
GPS.parse(GPS.lastNMEA());
}
// 显示 GPS 数据
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Lat: ");
lcd.print(GPS.latitude, 4);
lcd.print(" Long: ");
lcd.print(GPS.longitude, 4);
delay(1000);
}
```
希望这些改进能够对你有所帮助。
阅读全文