2014-11-02 11:24:21 -05:00
|
|
|
//
|
|
|
|
// FILE: FastMap.cpp
|
|
|
|
// AUTHOR: Rob Tillaart
|
2017-07-27 09:26:36 -04:00
|
|
|
// VERSION: 0.1.8
|
2017-07-15 12:28:01 -04:00
|
|
|
// PURPOSE: class with fast map function - library for Arduino
|
2014-11-02 11:24:21 -05:00
|
|
|
// URL: http://forum.arduino.cc/index.php?topic=276194
|
|
|
|
//
|
|
|
|
// HISTORY:
|
2017-07-27 09:26:36 -04:00
|
|
|
// 0.1.8 2017-07-27 revert double to float (issue 33)
|
2017-07-15 12:28:01 -04:00
|
|
|
// 0.1.7 2017-04-28 cleaned up, get examples working again
|
2017-07-27 09:26:36 -04:00
|
|
|
// 0.1.06 2015-03-08 replaced float by float (support ARM)
|
2015-03-08 17:17:20 -04:00
|
|
|
// 0.1.05 2014-11-02 stripped of bit mask experimental code
|
2014-11-02 16:20:21 -05:00
|
|
|
// 0.1.04 add back() - the inverse map
|
|
|
|
// tested with bit mask for constrain code (Perfomance was killed)
|
2014-11-02 11:24:21 -05:00
|
|
|
// 0.1.03 proper name
|
2017-07-15 12:28:01 -04:00
|
|
|
// 0.1.02 sqeezed the code (first public version)
|
2014-11-02 11:24:21 -05:00
|
|
|
// 0.1.01 refactor
|
|
|
|
// 0.1.00 initial version
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "FastMap.h"
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////
|
|
|
|
//
|
|
|
|
// PUBLIC
|
|
|
|
//
|
2017-07-15 12:28:01 -04:00
|
|
|
FastMap::FastMap()
|
|
|
|
{
|
|
|
|
init(0, 1, 0, 1);
|
|
|
|
}
|
|
|
|
|
2017-07-27 09:26:36 -04:00
|
|
|
void FastMap::init(float in_min, float in_max, float out_min, float out_max)
|
2014-11-02 11:24:21 -05:00
|
|
|
{
|
|
|
|
_in_min = in_min;
|
|
|
|
_in_max = in_max;
|
|
|
|
_out_min = out_min;
|
|
|
|
_out_max = out_max;
|
2014-11-02 16:20:21 -05:00
|
|
|
|
2014-11-02 11:24:21 -05:00
|
|
|
_factor = (out_max - out_min)/(in_max - in_min);
|
|
|
|
_base = out_min - in_min * _factor;
|
2014-11-02 16:20:21 -05:00
|
|
|
|
|
|
|
_backfactor = 1/_factor;
|
|
|
|
_backbase = in_min - out_min * _backfactor;
|
2014-11-02 11:24:21 -05:00
|
|
|
}
|
2014-11-02 16:20:21 -05:00
|
|
|
|
2017-07-27 09:26:36 -04:00
|
|
|
float FastMap::constrainedMap(float value)
|
2014-11-02 11:24:21 -05:00
|
|
|
{
|
|
|
|
if (value <= _in_min) return _out_min;
|
|
|
|
if (value >= _in_max) return _out_max;
|
|
|
|
return this->map(value);
|
|
|
|
}
|
|
|
|
|
2017-07-27 09:26:36 -04:00
|
|
|
float FastMap::lowerConstrainedMap(float value)
|
2014-11-02 11:24:21 -05:00
|
|
|
{
|
|
|
|
if (value <= _in_min) return _out_min;
|
|
|
|
return this->map(value);
|
|
|
|
}
|
|
|
|
|
2017-07-27 09:26:36 -04:00
|
|
|
float FastMap::upperConstrainedMap(float value)
|
2014-11-02 11:24:21 -05:00
|
|
|
{
|
|
|
|
if (value >= _in_max) return _out_max;
|
|
|
|
return this->map(value);
|
|
|
|
}
|
2017-07-27 09:26:36 -04:00
|
|
|
|
|
|
|
// END OF FILE
|