The solution is to remove delay() and instead track elapsed time using millis() so the rest of loop() can keep doing useful things. It is a common pitfall. There is even an example in the IDE - BlinkWithoutDelay (File->examples->02.digital->BlinkWithoutDelay)
There is also a nice tutorial about how to break your code up to do small chunks at a time: several things at the same time