I want to nap a value from 0-1023 to 0-1. When I do that with the default map function, I either get 0 or 1. How can I get like 0.23 or 0.9?
Use fmap, or simply divide by 1024.0.
map uses integer arithmetic.
Map() returns a long integer, not a floating point number. Multiply your input number by 100, do the map, then divide the output to a float value.
Untested code:
float result = float(map(val*10, 0, 1023, 0, 100))/100;
Here's something I found on GitHub. Again, untested:
double mapf(double val, double in_min, double in_max, double out_min, double out_max) {
return (val - in_min) * (out_max - out_min) / (in_max - in_min) + out_min;
}
You'd probably want map(val*10, 0, 1024, 0, 100)
Thank you!
Have a nice day!!!!
TheMemberFormerlyKnownAsAWOL:
Use fmap, or simply divide by 1024.0.map uses integer arithmetic.
There's an fmap function?
Divide by 1024 is too easy. But it works if the out has to be between 0 and .99999999
You might want to look at this forum post also:
This is the code that works:
float fmap(float x, float a, float b, float c, float d)
{
float f=x/(b-a)*(d-c)+c;
return f;
}
1 Like