diff --git a/LoRaSender/LoRaSender.ino b/LoRaSender/LoRaSender.ino index 9a06367..7868eef 100644 --- a/LoRaSender/LoRaSender.ino +++ b/LoRaSender/LoRaSender.ino @@ -3,7 +3,6 @@ #include #include #include -#include #include @@ -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)); }