Горелка на отработке для котла (прошу помощи)
- Войдите на сайт для отправки комментариев
Ср, 18/03/2020 - 21:29
Всем привет, хотел попросить помощи у понимающих, так как с ардуино только начинаю общаться, но у человека попросил скетч но в нем выдает ошибку не могу понять, так как он, не такой как простой код, с реле и лампочками проще разобраться поэтому прошу помощи, так как программа должн следить за розжигом, теплоносителем, надовом маслом и огнем, и так же иметь экран не 1602 а хочу 2004 применить. сам код выложил ниже. за ранее благодарен. так если можно то подписать комментариями строки действий.
/*-----( Import needed libraries )-----*/ #include <Wire.h> // Comes with Arduino IDE #include <LiquidCrystal_I2C.h> //Дисплей #include <EEPROM.h> //ЕЕПРОМ #include <OneWire.h> //Шина 1-wire #include <DallasTemperature.h>//Датчики температуры #include <TimedAction.h>//Таймеры /*-----( Описание PIN компонентов )-----*/ /* LCD дисплей: SDA=4 SCL=5 */ #define BUTTON_PIN 0 //кнопки (аналоговый) #define FLAME_PIN 2 //датчик пламени #define OILLEVEL_PIN 3 //датчик уровня бака #define ONE_WIRE_BUS 10 //датчики температуры #define RELAY1_PIN 4 // реле первичного воздуха #define RELAY2_PIN 5 // реле вторичного воздуха #define RELAY3_PIN 6 // реле розжига #define RELAY4_PIN 7 // реле нагрева масла #define RELAY5_PIN 8 // реле нагрева штока #define RELAY6_PIN 9 // реле наполнения бака #define TEMPOIL_PIN 1 // аналоговый датчик температуры масла #define TEMPWATER_PIN 2 // аналоговый датчик температуры воды #define TEMPSHTOCK_PIN 3 // аналоговый датчик температуры штока /*-----( Declare Constants )-----*/ //Номера кнопок const int BUTTON_NONE = 0; const int BUTTON_MENU = 1;//меню const int BUTTON_UP = 2;//+ const int BUTTON_DOWN = 3;//- const int BUTTON_START = 4;//старт const int BUTTON_STOP = 5;//стоп const int BUTTON_DELAY = 300; //задержка между нажатиями кнопок (в мс) const int Stage1Time = 10; //задержка после включения реле первичного воздуха (в секундах) const int Stage2Time = 10; //задержка после включения реле вторичного воздуха и реле розжига (в секундах) const byte TempSensor = 1; //Тип температурных датчиков: 0 - OneWire, 1 - аналоговые const float Toil_min = 30; //минимальное значение температуры масла const float Toil_max = 120; //максимальное значение температуры масла const float Tsht_min = 30; //минимальное значение температуры масла const float Tsht_max = 120; //максимальное значение температуры масла const float Tmin_min = 10; //минимальное значение минимальной температуры воды const float Tmin_max = 90; //максимальное значение максимальной температуры воды const float Tmax_min = 35; //минимальное значение максимальной температуры воды const float Tmax_max = 90; //максимальное значение максимальной температуры воды const int countMax = 3; //количество попыток розжига /*-----( Declare Variables )-----*/ int button; //нажатая кнопка byte offset=0; //пункт меню byte offsetmax=8; //пунктов в меню boolean PowerOnFlag=HIGH; //Флаг включения устройства boolean StartFlag=LOW; //Флаг старта программы boolean StartingStatus=LOW; //Флаг запуска процедуры старта boolean HeatingFlag=LOW; //Флаг работы горелки boolean ErrorFlag=LOW; //Флаг ошибки boolean ErrorStopFlag=LOW; //Флаг аварийного стопа boolean Flame = LOW; //флаг наличия пламени boolean OilLevel = LOW; //датчик уровня бака boolean OilLevelStatus = LOW; //флаг уровня бака boolean OilLevelTimer; //таймер в меню unsigned long OilLevelTime = 0; //время запуска реле бака int Count = 0; //счетчик попыток розжига float TempOil, TempWater, TempShtock; //Температуры с датчиков масла, воды, штока boolean ChangeTempFlag=LOW; //Флаг изменения значения температур через меню float Toil = EEPROM_float_read(0); //установленная температура масла float Tsht = EEPROM_float_read(12); //установленная температура масла float Tmin = EEPROM_float_read(4); //установленная минимальная температура воды float Tmax = EEPROM_float_read(8); //установленная максимальная температура воды long OilLevelDelay = EEPROM_float_read(10); //время наполнения бака (в секундах) //Реле boolean relayStatus1=HIGH;//реле первичного воздуха boolean relayStatus2=HIGH;//реле вторичного воздуха boolean relayStatus3=HIGH;//реле розжига boolean relayStatus4=HIGH;//реле тэна масла boolean relayStatus5=HIGH;//реле штока boolean relayStatus6=HIGH;//реле наполнения бака /*-----( Declare objects )-----*/ // Set the LCD I2C address LiquidCrystal_I2C lcd(0x27, 2, 1, 0, 4, 5, 6, 7, 3, POSITIVE); // Установка OneWire общение с любыми устройствами OneWire OneWire oneWire(ONE_WIRE_BUS); // Pass our oneWire reference to Dallas Temperature. DallasTemperature sensors(&oneWire); // arrays to hold device addresses DeviceAddress TempOilAdr,TempWaterAdr,TempShtockAdr; /*-----( идентификаторы таймеров )-----*/ TimedAction flame_timer_id = TimedAction(500, Flame_OnOff); //вызов функции датчика пламени TimedAction monitor_timer_id = TimedAction(1000, monitor); //монитор параметров TimedAction gt_timer_id = TimedAction(1000, getTemp); //вызов функции считывания температуры TimedAction control_timer_id = TimedAction(500, control); //Управление горелкой в зависимости от температуры воды TimedAction oilheat_timer_id = TimedAction(500, oilheat); //Управление подогревом масла TimedAction oillevel_timer_id = TimedAction(500, OilLevelControl); //Управление уровнем бака TimedAction shtockheat_timer_id = TimedAction(500, shtockheat); //Управление подогревом штока TimedAction stopByError_timer_id = TimedAction(500, stopByError); //стоп горелки по ошибке TimedAction lostFlame_timer_id = TimedAction(500, lostFlame); //потеря пламени TimedAction stopper_timer_id = TimedAction(500, stopper); //аварийный стоп /*-----( ----- )-----*/ /*----( SETUP: RUNS ONCE )----*/ void setup() { Serial.begin(9600); monitor_timer_id.disable(); control_timer_id.disable(); //Настройка пин pinMode(FLAME_PIN,INPUT); //Датчик пламени pinMode(OILLEVEL_PIN,INPUT); //Датчик уровня бака //пин реле pinMode(RELAY1_PIN,OUTPUT); digitalWrite(RELAY1_PIN,HIGH); pinMode(RELAY2_PIN,OUTPUT); digitalWrite(RELAY2_PIN,HIGH); pinMode(RELAY3_PIN,OUTPUT); digitalWrite(RELAY3_PIN,HIGH); pinMode(RELAY4_PIN,OUTPUT); digitalWrite(RELAY4_PIN,HIGH); pinMode(RELAY5_PIN,OUTPUT); digitalWrite(RELAY5_PIN,HIGH); pinMode(RELAY6_PIN,OUTPUT); digitalWrite(RELAY6_PIN,HIGH); //дисплей lcd.begin(20,4); // initialize the lcd for 20 chars 4 lines //главное меню mainMenu(); //шина 1-wire if (TempSensor==0) { sensors.begin(); if (!sensors.getAddress(TempOilAdr, 0)) Serial.println("Unable to find address for Device TempOilAdr"); if (!sensors.getAddress(TempWaterAdr, 1)) Serial.println("Unable to find address for Device TempWaterAdr"); if (!sensors.getAddress(TempShtockAdr, 2)) Serial.println("Unable to find address for Device TempShtockAdr"); //set the resolution to 12 bit sensors.setResolution(TempOilAdr, 12); sensors.setResolution(TempWaterAdr, 12); sensors.setResolution(TempShtockAdr, 12); sensors.requestTemperatures(); } /*if (TempSensor==1) { analogReference(INTERNAL); }*/ //Чтение значения таймера if (EEPROM_float_read(16)==1) {OilLevelTimer=HIGH;} else {OilLevelTimer=LOW;} //установка начальных значений температуры, если они не считаны из ЕЕПРОМ if (isnan(Toil)||Toil<Toil_min) { Toil=Toil_min; } if (isnan(Tsht)||Tsht<Tsht_min) { Tsht=Tsht_min; } if (isnan(Tmin)||Tmin<Tmin_min) { Tmin=Tmin_min; } if (isnan(Tmax)||Tmax<Tmax_min) { Tmax=Tmax_max; } if (isnan(OilLevelDelay)||OilLevelDelay<0) { OilLevelDelay=0; } }/*--(end setup )---*/ /*----( LOOP: RUNS CONSTANTLY )----*/ void loop() { timerCheck(); if (!PowerOnFlag) { button = getPressedButton(); } else { button = BUTTON_START; PowerOnFlag=LOW; } switch (button) { case BUTTON_MENU: // кнопка меню mainMenu(); break; case BUTTON_UP: //кнопка вверх switch (offset) { case 1: //Старт горелки if (!StartFlag) { StartingStatus=HIGH; offset=offsetmax; monitor_timer_id.enable(); monitor(); lcd.setCursor(0, 0); lcd.print(" STARTING... "); control_timer_id.enable(); control_timer_id.check(); } break; case 2: //Увеличить температуру масла ChangeTempFlag=HIGH; if (Toil<Toil_max) { Toil++; lcd.setCursor(12, 1); lcd.print(Toil); } break; case 3: //Увеличить температуру штока ChangeTempFlag=HIGH; if (Tsht<Tsht_max) { Tsht++; lcd.setCursor(12, 1); lcd.print(Tsht); } break; case 4: //Увеличить минимальную температу воды ChangeTempFlag=HIGH; if (Tmin<Tmin_max) { Tmin++; if (Tmin>=Tmax) { Tmin--; lcd.setCursor(0, 0); lcd.print(" T min >= T max "); } lcd.setCursor(12, 1); lcd.print(Tmin); } break; case 5: //Увеличить максимальную температу воды ChangeTempFlag=HIGH; if (Tmax<Tmax_max) { Tmax++; if (Tmax<=Tmin) { Tmax--; lcd.setCursor(0, 3); lcd.print(" T max <= T min "); } lcd.setCursor(12, 1); lcd.print(Tmax); } break; case 6: //Таймер уровня масла ChangeTempFlag=HIGH; OilLevelTimer=!OilLevelTimer; lcd.setCursor(12, 1); if (OilLevelTimer) {lcd.print("On ");} else {lcd.print("Off");} break; case 7: //Увеличить время наполнения бака (в секундах) ChangeTempFlag=HIGH; if (OilLevelDelay<999) { OilLevelDelay++; lcd.setCursor(12, 1); lcd.print(OilLevelDelay); } break; } break; case BUTTON_DOWN: switch (offset) { case 1: //Cтоп горелки if (StartFlag) { control_timer_id.disable(); Stopping(); StartFlag=LOW; } lcd.setCursor(0, 0); lcd.print("Programm is stopped!"); break; case 2: //температура масла ChangeTempFlag=HIGH; if (Toil>Toil_min) { Toil--; lcd.setCursor(12, 1); lcd.print(Toil); } break; case 3: //температура штока ChangeTempFlag=HIGH; if (Tsht>Tsht_min) { Tsht--; lcd.setCursor(12, 1); lcd.print(Tsht); } break; case 4: //минимальная температура воды ChangeTempFlag=HIGH; if (Tmin>Tmin_min) { Tmin--; if (Tmin>=Tmax) { Tmin++; lcd.setCursor(0, 3); lcd.print(" T min >= T max "); } lcd.setCursor(12, 1); lcd.print(Tmin); } break; case 5: //максимальная температура воды ChangeTempFlag=HIGH; if (Tmax>Tmax_min) { Tmax--; if (Tmax<=Tmin) { Tmax++; lcd.setCursor(0, 3); lcd.print(" T max <= T min "); } lcd.setCursor(12, 1); lcd.print(Tmax); } break; case 6: //Таймер уровня масла ChangeTempFlag=HIGH; OilLevelTimer=!OilLevelTimer; lcd.setCursor(12, 1); if (OilLevelTimer) {lcd.print("On ");} else {lcd.print("Off");} break; case 7: //Уменьшить время наполнения бака (в секундах) ChangeTempFlag=HIGH; if (OilLevelDelay>0) { OilLevelDelay--; lcd.setCursor(12, 1); lcd.print(OilLevelDelay); } break; } break; case BUTTON_START://кнопка Старт if (!StartFlag) { StartingStatus=HIGH; offset=offsetmax; monitor_timer_id.enable(); monitor(); lcd.setCursor(0, 0); lcd.print(" STARTING... "); control_timer_id.enable(); control_timer_id.check(); } break; case BUTTON_STOP://Кнопка стоп if (StartFlag) { control_timer_id.disable(); Stopping(); StartFlag=LOW; } lcd.setCursor(0, 0); lcd.print("Programm is stopped!"); break; } }/* --(end main loop )-- */ /*-----( Моргание экраном при ошибке )-----*/ void blink_ERR() { for(int i = 0; i< 5; i++) { lcd.backlight(); delay(250); lcd.noBacklight(); delay(250); } lcd.backlight(); // finish with backlight on }/* --( end blink_ERR )-- */ /*-----( Управление горелкой в зависимости от температуры воды )-----*/ void control() { if (StartFlag||StartingStatus) { switch (HeatingFlag) { case HIGH: //горелка горит if (TempWater>=Tmax) { Stopping(); } break; case LOW: //горелка потушена if (TempWater<Tmin&&TempOil>=Toil&&TempShtock>=Tsht) { Starting(); } break; } } }/* --( end control )-- */ /*-----( запись в ЕЕПРОМ )-----*/ void EEPROM_float_write(int addr, float val) { byte *x = (byte *)&val; for(byte i = 0; i < 4; i++) EEPROM.write(i+addr, x[i]); }/* --( end EEPROM_float_write )-- */ /*-----( чтение из ЕЕПРОМ )-----*/ float EEPROM_float_read(int addr) { byte x[4]; for(byte i = 0; i < 4; i++) x[i] = EEPROM.read(i+addr); float *y = (float *)&x; return y[0]; }/* --( end EEPROM_float_read )-- */ /*-----( считываем значение с датчика пламени )-----*/ void Flame_OnOff() { Flame = !digitalRead(FLAME_PIN); }/* --( end Flame_OnOff )-- */ /*-----( Считывание нажатых кнопок )-----*/ int getPressedButton() { int buttonValue = analogRead(BUTTON_PIN); // считываем значения с аналогового входа Serial.println(buttonValue); if (buttonValue < 100) { delay(BUTTON_DELAY); return BUTTON_MENU; } else if (buttonValue < 200) { delay(BUTTON_DELAY); return BUTTON_UP; } else if (buttonValue < 400){ delay(BUTTON_DELAY); return BUTTON_DOWN; } else if (buttonValue < 600){ delay(BUTTON_DELAY); return BUTTON_START; } else if (buttonValue < 800){ delay(BUTTON_DELAY); return BUTTON_STOP; } return BUTTON_NONE; }/* --( end getPressedButton )-- */ /*-----( чтение температуры с датчиков )-----*/ void getTemp() { if (TempSensor==0) { TempOil = sensors.getTempC(TempOilAdr); TempWater = sensors.getTempC(TempWaterAdr); TempShtock = sensors.getTempC(TempShtockAdr); sensors.requestTemperatures(); } if (TempSensor==1) { int reading = analogRead(TEMPOIL_PIN); reading = analogRead(TEMPOIL_PIN); TempOil = reading * 5.0/1024 * 100;// 9.31; reading = analogRead(TEMPWATER_PIN); TempWater = reading * 5.0/1024 * 100;// 9.31; reading = analogRead(TEMPSHTOCK_PIN); TempShtock = reading * 5.0/1024 * 100;// 9.31; } }/* --( end getTemp )-- */ /*-----( потеря пламени )-----*/ void lostFlame() { if (StartFlag&&HeatingFlag&&!Flame) { Stopping(); if (TempOil>=Toil&&TempShtock>=Tsht) { Starting(); } } }/* --( end lostFlame )-- */ /*-----( Главное меню )-----*/ void mainMenu() { //Если параметры изменены, записываем их в ЕЕПРОМ if (ChangeTempFlag) { switch(offset) { case 2: EEPROM_float_write(0,Toil); break; case 3: EEPROM_float_write(12,Tsht); break; case 4: EEPROM_float_write(4,Tmin); break; case 5: EEPROM_float_write(8,Tmax); break; case 6: if (OilLevelTimer) {EEPROM_float_write(16,1);} else {EEPROM_float_write(16,0);} break; case 7: EEPROM_float_write(20,OilLevelDelay); break; } ChangeTempFlag=LOW; } offset++; if (offset > offsetmax) {lcd.clear(); offset=1;} switch(offset) { case 1: monitor_timer_id.disable(); lcd.setCursor(0, 1); lcd.print(" START/STOP "); break; case 2: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" T oil = "); lcd.setCursor(12, 1); lcd.print(Toil); break; case 3: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" T sht = "); lcd.setCursor(12, 1); lcd.print(Tsht); break; case 4: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" T min = "); lcd.setCursor(12, 1); lcd.print(Tmin); break; case 5: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" T max = "); lcd.setCursor(12, 1); lcd.print(Tmax); break; case 6: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" Timer = "); lcd.setCursor(12, 1); if (OilLevelTimer) {lcd.print("On ");} else {lcd.print("Off");} break; case 7: lcd.setCursor(0, 0); lcd.print(" "); lcd.setCursor(0, 3); lcd.print(" "); lcd.setCursor(0, 1); lcd.print(" Delay = "); lcd.setCursor(12, 1); lcd.print(OilLevelDelay); break; case 8: monitor_timer_id.enable(); break; } }/* --( end mainMenu )-- */ /*-----( Монитор )-----*/ void monitor() { flame_timer_id.check(); gt_timer_id.check(); lcd.setCursor(0, 1); lcd.print(" To= C"); lcd.setCursor(0, 2); lcd.print(" Tw= C"); lcd.setCursor(0, 3); lcd.print(" Ts= C"); lcd.setCursor(0, 1); lcd.print("Dly: "); lcd.setCursor(0, 2); lcd.print("Tmr: "); lcd.setCursor(0, 3); lcd.print("Fl: "); //статус if (!StartingStatus) { lcd.setCursor(0, 0); if (StartFlag) {lcd.print("Programm is started!");} else {lcd.print("Programm is stopped!");} } //Т масла lcd.setCursor(13, 1); lcd.print(TempOil); //Т воды lcd.setCursor(13, 2); lcd.print(TempWater); //Т штока lcd.setCursor(13, 3); lcd.print(TempShtock); //время наполнения бака lcd.setCursor(4, 1); lcd.print(OilLevelDelay); //Таймер lcd.setCursor(4, 2); if (OilLevelTimer) {lcd.print("On ");} else {lcd.print("Off");} //Пламя lcd.setCursor(3, 3); if (Flame) {lcd.print("On ");} else {lcd.print("Off");} }/* --( end monitor )-- */ /*-----( Задержка с проверкой таймеров каждую секунду )-----*/ void myDelay(int Delay) { unsigned long currentTime=millis(); int Time; do { Time=int ((millis()-currentTime)/1000); oilheat_timer_id.check(); shtockheat_timer_id.check(); oillevel_timer_id.check(); monitor_timer_id.check(); stopper_timer_id.check(); if (ErrorStopFlag) {break;} } while (Time<Delay); }/* --( end myDelay )-- */ /*-----( Управление подогревом масла )-----*/ void oilheat() { gt_timer_id.check(); if ((TempOil<Toil)&&(StartFlag||StartingStatus)&&(TempWater<Tmin)) { relayOn(4); } else { relayOff(4); } }/* --( end oilheat )-- */ /*-----( контроль уровня бака )-----*/ void OilLevelControl() { OilLevel = !digitalRead(OILLEVEL_PIN); if (OilLevel&&!OilLevelStatus&&!relayStatus1) { relayOn(6); if (OilLevelTimer) {OilLevelTime=millis();} OilLevelStatus = HIGH; } if (!OilLevel) { relayOff(6); OilLevelStatus = LOW; } if (OilLevelTimer&&int ((millis()-OilLevelTime)/1000)>=OilLevelDelay) { relayOff(6); } }/* --( end OilLevelControl )-- */ /*-----( включение реле )-----*/ void relayOn(int adr) { switch (adr) { case 1: relayStatus1 = LOW; //включить реле digitalWrite(RELAY1_PIN, relayStatus1); break; case 2: relayStatus2 = LOW; //включить реле digitalWrite(RELAY2_PIN, relayStatus2); break; case 3: relayStatus3 = LOW; //включить реле digitalWrite(RELAY3_PIN, relayStatus3); break; case 4: relayStatus4 = LOW; //включить реле digitalWrite(RELAY4_PIN, relayStatus4); break; case 5: relayStatus5 = LOW; //включить реле digitalWrite(RELAY5_PIN, relayStatus5); break; case 6: relayStatus6 = LOW; //включить реле digitalWrite(RELAY6_PIN, relayStatus6); break; } }/* --( end relayOn )-- */ /*-----( выключение реле )-----*/ void relayOff(int adr) { switch (adr) { case 1: relayStatus1 = HIGH; //выключить реле digitalWrite(RELAY1_PIN, relayStatus1); break; case 2: relayStatus2 = HIGH; //выключить реле digitalWrite(RELAY2_PIN, relayStatus2); break; case 3: relayStatus3 = HIGH; //выключить реле digitalWrite(RELAY3_PIN, relayStatus3); break; case 4: relayStatus4 = HIGH; //выключить реле digitalWrite(RELAY4_PIN, relayStatus4); break; case 5: relayStatus5 = HIGH; //выключить реле digitalWrite(RELAY5_PIN, relayStatus5); break; case 6: relayStatus6 = HIGH; //выключить реле digitalWrite(RELAY6_PIN, relayStatus6); break; } }/* --( end relayOff )-- */ /*-----( Управление подогревом штока )-----*/ void shtockheat() { gt_timer_id.check(); if ((TempShtock<Tsht)&&(StartFlag||StartingStatus)&&(TempWater<Tmin)) { relayOn(5); } else { relayOff(5); } }/* --( end shtockheat )-- */ /*-----( СТАРТ ГОРЕЛКИ )-----*/ void Starting() { StartingStatus=HIGH; Count++; lcd.setCursor(0, 0); lcd.print("STAGE 1, PLEASE WAIT"); relayOn(1);//реле первичного воздуха myDelay(Stage1Time); if (ErrorStopFlag) {ErrorStopFlag=LOW; return;} lcd.setCursor(0, 0); lcd.print("STAGE 2, PLEASE WAIT"); relayOn(2);//реле вторичного воздуха relayOn(3);//реле розжига myDelay(Stage2Time); if (ErrorStopFlag) {ErrorStopFlag=LOW; return;} flame_timer_id.check(); if (Flame) { relayOff(3); lcd.setCursor(0, 0); lcd.print("Programm is started!"); StartFlag=HIGH; HeatingFlag=HIGH; ErrorFlag=LOW; } else { Stopping(); if (Count<countMax) //повторный пуск { ErrorFlag=HIGH; Starting(); } } Count=0; StartingStatus=LOW; }/* --( end Starting )-- */ /*-----( СТОП ГОРЕЛКИ )-----*/ void Stopping() { relayOff(1); relayOff(2); relayOff(3); HeatingFlag=LOW; }/* --( end Stopping )-- */ /*-----( АВАРИЙНЫЙ СТОП ГОРЕЛКИ )-----*/ void stopper() { if (StartingStatus&&getPressedButton()==BUTTON_STOP) { StartFlag=LOW; ErrorFlag=HIGH; ErrorStopFlag=HIGH; StartingStatus=LOW; stopByError(); } }/* --( end stopper )-- */ /*-----( стоп по ошибке )-----*/ void stopByError() { if (ErrorFlag) { ErrorFlag=LOW; StartFlag=LOW; control_timer_id.disable(); Stopping(); blink_ERR(); } }/* --( end stopByError )-- */ /*-----( Проверка таймеров )-----*/ void timerCheck() { stopByError_timer_id.check(); oilheat_timer_id.check(); shtockheat_timer_id.check(); oillevel_timer_id.check(); flame_timer_id.check(); gt_timer_id.check(); monitor_timer_id.check(); control_timer_id.check(); lostFlame_timer_id.check(); }/* --( end timerCheck )-- */ /* ( THE END ) */
у человека попросил скетч но в нем выдает ошибку
А человек что говорит?
я спрашивал он говорит что все компилировалось, я попросил версии библиотек он скинул, просто у него может нет времени особо копаться, просто понимаю что переменные не проходят так понимаю по переводу, но как все поправить так что бы все было по проще что бы можно было легче корректировать..
Ну, а компилятор чего говорит? Вы сообщения можете скопипастить?
Ну, а компилятор чего говорит? Вы сообщения можете скопипастить?
Вы используете не ту библиотеку EEPROM, которую имел в виду автор. Ищите правильную.
я проверял и удалял не нужные, ту которую он скинул так же могу прикрепить, до этого ругался на тайминги....
вот с его библиотекой тоже самое пишет по ошибкам.
http://arduino.ru/forum/programmirovanie/zapis-i-chtenie-eeprom-peremenn...
вот с его библиотекой тоже самое пишет по ошибкам.
Ну, что Вам сказать? Вам пишут, что нету такого "EEPROM_float_read". Вариантов ровно два: 1) искать библиотеку, в которой есть; или 2) переписывать код, чтобы убрать этот вызов, заменив его на что-то другое, что есть в наличии.
По другому - никак. А чего Вы ожидали?
Да я бы побоялся этот код использовать, учитывая, что там такое встречается:
if (EEPROM_float_read(16)==1)
Объявить как положено и скомпилируется.
Кстати там таких функций, все.
ТС, перетащи setup и loop в самый низ кода.
Объявить как положено и скомпилируется.
Ну, и pдорово. А я, грешным делом, код-то и не посмотрел - ввёл человека в заблуждение :-(
Всем хей вроде перетащил на верх и стал выдавать только по дисплею ошибку,
А вот это точно не та библиотека.
В той, что я использую (названия совпадают), в конструктор передается всего 3 параметра: адрес, размер по Х, размер по У
Типа того
LiquidCrystal_I2C lcd(0x27,16,2);
а еще вот так выдает с папкими это понятно пишет какую использует
Замени POSITIVE на '1'
ругается могу библиотеку закинуть если можете посмотреть?
Не буду смотреть.
Я и так вижу, что там параметров слишком много, о чём компилятор в общем то и ругается.
Раз автор не хочет вам помочь с настройкой, стало быть что то не так в отношениях автор/заказчик.
Я пас.
Всем привет, хотел попросить помощи у понимающих, так как с ардуино только начинаю общаться, но у человека попросил скетч но в нем выдает ошибку не могу понять, так как он, не такой как простой код, с реле и лампочками проще разобраться поэтому прошу помощи, так как программа должн следить за розжигом, теплоносителем, надовом маслом и огнем, и так же иметь экран не 1602 а хочу 2004 применить.
Я может тоже, как и Вы, хочу хер в 25см (шутю, не хочу). Разберитесь с программой сами или закажите за деньги. Матери Терезы где-то там...
Скоро лето.
:-)
Всем привет, хотел попросить помощи у понимающих, так как с ардуино только начинаю общаться, но у человека попросил скетч но в нем выдает ошибку не могу понять, так как он, не такой как простой код, с реле и лампочками проще разобраться поэтому прошу помощи, так как программа должн следить за розжигом, теплоносителем, надовом маслом и огнем, и так же иметь экран не 1602 а хочу 2004 применить.
Я может тоже, как и Вы, хочу хер в 25см (шутю, не хочу). Разберитесь с программой сами или закажите за деньги. Матери Терезы где-то там...
вы мне напоминаете водителей в мегаполисе которые едут за учеником и сигналят ему, потому что они злые из за того что им когда то так же сигналили))) есть поговорка когда взлетел не забывай тех с кем ползал, бывают падения и те от кого ты так высоко взлетел не воспримут тебя и заклюют что бы не забывал это)))
Со скечем разобрался, все свободны осталось дописать меню)))
Объявить как положено и скомпилируется.
Кстати там таких функций, все.
ТС, перетащи setup и loop в самый низ кода.
спасибо большое наставили на путь, с Ардуино просто первый раз с таким большим скечем, и небыли прописаны loop ... все сменил вставил и все прошло.
Со скечем разобрался, все свободны осталось дописать меню)))
Дык
Со скечем разобрался, все свободны осталось дописать меню)))
По статистике те, кто работают моском, живут малость больше, чем те, кто не работает им. Дык я Вам жисть удлинняю
Со скечем разобрался, все свободны осталось дописать меню)))
По статистике те, кто работают моском, живут малость больше, чем те, кто не работает им. Дык я Вам жисть удлинняю
прям как вопрос заданный политикам : Почему корова какает лепешками, а коза горошками?)))