Привет Всем!
Изменил немного код автора. Применил дисплей LCD1602 с шиной I2C и вместо модуля термопары
на ИМС MAX6675 применил MAX31855. Она понравилась лучшей стабильностью.
Возможно кому-то пригодится.
/*
Терморегулятор http://rcl-radio.ru/?p=45845
*/
//#include <SPI.h>
#include <Wire.h>
#include <EEPROM.h> //#include <EEPROM.h>
// Initialize the LCD1602
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 16, 2);
// Initialize the Thermocouple
#include "Adafruit_MAX31855.h"
#define MAXDO 12
#define MAXCS 10
#define MAXCLK 13
Adafruit_MAX31855 thermocouple(MAXCLK, MAXCS, MAXDO);
// Connecting to Arduino Nano
#define D3 3 // OUT Выход на исполнительное устройство
#define D4 4 // IN Вход кнопки КН1
#define D7 7 // IN Вход кнопки КН2
#define A0 0 // IN Вход кнопки КН2
//Variables
double t_c,t_sum,t_iz;
byte erom2,erom3,erom4;
int kn1,kn2,t_reg,sh,sh1,gis;
long w;
void setup(){
Serial.begin(9600);
lcd.init();lcd.backlight();delay(500); //lcd.begin(16, 2);
pinMode(A0,INPUT); // KH3
pinMode(4,INPUT);pinMode(7,INPUT); // кнопки KH1, KH2
pinMode(3,OUTPUT);
erom2=EEPROM.read(4);if(erom2>99){EEPROM.update(2,0);}
erom3=EEPROM.read(7);if(erom3>10){EEPROM.update(3,0);}
erom4=EEPROM.read(13);if(erom4>10){EEPROM.update(4,0);}
t_reg=erom2*100+erom3;gis=erom4;
}
void loop(){
if(analogRead(A0)>600){kn1++;delay(300);}if(kn1>2){kn1=0;}// кнопка
if(kn1==1){// регулирование
if(digitalRead(7) == HIGH){sh++;if(sh<=10){t_reg++;}if(sh>10&&sh<=100){t_reg=t_reg+10;}}else{sh=0;}
if(digitalRead(4) == HIGH){sh1++;if(sh1<=10){t_reg--;}if(sh1>10&&sh1<=100){t_reg=t_reg-10;}}else{sh1=0;}
lcd.setCursor(0,0);lcd.print("reg = ");lcd.print(t_reg);lcd.print((char)223);lcd.print("C");delay(200);
if(t_reg<=0){t_reg=0;}if(t_reg>=1000){t_reg=1000;}
erom2=t_reg/100;
erom3=t_reg-((t_reg)/100)*100;w=0;
}
if(kn1==2){// гистерезис
if(digitalRead(7) == HIGH){gis=gis+1;}
if(digitalRead(4) == HIGH){gis=gis-1;}
if(gis>=10 || gis<0){gis=0;}
lcd.setCursor(0,0);lcd.print("gis = ");lcd.print(gis);lcd.print((char)223);lcd.print("C");delay(300);
erom4=gis;w=0;
}
if(kn1==0){w++;if(w==1){EEPROM.update(2,erom2);EEPROM.update(3,erom3);EEPROM.update(4,erom4);}
lcd.setCursor(0,0);lcd.print("T = ");lcd.print(t_iz,1);lcd.print((char)223);lcd.print("C ");
lcd.setCursor(0,1);lcd.print("reg=");lcd.print(t_reg);lcd.print(" gis=");lcd.print(gis);
//Serial.print("C = ");
//Serial.println(t_iz);
for(int i=0;i<5;i++){
t_c=thermocouple.readCelsius();
t_sum=t_sum+t_c;
delay(200);
}
t_iz=t_sum/5;t_sum=0;
}
if(t_reg >= t_iz + gis){digitalWrite(3,HIGH);}
if(t_reg <= t_iz - gis){digitalWrite(3,LOW);}
lcd.clear();
}