You could use interrupt driven coding to get very accurate timing. 8)
Attach your photo eyes to the interrupt inputs. Use the micros() function to get times.
pseudo code kind of:
INT0 :
micros() > stack.
Count+
INT1:
if Count > 0
Micros() > endTime
Pop stack > startTime
Set EventFlag
Count -
Main:
If EventFlag
do calculations
clear flag
Other stuff like display
Pushing start times onto a stack would allow rapid drops, so long as your main loop is able to complete faster then a coin can get thru.
(Lots of error stuff missing here, but you should get the idea.)
Notes:
Most Arduino boards have two external interrupts: INT0 (on digital pin 2) and INT1 (on digital pin 3).
FUNCTION: attachInterrupt(interrupt, function, mode)
FUNCTION: micros()
Returns the number of microseconds since the Arduino board began running the current program. This number will overflow (go back to zero), after approximately 70 minutes. On 16 MHz Arduino boards (e.g. Duemilanove and Nano), this function has a resolution of four microseconds (i.e. the value returned is always a multiple of four). On 8 MHz Arduino boards (e.g. the LilyPad), this function has a resolution of eight microseconds.
There are 1,000,000 microseconds in a second.
Good Luck
Richard