X27 stepper motor

[code]

 #include "SwitecX25.h"

 
 #include "FreqMeasure.h"
 
const int UpdateInterval = 100; 
const double StepsPerDegree = 3.0;  
 const unsigned int MaxMotorRotation = 315; 
 const unsigned int MaxMotorSteps = MaxMotorRotation * StepsPerDegree;
 const double PulsesPerMile = 5764.0; 
 const double SecondsPerHour = 3600.0;
 
 
 const double SpeedoDegreesPerMPH = 180.0 / 87.0;  
 
 unsigned long PreviousMillis = 0;   
 double MinMotorStep;  
 
 SwitecX25 Motor(MaxMotorSteps, 4,5,6,7);
 void setup(void) 
 {
 
  pinMode(8, INPUT_PULLUP);
 
  Motor.zero(); 
  Motor.setPosition(744);


  
  MinMotorStep = PulseToStep(2 * (UpdateInterval / 1000.0) * F_CPU);
 
  FreqMeasure.begin(); // Start freqmeasure library
 }
 
 double sum=0;
 int count=0;
 double avgPulseLength=0;
 unsigned int motorStep = 0;
 int noInputCount = 0;
 
 void loop() {
  unsigned long currentMillis = millis();
 
  // Update the motor position every UpdateInterval milliseconds
  if (currentMillis - PreviousMillis >= UpdateInterval) {
   PreviousMillis = currentMillis;   
    count = 0;
    sum = 0;
 
    // Read all the pulses available so we can average them
    while (FreqMeasure.available()) {
      sum += FreqMeasure.read();
      count++;
    }
     if (count) {
     
    avgPulseLength = sum / count;
      motorStep = PulseToStep(avgPulseLength);
      noInputCount = 0;
    } 
   else if (++noInputCount == 2)  // force speed to zero after two missed intervals
     motorStep = 0;

    // Ignore speeds below the the two missed intervals speed so the motor doesn't jump
    if (motorStep <= MinMotorStep) 
      motorStep = 0;
 
    Motor.setPosition(motorStep); 
  }
 
  
  Motor.update();
 }
 

 
 unsigned int PulseToStep(double pulseLength)
 {
  return (unsigned int)((F_CPU * SecondsPerHour * SpeedoDegreesPerMPH * StepsPerDegree) / (PulsesPerMile * pulseLength));
 }
[/code]