#define pinA PB6
#define pinB PB5
#define SO PB7
#define CS PB9
#define CLK PB8
#include <STM32_MAX6675.h> //http://forum.rcl-radio.ru/misc.php?action=pan_download&item=410&download=1
#include <STM32_TM1637.h> // http://forum.rcl-radio.ru/misc.php?action=pan_download&item=403&download=1
#include <EEPROM.h> // Входит в состав набора библиотек Arduino_STM32-master
#include <STM32_Encoder.h> // http://rcl-radio.ru/wp-content/uploads/2020/01/STM32_Encoder.zip
STM32_Encoder encoder(pinA, pinB);
STM32_TM1637 tm(PB0,PB1);// CLK, DIO
STM32_MAX6675 max6675(CLK, CS, SO);
int position = -999;
byte w,i;
int reg;
const float gis = 1.0;// гистерезис
unsigned long times;
float celsius,sum;
void setup() {
Serial.begin(9600);
tm.brig(7); // ЯРКОСТЬ 0...7
EEPROM.init(0x801F000,0x801F800,0x400);// 1024 byte
encoder.begin();
attachInterrupt(digitalPinToInterrupt(pinA),Read,CHANGE);
attachInterrupt(digitalPinToInterrupt(pinB),Read,CHANGE);
pinMode(PB7,OUTPUT);// выход управления реле
reg = EEPROM.read(10);
delay(500);
}
void loop() {
if(millis()-times>3000){
for(i=0;i<3;i++){
celsius = max6675.readCelsius();
sum = sum + celsius;
delay(500);}celsius = sum/3;sum=0;}
if(position != encoder.getPosition()){position = encoder.getPosition();
reg = reg + encoder.getPosition();encoder.setPosition(0);position = 0;
w=1;times = millis();if(reg>999){reg=999;}if(reg<0){reg=0;}}
if(millis()-times<3000){tm.print_float(reg,0, 0b01010000,0,0,0);}
else{tm.print_float(celsius,1, 0,0,0,0);}
if(celsius>999||celsius<0){tm.print_float(celsius,0, 0b01000000,0b01000000,0b01000000,0b01000000);}
if(reg >= celsius + gis){digitalWrite(PB7,HIGH);}
if(reg <= celsius - gis){digitalWrite(PB7,LOW);}
if(millis()-times>1000&&w==1){w=0;EEPROM.update(10, reg);}
}
void Read(){encoder.readAB();}