You can use the technique in the Blink Without Delay example sketch to manage timing. I wrote a more extended example in the first post of this Thread.
Personally I would take marks off you for having all that junk within loop() rather than in relevant functions. You will see in my example that there is very little in loop() and, hopefully, the intent of everything is clear.
...R