Посмотрел пример апроксимации из темы
Получился следующий код:
Код:
#define Temp1Count 8
#include <avr/pgmspace.h>
uint16_t Temp1[Temp1Count][2] PROGMEM =
{
{77.95155709,-25,}, //первое число на входе, второе температура
{80.18392652,-24.5},
{256.232939,0},
{536.3809524,25},
{772.1414862,50},
{903.0706326,75},
{964.8461591,100},
{993.3008629,125}
};
const int in = 0;
int sensor = 0;
int j;
void setup()
{
Serial.begin(9600);
}
void loop() {
sensor = analogRead(in);
Serial.print("Analog = ");
Serial.println(sensor);
uint16_t InTemp;
uint16_t RealTemp;
uint16_t InLeftTemp;
InTemp= sensor;
j=Temp1Count;
do
{
j--;
InLeftTemp=pgm_read_word(&Temp1[j][0]);
}
while ((j>=0)&&(InTemp<InLeftTemp));
uint16_t InRightTemp=pgm_read_word(&Temp1[j+1][0]);
uint16_t OutLeftTemp=pgm_read_word(&Temp1[j][1]);
uint16_t OutRightTemp=pgm_read_word(&Temp1[j+1][1]);
RealTemp=OutLeftTemp+(OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp);
Serial.println(RealTemp);
delay(1000);
}
Выводит целые значения температуры (24 28 30).
Вопрос, можно ли сделать чтобы выводились промежуточные значения? (24,5 28,3 30,8)