#include <TinyGPSPlus.h>         // GPS data parsing library
#include <HardwareSerial.h>      // For using additional serial ports
#include <LoRa.h>                // LoRa communication library

TinyGPSPlus gps;
HardwareSerial GPSserial(1);     // Use Serial1 for GPS (RX=9, TX=10)

void setup() {
  Serial.begin(115200);          // Debug serial monitor
  GPSserial.begin(9600, SERIAL_8N1, 9, 10);  // RX=9, TX=10 for GPS module

  // Initialize LoRa
  LoRa.setPins(8, 4, 3);         // NSS=8, RST=4, DIO0=3
  if (!LoRa.begin(868E6)) {      // 868 MHz frequency
    Serial.println("LoRa init failed. Check connections.");
    while (1);
  }

  LoRa.setTxPower(14);           // Set transmission power
  Serial.println("Setup complete. Waiting for GPS...");
}

void loop() {
  while (GPSserial.available() > 0) {
    gps.encode(GPSserial.read());   // Read data from GPS
  }

  if (gps.location.isUpdated()) {   // New GPS data received
    double lat = gps.location.lat();
    double lng = gps.location.lng();

    String message = "Location: " + String(lat, 6) + ", " + String(lng, 6);
    Serial.println("Sending: " + message);

    LoRa.beginPacket();             // Start LoRa packet
    LoRa.print(message);            // Send GPS location
    LoRa.endPacket();               // Finish and transmit
  }

 delay(3000);  // Wait 3 seconds before checking again
}
