The thing i want is, after the delay, i want it to check to see if the alternator pin is low (car is not running), if it is, then fire ignition relay until the alternator pin goes high, i.e, the car has started. i could just add a delay instead of having it sense that the car has started, but on cold mornings, it takes a little bit longer for the car to start.
No, the thing is you must, MUST, ABSOLUTELY MUST get rid of the delay()s. Nothing else happens during a delay.
Te blink without delay example bears studying.
You need to create a state machine. The car is on one state at a time - starting, running, waiting for start command, etc. There are some external actions that cause a state change (the start command arrives, for instance) and some internal events that cause a state change (the alternator starts outputting current, for instance or 5 seconds has gone by).
There are actions to be performed when the state changes (open this relay, close that relay, send a response that the car started/failed to start, etc.)
You need to keep track of what state you are in, and determine, on each pass through loop, whether it is necessary to change states. If so, perform any associated actions, and update the state variable(s).