Millis() not working

you still have a limit (much higher) as the timeout * multiplier is and unsigned long that you try to fit into a signed long because the way you coded that for loop, you need to be able to deal with negative numbers for usDelay > timeout to be effective.