title: How to obtain a more accurate value for RPM
body: <p>I am trying to build a rev counter using a Hall effect sensor and an Arduino Uno. I'm using Arduino software and I have wrote the following code:</p>
  
  <pre class="lang-cpp prettyprint-override"><code>#include &lt;LiquidCrystal.h&gt;
  
  int sensorPin = 2; // hall effect
  float revs;
  float rpm;
  volatile byte rpmcount;
  long previousmicros = 0;
  long interval = 500000;
  LiquidCrystal lcd(12, 11, 6, 5, 4, 3);
  
  
  void setup() 
  {
    // setup serial - diagnostics - port
    Serial.begin(115200);
    // setup pins
    pinMode(sensorPin, INPUT);
    // setup interrupt
    attachInterrupt(0, RPM, RISING);
  }
  
  void RPM()
  {
    rpmcount++;
  } 
  
  void loop() 
  {
    unsigned long currentmicros = micros();
    int sensorValue = digitalRead(sensorPin);        // sensor value is read
    if (currentmicros - previousmicros &gt; interval)  
    {
      previousmicros = currentmicros;
  
      detachInterrupt(0);
      revs=10.0/rpmcount;
      rpm =600.0/revs;
      Serial.print("rpmcount : ");
      Serial.print(rpmcount);
      Serial.print("  rpm : ");
      Serial.println(rpm);
      lcd.clear();
      lcd.begin(16, 2);
      lcd.print("RPM = ");
      lcd.setCursor(6,0);
      lcd.print(rpm,0);
      rpmcount=0;
      attachInterrupt(0, RPM, RISING);
    }
  }
  </code></pre>
  
  <p>This works and measures the RPM correctly however the value is always a factor of 60. How can I change this so that it will measure the RPM more accurately, to say +-5 RPM? I tried playing about with my <code>revs</code> and <code>rpm</code> formulas but had little success.</p>