GPS code integrated with other functions...

The loop() function is called in an infinite loop. When I see someone adding an infinite loop inside loop(), warning bells go off.

The call to systemInit() belongs in setup(), not loop. Then, you wouldn't need the infinite loop in loop().

The TinyGPS library handles accumulating serial data from the GPS, and returning true or false, when the TinyGPS instance has a complete sentence that can be parsed. It does not require a blocking call to read a complete sentence, as your code does. Why are you not using it?

Where is the code for function1(), function2(), etc.?