user82499: 
Hi!
I require your help regarding a problem I’m encountering.
I am trying to measure wind speed using Hall sensor, Neodymium magnet & below mentioned code. But I only get “0” value for both RPM & KPH values. Can you help me to solve this?
volatile byte revolutions;

unsigned int rpmilli;
float speed;

unsigned long timeold=0 ;

void setup()
{
    Serial.begin(9600);
    attachInterrupt(digitalPinToInterrupt(2), rpm_fun, RISING);

    revolutions = 0;
    rpmilli = 0;
    timeold = 0;
}

void loop()
{
    if (revolutions >= 1) {
         //Update RPM every 20 counts, increase this for better RPM resolution,
         //decrease for faster update

         // calculate the revolutions per milli(second)
         rpmilli = revolutions/(millis()-timeold);

         timeold = millis();
         revolutions = 0;
         // WHEELCIRC = 2 * PI * radius (in meters)
         // speed = rpmilli * WHEELCIRC * “milliseconds per hour” / “meters per kilometer”

         // simplify the equation to reduce the number of floating point operations
         // speed = rpmilli * WHEELCIRC * 3600000 / 1000
         // speed = rpmilli * WHEELCIRC * 3600

         speed = rpmilli 1.288053600;

         Serial.print(“RPM:”);
         Serial.print(rpmilli * 60000 ,DEC);
         Serial.print(" Speed:");
         Serial.print(speed,DEC);
         Serial.println(" kph");
    }
}

void rpm_fun()
{
    revolutions++;
}



user70044: rpmilli = revolutions/(millis()-timeold);

All variables in this line are of type int, so this is an integer division. When the time delta in ms is larger than the number of revolutions it counted, this always returns 0. You need to change this to:
rpmilli = ((float)revolutions)/(millis()-timeold);

and change rpmilli to float.

82499: <p><a href="https://i.stack.imgur.com/gPM83.jpg" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/gPM83.jpg" alt="enter image description here" /></a></p>
<p>Hi!
I require your help regarding a problem I’m encountering.
I am trying to measure wind speed using Hall sensor, Neodymium magnet &amp; below mentioned code. But I only get “0” value for both RPM &amp; KPH values. Can you help me to solve this?</p>
<pre class="lang-cpp prettyprint-override"><code>volatile byte revolutions;

unsigned int rpmilli;
float speed;

unsigned long timeold=0 ;

void setup()
{
    Serial.begin(9600);
    attachInterrupt(digitalPinToInterrupt(2), rpm_fun, RISING);

    revolutions = 0;
    rpmilli = 0;
    timeold = 0;
}

void loop()
{
    if (revolutions &gt;= 1) {
         //Update RPM every 20 counts, increase this for better RPM resolution,
         //decrease for faster update

         // calculate the revolutions per milli(second)
         rpmilli = revolutions/(millis()-timeold);

         timeold = millis();
         revolutions = 0;
         // WHEELCIRC = 2 * PI * radius (in meters)
         // speed = rpmilli * WHEELCIRC * “milliseconds per hour” / “meters per kilometer”

         // simplify the equation to reduce the number of floating point operations
         // speed = rpmilli * WHEELCIRC * 3600000 / 1000
         // speed = rpmilli * WHEELCIRC * 3600

         speed = rpmilli 1.288053600;

         Serial.print(“RPM:”);
         Serial.print(rpmilli * 60000 ,DEC);
         Serial.print(&quot; Speed:&quot;);
         Serial.print(speed,DEC);
         Serial.println(&quot; kph&quot;);
    }
}

void rpm_fun()
{
    revolutions++;
}

</code></pre>
 70044: <pre><code>rpmilli = revolutions/(millis()-timeold);
</code></pre>
<p>All variables in this line are of type <code>int</code>, so this is an integer division. When the time delta in ms is larger than the number of revolutions it counted, this always returns 0. You need to change this to:</p>
<pre><code>rpmilli = ((float)revolutions)/(millis()-timeold);
</code></pre>
<p>and change <code>rpmilli</code> to float.</p>
