Problema con Software Serial

Buenas, estoy intentando utilizar un gps y un modulo Lora para el envio de datos a un gateway. El codigo que estoy implementando funciona perfectamente hasta que inicio el software serial del Lora, cabe aclarar que tanto el Gps como el Lora los estoy monitoreando por puerto virtual. Los datos del gps los puedo obtener siempre y cuando no inicie el puerto del Lora pero al momento en que inicio el puerto del Lora, no logro obtener los datos del gps.

#include <SoftwareSerial.h>//incluimos SoftwareSerial
#include <TinyGPS.h>//incluimos TinyGPS

TinyGPS gps;//Declaramos el objeto gps
SoftwareSerial serialgps(9,3); //Declaramos el pin 4 Tx y 3 Rx

SoftwareSerial LORA(10,11); // RX, TX
char puerto;
//Declaramos la variables para la obtención de datos
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long chars;
unsigned short sentences, failed_checksum;
String Lat, Lon; 
void setup()
{

  Serial.begin(9600);//Iniciamos el puerto serie
  serialgps.begin(9600);//Iniciamos el puerto serie del gps
  LORA.begin(9600);
  //Imprimimos:
  //LORA.begin(9600);
  Serial.println("");
  Serial.println("GPS GY-GPS6MV2 Leantec");
  Serial.println(" ---Buscando senal--- ");
  Serial.println("");
}

void loop(){
  while (serialgps.available()>0)
  {
    int c = serialgps.read();
    if (gps.encode(c))
    {
      float latitude, longitude;
      gps.f_get_position(&latitude, &longitude);
      Serial.print("Latitud/Longitud: ");
      Serial.print(latitude, 5);
      Serial.print(", ");
      Serial.println(longitude, 5);
      gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths);
      Serial.print("Fecha: "); Serial.print(day, DEC); Serial.print("/");
      Serial.print(month, DEC); Serial.print("/"); Serial.print(year);
      Serial.print(" Hora: "); Serial.print(hour, DEC); Serial.print(":");
      Serial.print(minute, DEC); Serial.print(":"); Serial.print(second, DEC);
      Serial.print("."); Serial.println(hundredths, DEC);
      Serial.print("Altitud (metros): "); Serial.println(gps.f_altitude());
      Serial.print("Rumbo (grados): "); Serial.println(gps.f_course());
      Serial.print("Velocidad(kmph): "); Serial.println(gps.f_speed_kmph());
      Serial.print("Satelites: "); Serial.println(gps.satellites());
      Serial.println();
      gps.stats(&chars, &sentences, &failed_checksum);
//      Lat=String(latitude);
//      Lon=String(longitude);
      //LORA.println("AT+MSG=" +Lat + Lon);
      //delay(7000);
    }
  }
}

Eso esta ampliamente documentado Jhony9625, tu problema es el de suponer que SoftwareSerial te da todos los puertos Virtuales que necesites a ningún costo. Como todo tiene un costo en este mundo, cuando usas una instancia SoftwareSerial, la otra es ignorada.

Debes decidir si sacrificas el HardwareSerial y te quedas sin Monitor Serial o si usas un MEGA para tu tarea o si sigues con lo que tienes.

Veamos... SoftwaSerial es una gran solución pero usa interrupciones dedicadas en los pines que uno elige y esto entonces tiene una prioridad.
Traducido: si veo algo que llega por un puerto, no puedo ver otra cosa que llegue al mismo tiempo por otro y entonces pierdo bytes.
De hecho hay un ejemplo en la librería para el uso de dos puertos series virtuales.
Mira como lo usan en ese caso, existe un listen() que permite escuchar una instancia (y sirve para switchear entre ellas) o sea supongamos, escucho el GPS pero no puedo prestar atención al LORA, de hecho lo ignora.

Entonces tenés que que organizar las comunicaciones para que respondan cuando estas atento o de lo contrario perderás datos.

Hola surbyte, si supuse que el problema provenía de la utilización de los 2 puertos series virtuales, sin embargo, no sabía qué solución darle pero ya buscaré información sobre el listen() para ver si logro solucionarlo.

Por otro lado no me es posible utilizar un mega porque los requerimientos son que debe ser lo mas pequeño posible el dispositivo y colocar una placa tan grande me sería muy complicado.

Muchas gracias por la información.

Bien, entonces intenta manejar las comunicaciones de otro modo, digamos a petición tuya.