Прошу прощения, подкорректировал код.. теперь все работает:
PHP код:
#include <LiquidCrystal.h>
#include <avr/pgmspace.h>
#define Temp1Count 10 //Увеличил до 10 значений
int t; //Температура
int P; //Мощность вентиляторов
int T = 75; //Определяем нужную температуру двигателя
int i;
LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2);
uint16_t Temp1[Temp1Count][2] PROGMEM = {{471,46}, {655,58}, {713,65}, {772,74}, {775,80}, {802,90}, {823,100}, {839,110}, {852, 120}, {861, 130}}; //Точки аппроксимации
void setup() {
Serial.begin(9600);
lcd.begin(16, 2);
lcd.print(" WELCOME TO ");
lcd.setCursor(0,1);
lcd.print("*THERMOCONTROL*");
delay(2000);
lcd.clear();
}
void loop() {
uint16_t InTemp;
uint16_t RealTemp;
uint16_t InLeftTemp;
InTemp = 1024 - analogRead(0);
i=Temp1Count;
do
{
i--;
InLeftTemp=pgm_read_word(&Temp1[i][0]);
}
while ((i>=0)&&(InTemp<InLeftTemp));
uint16_t InRightTemp=pgm_read_word(&Temp1[i+1][0]);
uint16_t OutLeftTemp=pgm_read_word(&Temp1[i][1]);
uint16_t OutRightTemp=pgm_read_word(&Temp1[i+1][1]);
RealTemp=OutLeftTemp+(OutRightTemp-OutLeftTemp)*(InTemp-InLeftTemp)/(InRightTemp-InLeftTemp);
if (RealTemp==130);
float V = (5.00 / 1024.00 * analogRead(0)); //Переводим входные данные к абсолютному напряжению
if (RealTemp < T - 5) P = 0;
if (RealTemp >= T - 5) P = 50;
if (RealTemp >= T - 4) P = 70;
if (RealTemp >= T - 3) P = 90;
if (RealTemp >= T - 2) P = 120;
if (RealTemp >= T - 1) P = 160;
if (RealTemp >= T) P = 200;
if (RealTemp >= T + 1) P = 255;
analogWrite (6, P); //Запускаем вентиляторы
Serial.println(P, DEC); //Выводим информацию на всякий случай
lcd.clear();
lcd.setCursor(0,0);
lcd.print("VLT:");
lcd.setCursor(4,0);
lcd.print(V);
lcd.setCursor(8,0);
lcd.print("*TP:");
lcd.setCursor(12,0);
lcd.print(RealTemp);
lcd.setCursor(15,0);
lcd.print("C");
lcd.setCursor(0,1);
lcd.print("PWR:");
lcd.setCursor(4,1);
lcd.print(100.00/255.00*P);
// lcd.setCursor(7,1);
lcd.print("%");
delay(300);
}