В массиве Temp1[Temp1Count][2] PROGMEM = {{0,40}, {5,80}, {26,200}, {42,300}, {70,400}}
находятся соответствия значений для аппроксимации. Для значения 0 результат - 40. Для 5 - 80. И так далее. Соответственно, для входного значения 1, выходное значение должно быть 48. Для 2 - 56, для 5 - 80.
Вообще я бы рекомендовал любые алгоритмы тестировать и отлаживать в каких-нибудь средах разработки (можно не привязанных к микроконтроллерам). Тем более, что С - он и в африке С (wiring - это С с несколькими функциями и макросами). В среде ардуино отсутствует возможность отладки, поэтому в ней невозможно разработать что-либо сложное.
Есть куча проблем, с которыми можно столкнуться: в реализации С для микроконтроллеров AVR отсутствует контроль результата на предмет его попадания в допустимый диапазон значений переменной. К примеру, если написать
uint8_t i; // это восьмибитая беззнаковая переменная. значения 0..255
i=200;
i=i+150;
то i будет равно 94. И никаких ошибок в процессе работы программы не возникнет, ибо ошибки банально некуда выдавать.
Но это еще ладно, такую ситуацию можно предусмотреть и ею пользоваться. А можно обратиться в массив по некорректному индексу:
int16_t ar[10];
uint16_t i=15;
uint16_t j;
j=ar[i];
И эта ситуация, понятная компилятору на стадии компиляции не вызывает предупреждений.
Поэтому очень рекомендую все минимально сложные куски кода отлаживать проходом по коду в отладчике и просмотром переменных.
(добавлено)
В массиве первое значение - считанное значение считанное с датчика (при помощи того же AnalogRead() ), второе - выходное значение температуры.
Да, учти, что при подсчете значения не должно произойти переполнения uint16 - у него максимальное значение 65536. Либо в формуле расчета надо принудительно производить расчет в 32х битах.
Имеется ввиду эта строка:
RealTemp=OutLeftTemp+(OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp);
При вычислении (OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp) а конкретно - при вычислении произведения может произойти переполнение через 65535. В Сях тип выражения берется из первого участника выражения.