как сохранить переменную больше 256?

Smarodina
Offline
Зарегистрирован: 03.02.2018

вообщем незадача, изменил код своего контроллера и появилась проблема, надо сохранить переменную в EEPROM со значением в тысячах... а можно только до 256... что делать?

 


#define PID_INTEGER
#define BTN1 A0
#define BTN2 A1
#define BTN3 A3
#define BTN4 A2

#include <RBDdimmer.h>
#include <EEPROM.h>
#include <GyverPID.h>
#include <GyverButton.h>
#include <GyverTimer.h>
#include <OneWire.h>
#include <DallasTemperature.h>
#include <Wire.h>
#include <LiquidCrystal_I2C_OLED.h>

#define ONE_WIRE_BUS 11

dimmerLamp dimmer(3);

LiquidCrystal_I2C lcd(0x27,20,4); 
GyverPID pid(1.3, 0.01, 6.3, 30000);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
DeviceAddress insideThermometer {0x28, 0x55, 0xA9, 0x2C, 0x33, 0x20, 0x01, 0xDC  };  //УКАЗАТЬ имя  датчика
////////////////////кнопки////////////////////////////////////////////
GButton enterButtonPin(BTN1);            //пин кнопки Старт
GButton exitButtonPin(BTN2);             //пин кнопки Стоп
GButton plusButtonPin(BTN3);             //пин кнопки "+"
GButton minusButtonPin(BTN4);            //пин кнопки "-"
////////////////////датчики///////////////////////////////////////////
const int photoresistorPin = A6;         //пин фоторезистора
const int infraredSensorPin = A7;        //пин ИК датчика
////////////////////иполнители////////////////////////////////////////
const int feederAugerPin = 7;            //пин шнека питателя
const int pumpPin = 6;                   //пин цикуляционного насоса
const int heatingElementPin = 8;         //пин зажигалки
const int stokerAugerPin = 9;            //пин шнека стокера
const int pwmPin = 10;                   //пин для ШИМ
const int firebarPin = 13;               //пин подвижного колосника 
////////////////////переменные///////////////////////////////////////
int desiredTemperature;
int currentTemp;
byte working;
byte start_count;
int p_pause;
int w_pause;
byte start1;
int val_f;
int val[3];
int index;
int val_foto;
int val_fot[3];
int index2;
byte starting;                                    
signed char fan_value;
int PWM_val;
byte fanspeed_pr;
byte pid_out_last;
int switch_start;
int switch_stop;
int startpwm;
uint8_t start_1;
uint8_t stop_1;
int fire_off;  
byte pid_start;
uint32_t displ;
byte min_power;
byte max_power;
int fanspeed;
uint8_t dopid_power;
uint8_t cursor_;
float pr;
float kkal;
uint8_t kwt;
uint8_t min_fan;
uint8_t max_fan;
  
GTimer start_timer0(MS);
GTimer start_timer1(MS);
GTimer start_timer2(MS);
GTimer start_timer3(MS);
GTimer stop_timer1(MS);
GTimer stop_timer2(MS);

int middle_of_3(int a, int b, int c) {
 int x[2];
if (a > b) {x[0] = b; x[1] = a;} 
else {x[0] = a; x[1] = b;} 
if (x[1] > c) {return (x[0]< c) ? c : x[0];} 
else {return x[1];} 
}

int middle_of_3_1(int a, int b, int c) {
 int x[2];
if (a > b) {x[0] = b; x[1] = a;} 
else {x[0] = a; x[1] = b;} 
if (x[1] > c) {return (x[0]< c) ? c : x[0];} 
else {return x[1];} 
}

void setup() {
  cursor_=0;
  start_1=0;
  stop_1=0;
  switch_stop=9;
  switch_start=9;
  pid_out_last=100;
  PWM_val=30;
  working=0;
  start1=0;
  start_count=0;
  startpwm=0;
  fire_off=0;
  pid_start=0;
  displ=0;
  min_power=EEPROM.get(1,min_power);
  max_power=EEPROM.get(3,max_power);
  desiredTemperature=EEPROM.get(5,desiredTemperature);
  dopid_power=EEPROM.get(7,dopid_power);
  fan_value=EEPROM.get(9,fan_value);
  min_fan=EEPROM.get(11,min_fan);
  max_fan=EEPROM.get(13,max_fan);
  p_pause=15000;
  kkal=4.65;

   dimmer.begin(TOGGLE_MODE, ON);
  
   lcd.init();                      // initialize the lcd 
   lcd.backlight();
   lcd.clear();
               
    enterButtonPin.setTickMode(AUTO);
    exitButtonPin.setTickMode(AUTO);
    plusButtonPin.setTickMode(AUTO);
    minusButtonPin.setTickMode(AUTO);
	
	  pinMode(photoresistorPin, INPUT);
    pinMode(infraredSensorPin, INPUT);
    pinMode(pumpPin, OUTPUT);
    pinMode(feederAugerPin, OUTPUT);
    pinMode(stokerAugerPin, OUTPUT);
    pinMode(pwmPin, OUTPUT);
    pinMode(heatingElementPin, OUTPUT);
    pinMode(firebarPin, OUTPUT);
    
    digitalWrite(feederAugerPin, HIGH);
    digitalWrite(stokerAugerPin, HIGH);
    digitalWrite(heatingElementPin, HIGH);
    digitalWrite(pumpPin, HIGH);
    digitalWrite(firebarPin, HIGH);
    
  pid.setMode(ON_RATE);
  pid.setDirection(NORMAL); 
  pid.setLimits(0,9);
  pid.setpoint = desiredTemperature; 
  sensors.begin();
  start_timer0.setTimeout(1000);//время продувки перед запуском горелки
  start_timer1.setTimeout(80000);//время загрузки пеллет на розжиг
  start_timer2.setTimeout(600000);//время работы зажигалки
  start_timer3.setTimeout(60000);//время стабилизации пламени
  stop_timer1.setTimeout(200000);//время дожига пеллет перед останокой горелки
  stop_timer2.setTimeout(300000);//время продувки перед останокой горелки
 }

void loop() {
  average_fire();
  temp();
  pump();
  menu();
  pidstart();
  startWork();
  finishWork();
  auto_start();
  fire_bar();
  startPWM();
  eeprom();
}

void eeprom(){
  static uint8_t kkal_last=kkal;
  static uint8_t p_pause_last=p_pause;
  static uint8_t min_fan_last=min_fan;
  static uint8_t max_fan_last=max_fan;
  static uint8_t min_power_last=min_power;
  static uint8_t max_power_last=max_power;
  static uint8_t fan_value_last=fan_value;
  static uint8_t desiredTemperature_last=desiredTemperature;
  min_power=constrain(min_power,0,max_power);
  max_power=constrain(max_power,min_power,15);
  
  if(min_power!=min_power_last){
  min_power_last=min_power;
  EEPROM.put(1,min_power);  
  }
  if(max_power!=max_power_last){
  max_power_last=max_power;
  EEPROM.put(3,max_power);  
  }
  if(desiredTemperature!=desiredTemperature_last){
  desiredTemperature_last=desiredTemperature;
  EEPROM.put(5,desiredTemperature);  
  }
  if(fan_value!=fan_value_last){
  fan_value_last=fan_value;
  EEPROM.put(9,fan_value);
  }
  if(min_fan!=min_fan_last){
  min_fan=min_fan_last;
  EEPROM.put(11,min_fan);
  }
   if(max_fan!=max_fan_last){
  max_fan=max_fan_last;
  EEPROM.put(13,max_fan);
  }
  
}

void pidstart(){
  if(working==1){
  w_pause =((((kwt)/kkal)*1000)/(pr/216000))/((216000-(((kwt)/kkal)*1000)/(pr/216000))/p_pause);
  pid.input = currentTemp;
  pid.setpoint = desiredTemperature; 
  pid.setLimits(min_power-1,max_power-1);
  pid.getResultTimer();
  kwt=pid.output;
  digitalWrite(heatingElementPin, HIGH);
  }
}

void fire_bar(){                                                                             //Функция таймера работы подвижного колосника
    static uint32_t oldMillis = millis();
    static uint32_t onOffTime=500000;
    uint32_t newMillis = millis();
    boolean firebar_On = digitalRead(firebarPin);
    
    if(newMillis-oldMillis>=onOffTime){
        oldMillis=millis();
        firebar_On=!firebar_On;
        onOffTime=5000+(300000*firebar_On);//!firebar_On для мосфета, firebar_On для реле управление по LOW.
        digitalWrite(firebarPin,firebar_On);
    }    
}

void temp(){                                                                         //Функция обработки сигнала датчика температуры
   static uint32_t temp_timer;
   if(millis()-temp_timer>1000){
   temp_timer=millis(); 
   sensors.requestTemperatures();
   currentTemp = sensors.getTempC(insideThermometer)*10;
   }
   if(millis()-temp_timer>500){
   temp_timer=millis(); 
   lcd.clear();
   }
  
}
 
void average_fire(){                                                                         //Функция обработки сигнала датчика огня   
   if (++index > 2) index = 0; 
   val[index] = analogRead(A3); 
   val_f = middle_of_3(val[0], val[1], val[2]);
   if (++index2 > 2) index2 = 0; 
   val_fot[index2] = analogRead(A2); 
   val_foto = middle_of_3_1(val_fot[0], val_fot[1], val_fot[2]);
}

void startPWM() {                                                                            //функция управления ШИМ вентилятора
   if(startpwm==1){
   fan_value=constrain(fan_value,-40,40);
   if(working==1){
   fanspeed = PWM_val+fan_value;
   }else{fanspeed=PWM_val;}
   fanspeed = constrain(fanspeed_pr, min_fan, max_fan);
   dimmer.setPower(fanspeed);
   }
   else{dimmer.setState(OFF);
   }  
}


void pump(){
   if(currentTemp>=350){
    digitalWrite(pumpPin, LOW);}
     else{digitalWrite(pumpPin, HIGH);
  }
   if(currentTemp<50 and start_count>=3)digitalWrite(pumpPin, LOW);
}

void main_screen(){
 
      lcd.setCursor(0, 0);
      lcd.print("Ty.");
      lcd.setCursor(4, 0);
      lcd.print(desiredTemperature/10);
      lcd.setCursor(6, 0);
      lcd.print("C");
      
      lcd.setCursor(0, 1);
      lcd.print("Tk.");
      lcd.setCursor(4, 1);
      lcd.print(currentTemp/10);
      lcd.setCursor(6, 1);
      lcd.print("C");
      
      lcd.setCursor(0, 2);
      lcd.print("kWt");
      lcd.setCursor(4, 2);
      lcd.print(kwt);

      lcd.setCursor(0, 3);
      lcd.print("Fan");
      lcd.setCursor(4, 3);
      lcd.print(fanspeed_pr);
      if(fanspeed_pr<10){
      lcd.setCursor(5, 3);
      lcd.print("%");  
      }else if(fanspeed_pr<100){
        lcd.setCursor(6, 3);
      lcd.print("%");
      }else if(fanspeed_pr>99){
        lcd.setCursor(7, 3);
      lcd.print("%");
      }
     
      lcd.setCursor(16, 0);
      lcd.print("Fire");
      lcd.setCursor(16, 1);
      lcd.print("Fire");
      lcd.setCursor(11, 0);
      lcd.print(val_f);
      lcd.setCursor(11, 1);
      lcd.print(val_foto);

      if(val_f>1000 and val_foto>1000){
      lcd.setCursor(8, 0);
      lcd.print(fire_off/10);
      }
      if(working==1){
      lcd.setCursor(9, 2);
      lcd.print("mode:");
      lcd.setCursor(9, 3);
      lcd.print("working...");
      }
      if(displ==0)cursor_=0;  
}

void menu(){
 desiredTemperature = constrain(desiredTemperature, 400, 800);
  if(displ==0 and enterButtonPin.isHold()){
    startpwm=1;
    switch_start=0;
      }
  if(displ==0 and exitButtonPin.isHold()){
    startpwm=1;
    working=0;
    start1=0;
    switch_stop=0;
      }

  if(displ==0 and plusButtonPin.isClick()){
      desiredTemperature+=10;
      plusButtonPin.resetStates();
      }
  if(displ==0 and minusButtonPin.isClick()){
      desiredTemperature-=10;
      minusButtonPin.resetStates();
      }
  if(displ==0 and plusButtonPin.isHold()){
      desiredTemperature+=10;
      }
  if(displ==0 and minusButtonPin.isHold()){
      desiredTemperature-=10;
      }
      
  if(displ==0)main_screen();
      
      if(displ==0 and enterButtonPin.isClick())displ+=11;
      if(displ>0 and exitButtonPin.isDouble())displ=0;
      if(displ>=10 and displ<20000 and minusButtonPin.isClick())displ+=1;
      if(displ>=10 and displ<20000 and plusButtonPin.isClick())displ-=1;
      
      if(displ==11)cursor_=1;
      if(displ==12)cursor_=2;
      if(displ==13)cursor_=3;
      if(displ==110)cursor_=0;
      if(displ==111)cursor_=1;
      if(displ==112)cursor_=2;
      if(displ==113)cursor_=3;
      if(displ==1110)cursor_=1;
      if(displ==1120)cursor_=2;
      if(displ==1130)cursor_=3;
      if(displ==11001)cursor_=1;
      if(displ==11002)cursor_=2;
      if(displ==11003)cursor_=3;
      if(displ==121)cursor_=1;
      if(displ==122)cursor_=2;
      if(displ==123)cursor_=3;
      if(displ==1210)cursor_=1;
      if(displ==1220)cursor_=2;
      if(displ==1230)cursor_=3;
      if(displ==131)cursor_=1;
      if(displ==132)cursor_=2;
      if(displ==1310)cursor_=1;
      if(displ==1320)cursor_=2;
      
      if(displ==11 and enterButtonPin.isClick())displ*=10;
      if(displ==12 and enterButtonPin.isClick())displ*=10;
      if(displ==13 and enterButtonPin.isClick())displ*=10;
      if(displ==110 and enterButtonPin.isClick())displ*=100;
      if(displ==111 and enterButtonPin.isClick())displ*=10;
      if(displ==112 and enterButtonPin.isClick())displ*=10;
      if(displ==113 and enterButtonPin.isClick())displ*=10;
      if(displ==121 and enterButtonPin.isClick())displ*=10;
      if(displ==122 and enterButtonPin.isClick())displ*=10;
      if(displ==123 and enterButtonPin.isClick())displ*=10;
      if(displ==131 and enterButtonPin.isClick())displ*=10;
      if(displ==132 and enterButtonPin.isClick())displ*=10;
      if(displ==11001 and enterButtonPin.isClick())displ*=10;
      if(displ==11002 and enterButtonPin.isClick())displ*=10;
      if(displ==11003 and enterButtonPin.isClick())displ*=10;
      
      if(displ>=11000 and displ<=11003)set_fan();
      if(displ>=110000 and displ<=110030)set_fan();
      if(displ>=110 and displ<=113)set_gor();
      if(displ>=120 and displ<=123)set_pid();
      if(displ>=130 and displ<=132)set_pow();
      if(displ>=1100 and displ<=1130)set_gor();
      if(displ>=1200 and displ<=1230)set_pid();
      if(displ>=1300 and displ<=1320)set_pow();
      
      if(displ>=10 and displ<100){
  cursor_ = constrain(cursor_, 1, 3); 
  lcd.setCursor(8,0);
  lcd.print("Menu");
  lcd.setCursor(1,1);
  lcd.print("setting burner");
  lcd.setCursor(1,2);
  lcd.print("setting PID");
  lcd.setCursor(1,3);
  lcd.outStr("setting power");
  lcd.setCursor(0,cursor_);
  lcd.print(">");
      }
}

void set_fan(){
  cursor_ = constrain(cursor_, 0, 3);
  lcd.setCursor(3,0);
  lcd.print("Settingis fan");

  lcd.setCursor(1,1);
  lcd.print("min fan");
  lcd.setCursor(16,1);
  lcd.print(min_fan);
   if(displ==110010 and plusButtonPin.isClick())min_fan+=1;
   if(displ==110010 and plusButtonPin.isHold())min_fan+=1;
   if(displ==110010 and minusButtonPin.isClick())min_fan-=1;
   if(displ==110010 and minusButtonPin.isHold())min_fan-=1;
   if(displ==110010){
    lcd.setCursor(19,1);
    lcd.print("<");
   }

  lcd.setCursor(1,2);
  lcd.print("max fan");
  lcd.setCursor(16,2);
  lcd.print(max_fan);
   if(displ==110020 and plusButtonPin.isClick())max_fan+=1;
   if(displ==110020 and plusButtonPin.isHold())max_fan+=1;
   if(displ==110020 and minusButtonPin.isClick())max_fan-=1;
   if(displ==110020 and minusButtonPin.isHold())max_fan-=1;
   if(displ==110020){
  lcd.setCursor(19,2);
  lcd.print("<");}
    
  lcd.setCursor(1,3);
  lcd.print("correction fan");
  lcd.setCursor(16,3);
  lcd.print(fan_value);
   if(displ==110030 and plusButtonPin.isClick())fan_value+=1;
   if(displ==110030 and plusButtonPin.isHold())fan_value+=1;
   if(displ==110030 and minusButtonPin.isClick())fan_value-=1;
   if(displ==110030 and minusButtonPin.isHold())fan_value-=1;
   if(displ==110030){
  lcd.setCursor(19,3);
  lcd.print("<");
   }
  lcd.setCursor(0,cursor_);
  lcd.print(">");
   if(exitButtonPin.isClick())displ/=100;
}
   
void set_gor(){
  cursor_ = constrain(cursor_, 0, 3); 
  lcd.setCursor(1,0);
  lcd.print("Setings fan");
  //if(displ==110 and enterButtonPin.isClick())displ*=100;
   
  lcd.setCursor(1,1);
  lcd.print("set Kkal");
  lcd.setCursor(11,1);
  lcd.print(kkal*1000);                                                 //качество пеллет
   if(displ==1110 and plusButtonPin.isClick())kkal+=0,1;
   if(displ==1110 and plusButtonPin.isHold())kkal+=1;
   if(displ==1110 and minusButtonPin.isClick())kkal-=0,1;
   if(displ==1110 and minusButtonPin.isHold())kkal-=1;
   if(displ==1110){
    lcd.setCursor(19,1);
    lcd.print("<");
   }
   
  lcd.setCursor(1,2);
  lcd.print("set pause");                                           //пауза между подачами
  lcd.setCursor(11,2);
  lcd.print(p_pause);
   if(displ==1120 and plusButtonPin.isClick())p_pause+=100;
   if(displ==1120 and plusButtonPin.isHold())p_pause+=1000;
   if(displ==1120 and minusButtonPin.isClick())p_pause-=100;
   if(displ==1120 and minusButtonPin.isHold())p_pause-=1000;
   if(displ==1120){
    lcd.setCursor(19,2);
    lcd.print("<");
   }
   
  lcd.setCursor(1,3);                                                
  lcd.print("set perfo");                                            //производительность шнека грамм\час
  lcd.setCursor(11,3);
  lcd.print(pr);
   if(displ==1130 and plusButtonPin.isClick())pr+=100;
   if(displ==1130 and plusButtonPin.isHold())pr+=1000;
   if(displ==1130 and minusButtonPin.isClick())pr-=100;
   if(displ==1130 and minusButtonPin.isHold())pr-=1000;
   if(displ==1130){
    lcd.setCursor(19,3);
    lcd.print("<");
   }
  
  lcd.setCursor(0,cursor_);
  lcd.print(">");
  if(exitButtonPin.isClick()){
    displ/=10;
  }
  
}
void set_pid(){
  cursor_ = constrain(cursor_, 1, 3); 
  lcd.setCursor(3,0);
  lcd.print("Settings PID");
  
  lcd.setCursor(1,1);
  lcd.print("set Kp");
  lcd.setCursor(15,1);
  lcd.print(pid.Kp);
   if(displ==1210 and plusButtonPin.isClick())pid.Kp+=0.01;
   if(displ==1210 and minusButtonPin.isClick())pid.Kp-=0.01;
   if(displ==1210 and plusButtonPin.isHold())pid.Kp+=0.1;
   if(displ==1210 and minusButtonPin.isHold())pid.Kp-=0.1;
   if(displ==1210){
    lcd.setCursor(19,1);
    lcd.print("<");
    }
 
  lcd.setCursor(1,2);
  lcd.print("set Ki");
  lcd.setCursor(15,2);
  lcd.print(pid.Ki);
   if(displ==1220 and plusButtonPin.isClick())pid.Ki+=0.01;
   if(displ==1220 and minusButtonPin.isClick())pid.Ki-=0.01;
   if(displ==1220 and plusButtonPin.isHold())pid.Ki+=0.1;
   if(displ==1220 and minusButtonPin.isHold())pid.Ki-=0.1;
   if(displ==1220){
    lcd.setCursor(19,1);
    lcd.print("<");
    }
 
  lcd.setCursor(1,3);
  lcd.print("set Kd");
  lcd.setCursor(15,3);
  lcd.print(pid.Kd);
   if(displ==1230 and plusButtonPin.isClick())pid.Kd+=0.01;
   if(displ==1230 and minusButtonPin.isClick())pid.Kd-=0.01;
   if(displ==1230 and plusButtonPin.isHold())pid.Kd+=0.1;
   if(displ==1230 and minusButtonPin.isHold())pid.Kd-=0.1;
   if(displ==1230){
    lcd.setCursor(19,1);
    lcd.print("<");
    }
    
  lcd.setCursor(0,cursor_);
  lcd.print(">");
  
  if(exitButtonPin.isClick())displ/=10;
  
}

void set_pow(){
  cursor_ = constrain(cursor_, 1, 3); 
  lcd.setCursor(1,0);
  lcd.print("set Power");
  lcd.setCursor(1,1);
  lcd.print("Max power Kwt");
  lcd.setCursor(15,1);
  lcd.print(max_power);
   if(displ==1310 and plusButtonPin.isClick())max_power+=1;
   if(displ==1310 and minusButtonPin.isClick())max_power-=1;
   if(displ==1310 and plusButtonPin.isHold())max_power+=1;
   if(displ==1310 and minusButtonPin.isHold())max_power-=1;
   if(displ==1310){
    lcd.setCursor(19,1);
    lcd.print("<");
    }
  
  lcd.setCursor(1,2);
  lcd.print("Min power Kwt");
  lcd.setCursor(15,2);
  lcd.print(min_power);
   if(displ==1320 and plusButtonPin.isClick())min_power+=1;
   if(displ==1320 and minusButtonPin.isClick())min_power-=1;
   if(displ==1320 and plusButtonPin.isHold())min_power+=1;
   if(displ==1320 and minusButtonPin.isHold())min_power-=1;
   if(displ==1320){
    lcd.setCursor(19,1);
    lcd.print("<");
    }
    
  lcd.setCursor(0,cursor_);
  lcd.print(">");
  if(exitButtonPin.isClick())displ/=10;
}

void auto_start(){                                                                           //Функция автостарта горелки при потере огня
    static uint32_t timer_fire;
    static int time_no_fire;

  if (kwt==1 or kwt==2 or kwt==3 or kwt==4 or kwt==5){
   time_no_fire = 1400;}
     else{time_no_fire = 600;}
//     time_no_fire = 600;
  if(millis() - timer_fire >= 100){
    timer_fire = millis();
  
  if((val_f>1000) and start1==1){
    fire_off+=1;
    }
    else{
      fire_off=0;
    }
  }
  if(fire_off==time_no_fire and start1==1){
      start1=0;
      working=0;
      pid_out_last=100;
      switch_start=5;
  }
}

void startWork(){                                                                             //функция розжига
  static uint32_t timer_start;
  static uint8_t tt1=1;
  static uint8_t tt2=80;
  static uint16_t tt3=600;
  static uint8_t tt4=60;
  switch(switch_start){
	   case 0:
      PWM_val=100;
      digitalWrite(heatingElementPin, LOW);
      if(millis() - timer_start >= 1000){
      timer_start = millis();
      tt1-=1;
      }
      if(displ==0){
      lcd.setCursor(14, 2);
      lcd.print(tt1);
      lcd.setCursor(17, 2);
      lcd.print("sec");
      lcd.setCursor(9, 2);
      lcd.print("mode:");
      lcd.setCursor(9, 3);
      lcd.print("Blow...");}
     break;
	   
	   case 1:
	    PWM_val=20;
      if(millis() - timer_start >= 1000){
      timer_start = millis();
      tt2-=1;
      }
      if(displ==0){
      lcd.setCursor(14, 2);
      lcd.print(tt2);
      lcd.setCursor(17, 2);
      lcd.print("sec");
      lcd.setCursor(9, 2);
      lcd.print("mode:");
      lcd.setCursor(9, 3);
      lcd.print("Loading...");}
      digitalWrite(stokerAugerPin, LOW);
    break;
	   
	   case 2:
	     digitalWrite(stokerAugerPin, HIGH);
       digitalWrite(feederAugerPin, HIGH);
       switch_start=3;
		break;
	   
	   case 3:
	     PWM_val=100;
       if(millis() - timer_start >= 1000){
       timer_start = millis();
       tt3-=1;
       }
       if(displ==0){
       lcd.setCursor(14, 2);
       lcd.print(tt3);
       lcd.setCursor(17, 2);
       lcd.print("sec");
	     lcd.setCursor(9, 2);
       lcd.print("mode:");
	     lcd.setCursor(9, 3);
       lcd.print("Heating...");}
       digitalWrite(heatingElementPin, LOW);
    break;
	   
	   case 4:
	     digitalWrite(heatingElementPin, HIGH);
	     startpwm=1;
	     if(millis() - timer_start >= 1000){
       timer_start = millis();
       tt4-=1;
       }
       if(displ==0){
       lcd.setCursor(14, 2);
       lcd.print(tt4);
       lcd.setCursor(17, 2);
       lcd.print("sec");
       lcd.setCursor(9, 2);
       lcd.print("mode:");
       lcd.setCursor(9, 3);
       lcd.print("Stabilize..");}
	     kwt=5;
       work_timer();
       work_timer2();
       
  	  break;
		
	   case 5:
        digitalWrite(heatingElementPin, HIGH);
        start_count+=1;
		    	if(start_count<=3){
			    switch_start=0;}
				   else{
				    switch_start=9;
				    start1=0;
				    working=0;
            tt1=1;
            tt2=80;
            tt3=600;
            tt4=60;
				   }
		break;

	   case 6:
		    digitalWrite(heatingElementPin, HIGH);
		    start1=1;
		    working=1;
        tt1=1;
        tt2=80;
        tt3=600;
        tt4=60;
		    switch_start=8;
		break;
    }

if(switch_start==0){
  if(val_f<900 or val_foto<900)switch_start=6;
  if(start_timer0.isReady())switch_start=1;
 }else{start_timer0.start();}

if(switch_start==1){
  if(val_f<900 or val_foto<900)switch_start=6;
  if(start_timer1.isReady())switch_start=2;
 }else{start_timer1.start();}

if(switch_start==3){
  if(val_f<700 or val_foto<750)switch_start=4;
  if(start_timer2.isReady())switch_start=5;
 }else{start_timer2.start();}

if(switch_start==4){
  if(start_timer3.isReady())switch_start=6;
 }else{start_timer3.start();}
}

void work_timer(){                                                                           //Функция таймер работы горелки
    static uint32_t oldMillis = millis();
    static uint16_t onOffTime;
    uint32_t newMillis = millis();
    boolean stoker_On = digitalRead(stokerAugerPin);
    
    if(newMillis-oldMillis>=onOffTime){
        oldMillis=millis();
        stoker_On=!stoker_On;
        onOffTime=(w_pause*2)+(((p_pause - w_pause)/2)*stoker_On);//!soker_On для мосфета, soker_On для реле управление по LOW.
        digitalWrite(stokerAugerPin,stoker_On);
    }   
}

void work_timer2(){ 
    static uint32_t oldMillis = millis();
    static uint16_t onOffTime;
    uint32_t newMillis = millis();
    boolean feeder_On = digitalRead(feederAugerPin);
    
    if(newMillis-oldMillis>=onOffTime){
        oldMillis=millis();
        feeder_On=!feeder_On;
        onOffTime=w_pause+((p_pause - w_pause)*feeder_On);//!soker_On для мосфета, soker_On для реле управление по LOW.
        digitalWrite(feederAugerPin,feeder_On);
    }        
}

void finishWork(){                                                                           //Функция остановки работы горелки
 static uint32_t timer_stop;
 static int tt=200;
 static int tt1=300; 
  switch(switch_stop){
	 case 0:
	    kwt=10;
		  if(millis() - timer_stop >= 1000){
      timer_stop = millis();
      tt-=1;
      }
		  if(displ==0){
      lcd.setCursor(14, 2);
      lcd.print(tt);
		  lcd.setCursor(17, 2);
      lcd.print("sec");
		  lcd.setCursor(9, 2);
      lcd.print("mode:");
		  lcd.setCursor(9, 3);
      lcd.print("STOPing...");}
      work_timer();
   break;
	 
	 case 1:
      digitalWrite(stokerAugerPin, HIGH);
      digitalWrite(feederAugerPin, HIGH);
      PWM_val=100;
      if(millis() - timer_stop >= 1000){
      timer_stop = millis();
      tt1-=1;
      }
      if(displ==0){
      lcd.setCursor(14, 2);
      lcd.print(tt1);
      lcd.setCursor(17, 2);
      lcd.print("sec"); 
      lcd.setCursor(9, 2);
      lcd.print("mode:");
      lcd.setCursor(9, 3);
      lcd.print("Shutdown...");}
   break;
   
   case 2:
      PWM_val=0;
      startpwm=0;
      tt=200;
      tt1=300;
      switch_stop=3;
   break;
	}
 
if(switch_stop==0){
    if(stop_timer1.isReady())
    switch_stop=1;}else{stop_timer1.start();}
if(switch_stop==1){
    if(stop_timer2.isReady()){
    PWM_val=0;
    switch_stop=2;}
    }else{stop_timer2.start();}
}

переменная называется "pr"

Smarodina
Offline
Зарегистрирован: 03.02.2018

еще она должна быть float...

sadman41
Offline
Зарегистрирован: 19.10.2016

EEPROM.put(123, pr);