Need help making digitalRead() read reed switch only once per wheel rotation.

I am creating a bike speedometer with a magnet door sensor. The magnet rotates with the wheel and every wheel rotation, the magnet comes within range of the reed switch and changes reedState from 1 to 0. The program finds the time between each rotation using millis() millis() - Arduino Reference

and divides the circumference of the wheel by that millisecond value to find velocity. (Velocity = Distance/Time)

I am receiving inaccurate speed readings. I believe it has to do with the speed at which the Arduino checks digitalRead().

Here is some simple code to print in the serial monitor the state of the reed switch. When I touch the magnet over the reed switch even for a very brief moment, the serial monitor prints out the number "0" about 20 times. I need the state of the reed switch to be "0" only once every rotation. The calculation to find speed uses the value of time between each 0 digitalRead() reads representing each wheel rotation, so the calculation for speed would be messed up if the the Arduino read "0" several times when the wheel has only physically moved one rotation.

What would be the most logical way to alter this simple reedState code so that reedState is only 0 one time every time the magnet hovers over it until the next time the magnet hovers over it.

By the Way

when magnet is hovered reedState = 0
when magnet is not hovered reedState = 1

It might make sense to make the code set reedState to 0 only once every rotation by setting it to 0 every time reedState changes from 1 to 0, and then setting it back to 1 again, to wait for the next rotation.

int reedPin = 3;    
int reedState; 

void setup()        
{
 Serial.begin(9600);          
 pinMode(reedPin, INPUT);    // sets the digital pin as input to read switch
 digitalWrite(reedPin, HIGH);  // Turn on the internal pull-up resistor
}


void loop()                     // run over and over again
{
 
 
 reedState = digitalRead(reedPin);
 Serial.println(reedState);  
 
}

Also,
Your reed switch is connected from the input pin and ground?
Reed switches will bounce just as a push button switch can bounce.
Read this:

After digitalRead() detects the magnet wait a short period (perhaps the time for a quarter revolution of the wheel at the highest speed) before making another attempt to detect the magnet. See how to use millis() to manage timing in Several Things at a Time

...R