Consider using the F macro to print also inside loop()
This may fail when micros() overflows or rolls over to 0.
Try
while(4000 > micros()-zero_timer);
instead. There is plenty of information about this, such as in https://www.norwegiancreations.com/2018/10/arduino-tutorial-avoiding-the-overflow-issue-when-using-millis-and-micros/
And remember that what Serial.print() does is to send characters to the UART buffer that takes them one by one at the baud rate you chose. It does not wait for the output to be actually printed. If your process is fast enough the UART buffer fills up and the MCU will have wait for it to have enough room for additional characters and then continue. So if timing is an issue you can space the prints by a specific, controlled interval. The way you are doing it does not guarantee there will be no delays.