22//
33// FILE: MultiMap.h
44// AUTHOR: Rob Tillaart
5- // VERSION: 0.1.4
5+ // VERSION: 0.1.5
66// DATE: 2011-01-26
77// PURPOSE: Arduino library for fast non-linear mapping or interpolation of values
88// URL: https://github.com/RobTillaart/MultiMap
99// URL: http://playground.arduino.cc/Main/MultiMap
1010//
1111// HISTORY:
1212// 0.0.1 2011-01-26 initial version (see forum)
13- // .....
13+ // ..... eons passed ...
1414// 0.1.0 2015-03-29
1515// 0.1.1 2020-04-09
1616// 0.1.2 2020-06-19 fix library.json
17- // 0.1.3 2021-01-02 add arduino-CI
18- // 0.1.4 2021-05-27 fix arduino-lint
17+ // 0.1.3 2021-01-02 add Arduino-CI
18+ // 0.1.4 2021-05-27 fix Arduino-lint
19+ // 0.1.5 2021-12-22 update library.json, readme, license, minor edits
1920
2021
21- #define MULTIMAP_LIB_VERSION (F(" 0.1.4 " ))
22+ #define MULTIMAP_LIB_VERSION (F(" 0.1.5 " ))
2223
2324
2425#include " Arduino.h"
2526
27+
2628// note: the in array should have increasing values
2729template <typename T>
28- T multiMap (T val , T* _in, T* _out, uint8_t size)
30+ T multiMap (T value , T* _in, T* _out, uint8_t size)
2931{
3032 // take care the value is within range
31- // val = constrain(val , _in[0], _in[size-1]);
32- if (val <= _in[0 ]) return _out[0 ];
33- if (val >= _in[size-1 ]) return _out[size-1 ];
33+ // value = constrain(value , _in[0], _in[size-1]);
34+ if (value <= _in[0 ]) return _out[0 ];
35+ if (value >= _in[size-1 ]) return _out[size-1 ];
3436
3537 // search right interval
36- uint8_t pos = 1 ; // _in[0] allready tested
37- while (val > _in[pos]) pos++;
38+ uint8_t pos = 1 ; // _in[0] already tested
39+ while (value > _in[pos]) pos++;
3840
3941 // this will handle all exact "points" in the _in array
40- if (val == _in[pos]) return _out[pos];
42+ if (value == _in[pos]) return _out[pos];
4143
4244 // interpolate in the right segment for the rest
43- return (val - _in[pos-1 ]) * (_out[pos] - _out[pos-1 ]) / (_in[pos] - _in[pos-1 ]) + _out[pos-1 ];
45+ return (value - _in[pos-1 ]) * (_out[pos] - _out[pos-1 ]) / (_in[pos] - _in[pos-1 ]) + _out[pos-1 ];
4446}
4547
4648
@@ -50,42 +52,42 @@ T multiMap(T val, T* _in, T* _out, uint8_t size)
5052// note: the in array should have increasing values
5153
5254template<typename T>
53- T multiMap(T val , T* _in, T* _out, uint8_t size)
55+ T multiMap(T value , T* _in, T* _out, uint8_t size)
5456{
5557 static T lastvalue = -1;
5658 static T cache = -1;
5759
58- if (val == lastvalue)
60+ if (value == lastvalue)
5961 {
6062 return cache;
6163 }
62- lastvalue = val ;
64+ lastvalue = value ;
6365
6466 // take care the value is within range
65- // val = constrain(val , _in[0], _in[size-1]);
66- if (val <= _in[0])
67+ // value = constrain(value , _in[0], _in[size-1]);
68+ if (value <= _in[0])
6769 {
6870 cache = _out[0];
6971 }
70- else if (val >= _in[size-1])
72+ else if (value >= _in[size-1])
7173 {
7274 cache = _out[size-1];
7375 }
7476 else
7577 {
7678 // search right interval; index 0 _in[0] already tested
7779 uint8_t pos = 1;
78- while(val > _in[pos]) pos++;
80+ while(value > _in[pos]) pos++;
7981
8082 // this will handle all exact "points" in the _in array
81- if (val == _in[pos])
83+ if (value == _in[pos])
8284 {
8385 cache = _out[pos];
8486 }
8587 else
8688 {
8789 // interpolate in the right segment for the rest
88- cache = (val - _in[pos-1]) * (_out[pos] - _out[pos-1]) / (_in[pos] - _in[pos-1]) + _out[pos-1];
90+ cache = (value - _in[pos-1]) * (_out[pos] - _out[pos-1]) / (_in[pos] - _in[pos-1]) + _out[pos-1];
8991 }
9092 }
9193 return cache;
@@ -94,3 +96,4 @@ T multiMap(T val, T* _in, T* _out, uint8_t size)
9496
9597
9698// -- END OF FILE --
99+
0 commit comments