1

enter image description here

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++;
}
PMF
1,3065 silver badges24 bronze badges
asked Jan 27, 2022 at 8:40

1 Answer 1

3
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.

answered Jan 27, 2022 at 9:02
1
  • Thank you so much for the help Commented Jan 27, 2022 at 15:23

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.