Fixed GPS -> Working

This commit is contained in:
Ano-sys
2025-07-26 11:40:50 +02:00
parent 2945c89894
commit 94402e106c
+38 -14
View File
@@ -3,7 +3,6 @@
#include <Wire.h> #include <Wire.h>
#include <Adafruit_GFX.h> #include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h> #include <Adafruit_SSD1306.h>
#include <SoftwareSerial.h>
#include <TinyGPS++.h> #include <TinyGPS++.h>
@@ -21,8 +20,8 @@
#define LORA_FREQ 868E6 #define LORA_FREQ 868E6
// GPS Settings // GPS Settings
#define _RX_GPS 23 #define _RX_GPS 25
#define _TX_GPS 22 #define _TX_GPS 4
#define _BAUDRATE_GPS 9600 #define _BAUDRATE_GPS 9600
// OLED Settings // OLED Settings
@@ -31,7 +30,6 @@
#define OLED_RESET -1 #define OLED_RESET -1
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
SoftwareSerial gps_serial(_RX_GPS, _TX_GPS);
TinyGPSPlus gps; TinyGPSPlus gps;
void sendMessage(const String& msg) { void sendMessage(const String& msg) {
@@ -47,7 +45,7 @@ bool waitForPacket(unsigned long timeout_ms) {
unsigned long t0 = millis(); unsigned long t0 = millis();
while (millis() - t0 < timeout_ms) { while (millis() - t0 < timeout_ms) {
if (LoRa.parsePacket()) return true; if (LoRa.parsePacket()) return true;
delay(5); vTaskDelay(pdMS_TO_TICKS(5));;
} }
return false; // Timeout return false; // Timeout
} }
@@ -103,15 +101,33 @@ void showOnOLED(const String& line1, const String& line2 = "", const String& lin
display.display(); display.display();
} }
void SerialPrintGPS(){
Serial.print("LAT: ");
Serial.println(gps.location.lat(), 6);
Serial.print("LONG: ");
Serial.println(gps.location.lng(), 6);
Serial.print("SPEED (km/h) = ");
Serial.println(gps.speed.kmph());
Serial.print("ALT (min)= ");
Serial.println(gps.altitude.meters());
Serial.print("HDOP = ");
Serial.println(gps.hdop.value() / 100.0);
Serial.print("Satellites = ");
Serial.println(gps.satellites.value());
Serial.print("Time in UTC: ");
Serial.println(String(gps.date.year()) + "/" + String(gps.date.month()) + "/" + String(gps.date.day()) + "," + String(gps.time.hour()) + ":" + String(gps.time.minute()) + ":" + String(gps.time.second()));
Serial.println("");
}
void setup() { void setup() {
Serial.begin(115200); Serial.begin(115200);
gps_serial.begin(_BAUDRATE_GPS); Serial2.begin(_BAUDRATE_GPS, SERIAL_8N1, _RX_GPS, _TX_GPS);
// OLED init // OLED init
Wire.begin(); // SDA/SCL Default Wire.begin(); // SDA/SCL Default
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("OLED init fehlgeschlagen"); Serial.println("OLED init fehlgeschlagen");
while (1) delay(1000); while (1) vTaskDelay(pdMS_TO_TICKS(1000));;
} }
showOnOLED("LoRa OLED Init", "Bitte warten..."); showOnOLED("LoRa OLED Init", "Bitte warten...");
@@ -121,18 +137,27 @@ void setup() {
if (!LoRa.begin(LORA_FREQ)) { if (!LoRa.begin(LORA_FREQ)) {
Serial.println("Konnte LoRa nicht initialisieren!"); Serial.println("Konnte LoRa nicht initialisieren!");
showOnOLED("LoRa Init fehl", "Neustart nötig"); showOnOLED("LoRa Init fehl", "Neustart nötig");
while (1) delay(1000); while (1) vTaskDelay(pdMS_TO_TICKS(1000));;
} }
LoRa.enableCrc(); LoRa.enableCrc();
showOnOLED("LoRa bereit", "Creator:", "Timo Niemann"); showOnOLED("LoRa bereit", "Creator:", "Timo Niemann");
} }
void loop() { void loop() {
if(gps_serial.available()){ static size_t start = millis();
gps.encode(gps_serial.read()); if(Serial2.available()){
size_t while_break = millis();
while(!Serial2.available() && millis() - while_break < 1000) vTaskDelay(pdMS_TO_TICKS(10));
gps.encode(Serial2.read());
SerialPrintGPS();
if(gps.location.isUpdated()){ if(gps.location.isUpdated()){
Serial.println("GPS Update!"); Serial.println("GPS Update!");
} }
start = millis();
} }
if (waitForPacket(10)) { if (waitForPacket(10)) {
@@ -147,15 +172,14 @@ void loop() {
Serial.println("Empfangen: " + cmd); Serial.println("Empfangen: " + cmd);
showOnOLED("Empfangen von:", "ID " + String(snd), "Cmd: " + cmd); showOnOLED("Empfangen von:", "ID " + String(snd), "Cmd: " + cmd);
String lat_str = "LAT: " + String(gps.location.lat()); String lat_str = "LAT: " + String(gps.location.lat(), 6);
String lng_str = "LON: " + String(gps.location.lng()); String lng_str = "LON: " + String(gps.location.lng(), 6);
String satellites = "Satelliten: " + String(gps.satellites.value()); String satellites = "Satelliten: " + String(gps.satellites.value());
Serial.println("Sende GPS:\n" + lat_str + "\n" + lng_str); Serial.println("Sende GPS:\n" + lat_str + "\n" + lng_str);
showOnOLED("Sende GPS Koords:", lat_str, lng_str, satellites); showOnOLED("Sende GPS Koords:", lat_str, lng_str, satellites);
sendMessage(lat_str + "\n\n" + lng_str + "\n\n" + satellites); sendMessage(lat_str + "\n\n" + lng_str + "\n\n" + satellites);
delay(1000);
} }
} }
vTaskDelay(pdMS_TO_TICKS(10));
} }