как сохранить переменную больше 256?
- Войдите на сайт для отправки комментариев
Пт, 19/08/2022 - 22:53
вообщем незадача, изменил код своего контроллера и появилась проблема, надо сохранить переменную в 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"
еще она должна быть float...
EEPROM.put(123, pr);