ADAFRUIT GPS

I think the problem is that your code is blocking (pulseIn(), for example) and you are not using interrupts to read the GPS.

Try setting usingInterrupt true:

// this keeps track of whether we're using the interrupt
// off by default!
boolean usingInterrupt = false;