nan output

Hi

I am trying to output the speed for my motor.
When my motor runs at a higher speed , I get the Speed output as 'inf' once and then continuous 'nan' after around 8000 rpm .

Could you tell me why the Serial is outputting 'nan ' instead of a proper value please.

Please find my code below :

//Arduino master device

#include <Wire.h>

#define TEN (float)10

int sectorFromHall(int hall1, int hall2, int hall3);
int rawHall1 =0 ;
int rawHall2=0;
int rawHall3 = 0;

int h1=3;
int h2=4;
int h3=5;
int previousSector = 6;
int hallSector = 6;
unsigned long time1 = 0;
unsigned long time2 = 0;
float MotorTime = 0;
float motorSpeed = 0.0;
int t=0;
int debugCounter = 0;
float speedFltrd = 0.0;


void setup()
{
 Serial.begin(38400);
 pinMode(h1, INPUT); 
 pinMode(h2, INPUT); 
 pinMode(h3, INPUT); 
 
 digitalWrite(h1, HIGH);
 digitalWrite(h2, HIGH);
 digitalWrite(h3, HIGH);

  Wire.begin(); // join i2c bus (address optional for master)
    rawHall1=digitalRead(h1);
  rawHall2=digitalRead(h2);
  rawHall3=digitalRead(h3);
  hallSector = sectorFromHall(rawHall1, rawHall2, rawHall3); 
  previousSector = hallSector;
  

  delay(500);
   Wire.beginTransmission(80); // transmit to slave device F2837   #0x50 (decimal is 80)
   Wire.write(hallSector);             
   Wire.endTransmission();    // stop transmitting    
}



void loop()
{

  
  previousSector = hallSector;

  rawHall1=digitalRead(h1);
  rawHall2=digitalRead(h2);
  rawHall3=digitalRead(h3);


  if(t==0){ 
          t=1;
          time1 = millis();

          }
  
  hallSector = sectorFromHall(rawHall1, rawHall2, rawHall3);

 
   if(previousSector != hallSector){   
   

          time2 = millis();

           Wire.beginTransmission(80); // transmit to slave device F2837   #0x50 (decimal is 80)
           Wire.write(hallSector);             
           Wire.endTransmission();    // stop transmitting   
   

       
          MotorTime = (((float)(time2 - time1))) * 0.001;  //time in sec
          motorSpeed = TEN / MotorTime; //convert to rpm
    
          speedFltrd += (motorSpeed - speedFltrd) * 0.01;   //0.01 is filter coefficient
          

              Serial.println(speedFltrd);

          t = 0;
          }

 
}


int sectorFromHall(int hall1, int hall2, int hall3)
{
	int sector;

	if ((hall1 == 0) && (hall2 == 1) && (hall3 == 1))
	{ 
		sector = 0;

	}
	else if ((hall1 == 0) && (hall2 == 1) && (hall3 == 0))
	{
		sector = 1;

	}
	else if ((hall1 == 1) && (hall2 == 1) && (hall3 == 0))
	{
		sector = 2;

	}
	else if ((hall1 == 1) && (hall2 == 0) && (hall3 == 0))
	{
		sector = 3;

	}
	else if ((hall1 == 1) && (hall2 == 0) && (hall3 == 1))
	{
		sector = 4;

	}
	else if ((hall1 == 0) && (hall2 == 0) && (hall3 == 1))
	{
		sector = 5;

	}

	else
	{sector = 6;
        }
	return sector;
}

Change millis() to micros() and adjust the corresponding constants - you were dividing
by zero.