Hi,
I've been trying to get multiMap to work, but it seems to be all over the place for me.
Code I'm using is below. I've simplified it down, and set the map data so input and output is the same, and it still doesn't output consistently. What am I doing wrong?
Thanks
#include <LiquidCrystal.h>
const int rs = 12, en = 11, d4 = 5, d5 = 4, d6 = 3, d7 = 2;
LiquidCrystal lcd(rs, en, d4, d5, d6, d7);
int outputreading = 0;
// note: the _in array should have increasing values
int multiMap(int val, int* _in, int* _out, uint8_t size)
{
// take care the value is within range
// val = constrain(val, _in[0], _in[size-1]);
if (val <= _in[0]) return _out[0];
if (val >= _in[size-1]) return _out[size-1];
// search right interval
uint8_t pos = 1; // _in[0] allready tested
while(val > _in[pos]) pos++;
// this will handle all exact "points" in the _in array
if (val == _in[pos]) return _out[pos];
// interpolate in the right segment for the rest
return (val - _in[pos-1]) * (_out[pos] - _out[pos-1]) / (_in[pos] - _in[pos-1]) + _out[pos-1];
}
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
}
void loop() {
lcd.setCursor(0, 0);
int out[] = {0,205,409,615,819,1021};
int in[] = {0,205,409,615,819,1021};
int val = analogRead(A0);
outputreading = multiMap(val, in, out, 6);
lcd.print(outputreading);
}