SD card data acquisition

Walk through your program step by step, perhaps using a pencil and paper to figure out where you are. The only part of loop which meets the millis() based truncated "for" loop criteria is up to the first call of dataLog().

You have basically duplicated the loop structure within dataLog() with the "for" loops which are the equivalent of "while" loops. Compare the code in dataLog() post#7 and post #9.

The first time you call dataLog() the millis() based "for" loops within that function use up all the time, and no code in loop() runs after the return to loop() from the first call to dataLog().

I think that you need to remove the timing from dataLog(), and just use it to write SD and serial output. Let the millis() based "for" loops in loop() control the timing.

The use of the truncated "for" loops for timing is very idiosyncratic. Why are you not using the more common "while" loop?

I'm not sure where your program is headed, but the blocking architecture may prove to be a problem down the road. Restructuring the program at this point is probably not worth doing if you were happy with the running version in #7 and its just a matter of working in the Serial and SD logging.