Arduino UNO + SIM800L (SMS) + NEO M6 (GPS) = Serial issues

Hi everyone,

I'm trying to send my GPS location by SMS, using an Arduino Uno, with SIM800L at Serial (7,8) and NEO 6M at Serial (10,11).

The code is below:

#include <Sim800l.h>
#include <SoftwareSerial.h>
#include <TinyGPS.h>

SoftwareSerial GPS(5, 6); // RX, TX (GPS)
SoftwareSerial SMS(7, 8); // RX, TX (SMS)
TinyGPS gps1;
Sim800l Sim800l;

char latBuffer[20];
char longBuffer[20];
char fullBuffer[100];

void setup()
{
  Sim800l.begin();
  GPS.begin(9600);
  delay(1000);
  SMS.begin(9600);
  Serial.begin(9600);

  Serial.println("Waiting...");
  GPS.listen();
  delay(1000);
}

void loop()
{
  bool rec = false;
  bool rec2 = false;

  while (GPS.available() > 0)
  {
    rec = gps1.encode(GPS.read());
    break;
  }

  if (rec)
  {
    Serial.println("----------------------------------------");

    //Latitude e Longitude
    float latitude, longitude;
    unsigned long age;
    gps1.f_get_position(&latitude, &longitude, &age);
    float lat = latitude;
    float lon = longitude;

    if (latitude != TinyGPS::GPS_INVALID_F_ANGLE)
    {

      Serial.print("Latitude: ");
      Serial.println(lat);
    }

    if (longitude != TinyGPS::GPS_INVALID_F_ANGLE)
    {
      Serial.print("Longitude: ");
      Serial.println(lon);
    }

    dtostrf(lat, 0, 4, latBuffer);
    dtostrf(lon, 0, 4, longBuffer);
    sprintf_P(fullBuffer, PSTR("Lat: %s; Lon: %s"), latBuffer, longBuffer);
    Serial.println(fullBuffer); //show in Serial

    GPS.end();
    delay(1000);
    SMS.listen();
    delay(100);

    while (SMS.available() > 0)
    {
      Sim800l.sendSms("+XXXXXXXXXX", fullBuffer);
      delay(1000);
      GPS.begin(9600);
      delay(1000);
      GPS.listen();
      delay(1000);
    }
  }
}

What I get on Serial:

Waiting...
----------------------------------------
Latitude: -21.98
Longitude: -47.88
Lat: -21.9841; Lon: -47.8832

And it stops.

I tried everything I've read in web, like ".listen()" commands, "delay()", but, it seems that SMS Serial is never available. I edited the SIM800L library to set pins 6 and 7 for RX and TX. It worked when it's alone, but when I attach the GPS shield, it stops.

Did someone have the same problem?

Thank you!