Fixed GPS -> Working
This commit is contained in:
+38
-14
@@ -3,7 +3,6 @@
|
||||
#include <Wire.h>
|
||||
#include <Adafruit_GFX.h>
|
||||
#include <Adafruit_SSD1306.h>
|
||||
#include <SoftwareSerial.h>
|
||||
#include <TinyGPS++.h>
|
||||
|
||||
|
||||
@@ -21,8 +20,8 @@
|
||||
#define LORA_FREQ 868E6
|
||||
|
||||
// GPS Settings
|
||||
#define _RX_GPS 23
|
||||
#define _TX_GPS 22
|
||||
#define _RX_GPS 25
|
||||
#define _TX_GPS 4
|
||||
#define _BAUDRATE_GPS 9600
|
||||
|
||||
// OLED Settings
|
||||
@@ -31,7 +30,6 @@
|
||||
#define OLED_RESET -1
|
||||
|
||||
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
|
||||
SoftwareSerial gps_serial(_RX_GPS, _TX_GPS);
|
||||
TinyGPSPlus gps;
|
||||
|
||||
void sendMessage(const String& msg) {
|
||||
@@ -47,7 +45,7 @@ bool waitForPacket(unsigned long timeout_ms) {
|
||||
unsigned long t0 = millis();
|
||||
while (millis() - t0 < timeout_ms) {
|
||||
if (LoRa.parsePacket()) return true;
|
||||
delay(5);
|
||||
vTaskDelay(pdMS_TO_TICKS(5));;
|
||||
}
|
||||
return false; // Timeout
|
||||
}
|
||||
@@ -103,15 +101,33 @@ void showOnOLED(const String& line1, const String& line2 = "", const String& lin
|
||||
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() {
|
||||
Serial.begin(115200);
|
||||
gps_serial.begin(_BAUDRATE_GPS);
|
||||
Serial2.begin(_BAUDRATE_GPS, SERIAL_8N1, _RX_GPS, _TX_GPS);
|
||||
|
||||
// OLED init
|
||||
Wire.begin(); // SDA/SCL Default
|
||||
if (!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
|
||||
Serial.println("OLED init fehlgeschlagen");
|
||||
while (1) delay(1000);
|
||||
while (1) vTaskDelay(pdMS_TO_TICKS(1000));;
|
||||
}
|
||||
showOnOLED("LoRa OLED Init", "Bitte warten...");
|
||||
|
||||
@@ -121,18 +137,27 @@ void setup() {
|
||||
if (!LoRa.begin(LORA_FREQ)) {
|
||||
Serial.println("Konnte LoRa nicht initialisieren!");
|
||||
showOnOLED("LoRa Init fehl", "Neustart nötig");
|
||||
while (1) delay(1000);
|
||||
while (1) vTaskDelay(pdMS_TO_TICKS(1000));;
|
||||
}
|
||||
LoRa.enableCrc();
|
||||
showOnOLED("LoRa bereit", "Creator:", "Timo Niemann");
|
||||
}
|
||||
|
||||
void loop() {
|
||||
if(gps_serial.available()){
|
||||
gps.encode(gps_serial.read());
|
||||
static size_t start = millis();
|
||||
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()){
|
||||
Serial.println("GPS Update!");
|
||||
}
|
||||
|
||||
start = millis();
|
||||
}
|
||||
|
||||
if (waitForPacket(10)) {
|
||||
@@ -147,15 +172,14 @@ void loop() {
|
||||
Serial.println("Empfangen: " + cmd);
|
||||
showOnOLED("Empfangen von:", "ID " + String(snd), "Cmd: " + cmd);
|
||||
|
||||
String lat_str = "LAT: " + String(gps.location.lat());
|
||||
String lng_str = "LON: " + String(gps.location.lng());
|
||||
String lat_str = "LAT: " + String(gps.location.lat(), 6);
|
||||
String lng_str = "LON: " + String(gps.location.lng(), 6);
|
||||
String satellites = "Satelliten: " + String(gps.satellites.value());
|
||||
Serial.println("Sende GPS:\n" + lat_str + "\n" + lng_str);
|
||||
showOnOLED("Sende GPS Koords:", lat_str, lng_str, satellites);
|
||||
|
||||
sendMessage(lat_str + "\n\n" + lng_str + "\n\n" + satellites);
|
||||
|
||||
delay(1000);
|
||||
}
|
||||
}
|
||||
vTaskDelay(pdMS_TO_TICKS(10));
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user