I am getting good results using pulseIn, but at very low frequencies the program runs too slowly as the default timeout is one second. I tried using a value in the timeout field, but this only works for values below 200000 us. When I try 250000 the program hangs which doesnt seem right.
Wait! I just realised I am making a newbie data type error (I used to be a Basic programmer) - I used an int type for the timeout variable. But isn't that odd because int upper limit is +32767, yet it seems to work when the variable is set to 200000!
I will go and change the int to unsigned long and try that.