Inclusion of multiplexer seems to interfere with GPS functionality

I am trying to write a sketch that measures distance from 4 VL53L0X’s, read coordinates from a GPS, and log everything on an SD card. I am successfully able to log the distance measurements, but my GPS readings seem to fail when I load a sketch that acknowledges the presence of a multiplexer. I have a schematic, a working GPS sketch with no multiplexer, and a failing GPS sketch which includes the multiplexer.

First, the schematic. I am using an Arduino MEGA 2560 with an Adafruit Datalogging Shield to handle the SD writing / time keeping. I am running the 4 VL53L0X’s off of a TCA9548A multiplexer using TCA 0, TCA 1, TCA 2, and TCA 3. I was not able to find a fritzing shape for the GPS, so pardon the poor image quality. I am using a UBlox Neo-6M GY-GPS6MV2 Flight Controller Board which connects to 5V, GND, and ports 10 and 11 for TX/RX.

The GPS-only code which works with the schematic above:

#include "TinyGPS++.h"
#include "SoftwareSerial.h"

SoftwareSerial serial_connection(10, 11); //RX=pin 3, TX=pin 4
TinyGPSPlus gps;

void setup()
{
  Serial.begin(9600);
  serial_connection.begin(9600);
  Serial.println("GPS Start");
}

void loop()
{
  while(serial_connection.available())
  {
    gps.encode(serial_connection.read());
  }
  if(gps.location.isUpdated())
  {
    Serial.println("Satellite Count:");
    Serial.println(gps.satellites.value());
    Serial.println("Latitude:");
    Serial.println(gps.location.lat(), 6);
    Serial.println("Longitude:");
    Serial.println(gps.location.lng(), 6);
    Serial.println("Speed MPH:");
    Serial.println(gps.speed.mph());
    Serial.println("Altitude Feet:");
    Serial.println(gps.altitude.feet());
    Serial.println("");
  }  
}

Running this spits out successive GPS messages. Here’s a sample.

Next, my code that initializes the VL53L0X and takes GPS samples. Note that I am not even recording any distances / storing them at this point - I am trying to take it one step at a time and the mere inclusion of multiplexing setup + GPS is failing:

// Based on code c. 2009, Tod E. Kurt, http://todbot.com/blog/

#include "Wire.h"
extern "C" { 
#include "utility/twi.h"
}
#include "Adafruit_VL53L0X.h"

Adafruit_VL53L0X lox = Adafruit_VL53L0X();

#include "TinyGPS++.h"
#include "SoftwareSerial.h"

// include the SD library:
#include <SPI.h>
#include <SD.h>

// SD declare
File myFile;

#define TCAADDR 0x70

float dist_0, dist_1, dist_2, dist_3, sats, latitude, longitude, speed_mph;
String csv_delim = ", ";

// GPS declares
SoftwareSerial serial_connection(10, 11);
TinyGPSPlus gps;

void tcaselect(uint8_t i) {
  if (i > 7) return;
 
  Wire.beginTransmission(TCAADDR);
  Wire.write(1 << i);
  Wire.endTransmission();  
}
// standard Arduino setup()
void setup()
{
    while (!Serial);
    delay(1000);
    Wire.begin();
    Serial.begin(9600);

    serial_connection.begin(9600);
    Serial.println("GPS Start");

    Serial.print("Start.");
    tcaselect(0);
    if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X 0"));
    while(1);
    }

    tcaselect(1);
    if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X 1"));
    while(1);
    }

    tcaselect(2);
    if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X 2"));
    while(1);
    }

    tcaselect(3);
    if (!lox.begin()) {
    Serial.println(F("Failed to boot VL53L0X 3"));
    while(1);
    }
    
    Serial.println("End VL53L0X Setup");

    if (!SD.begin(10)) 
    {
      Serial.print("SD Init failed!");
      return;
    }

    Serial.println("End SD Setup. Starting Code...");
}

void loop() 
{
  while(serial_connection.available())
  {
    gps.encode(serial_connection.read());
  }
  if(gps.location.isUpdated())
  {
    Serial.println("Satellite Count:");
    Serial.println(gps.satellites.value());
    Serial.println("Latitude:");
    Serial.println(gps.location.lat(), 6);
    Serial.println("Longitude:");
    Serial.println(gps.location.lng(), 6);
    Serial.println("Speed MPH:");
    Serial.println(gps.speed.mph());
    Serial.println("Altitude Feet:");
    Serial.println(gps.altitude.feet());
    Serial.println("");
  }  
 
}

Despite my GPS flashing (suggesting packets are being received), my Serial Monitor just sits stuck after initialization. Note that I am able to successfully boot/find the VL53L0X sensors.

Is there any reason why initializing the multiplexer would “interfere” with using the GPS on pins 10 and 11? I’m quite new to Arduino in general, especially using I2C and SCL/SDA. I would appreciate any help clarifying why I am experiencing this!

An SD card uses SPI, and SPI uses pins 10 & 11, so change the pins you are using for the software serial.