jraskell:
You should do some more research. I don't believe there is a mechanical relay in existence that operates fast enough to make digitalWrite()'s speed a problem. Most take on the order of 10-20ms to switch. There may be some fast ones out there that could take as little as 1-2ms, but that's probably about as fast as you're going to get without switching to solid state relays, and that's still around several hundred to a thousand times slower than digitalWrite().
I'm not sure how you got there, so let me try to explain better than I previously did how/why I started looking around and calling digitalwrite() slow.
I have found that if I use code similar to this:
digitalwrite(2, high)
digitalwrite(3, low)
The second line does not execute/activate/what-have-you. The end result, ie the symptom, is that the relay and LED tied to that pin to not close (it is active low) and turn on, respectively.
I don't know why that is, it seems kid of weird/silly to me, as I've seen code where people do something like that and it seems to work, so I don't know what is going on, but I tried digitalwritefast() and that fixed it in most cases. However, in the case of:
if (millis() > (whatTimeIsIt + idleMotorKill) ){
//digitalWriteFast(3,HIGH);
//digitalWriteFast(1,LOW);
engineKill(); // digitalWrite(Relay_1, RELAY_ON);
brakesEngage();
} // test millis()
I see a similar error condition to using digitalwrite(): the second digitalwritefast() command in the engineKill() function does not appear to execute. However, the next digitalwritefast() in the brakesEngage() function called does activate as I expect. I suspect this might have to do with the "slow-down" or compatiblity, or inherent safeness of the digitalwritefast() library, and for whatever reason digitalwritefast() is going back to digitalwrite() "speeds", assuming it's even a speed issue. If digitalwrite() is fast enough for most use, then there is something else going on here that I don't understand.
I would like to know why/how this is the case so I can work around it, or better understand how to work with Arduino (this is still my first arduino project by the way) so I don't run into this sort of thing.