LAC 3.035
- Войдите на сайт для отправки комментариев
Ср, 10/03/2021 - 22:58
Здравствуйте, пытаюсь воссоздать программный модуль котла LAC 3.035 средствами ардуино. Пока идут заказанные печатки, пыхчу над скетчем. Путем проб и ошибок что-то начало получаться, скетч получился рабочим, но очень уж огромным. Могли бы Вы помочь разобраться как его уменьшить?
#include <OLED_I2C.h> OLED myOLED(4, 3, 4); extern uint8_t RusFont[]; extern uint8_t SmallFont[]; const int buttonPinSTART = A0; // вход для контроля пуск/стоп программы const int buttonPinFIRE = A1; // вход для контроля пламени const int ledPin2 = 2; // пин питания дисплея const int ledPin5 = 5; // вывод для реле вентилятора const int ledPin6 = 6; // вывод для реле аварии const int ledPin7 = 7; // вывод для реле воздушной заслонки const int ledPin8 = 8; // вывод для реле соленоид2 const int ledPin9 = 9; // вывод для реле розжига const int ledPin10 = 10; // вывод для реле соленоид1 const int ledPin13 = 13; // вывод поморгать) int buttonStateSTART = LOW; int buttonStateFIRE = HIGH; void(* resetFunc) (void) = 0; // объявляем функцию reset с адресом 0 void setup() { pinMode(buttonPinSTART, INPUT_PULLUP); pinMode(buttonPinFIRE, INPUT); pinMode(ledPin2, OUTPUT); // пин питания дисплея pinMode(ledPin5, OUTPUT); // Пин управления вентилятором форсунки pinMode(ledPin6, OUTPUT); // Пин сигнала аварии по исвчезновению факела pinMode(ledPin7, OUTPUT); // Пин управления воздушной заслонкой pinMode(ledPin8, OUTPUT); // Пин управления соленоидом второй форсунки pinMode(ledPin9, OUTPUT); // Пин управления транформатором розжига пламени pinMode(ledPin10, OUTPUT); // Пин управления соленоидом первой форсунки pinMode(ledPin13, OUTPUT); // Контроль по диоду на ардуинке digitalWrite(ledPin2, HIGH); // Подклюаем дисплей digitalWrite(ledPin6, LOW); // Отключаем ревун myOLED.begin(); myOLED.setFont(RusFont); // Инициализируем русский шрифт buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin13, HIGH); delay(500); digitalWrite(ledPin13, LOW); delay(500); resetFunc(); //Вызываем reset } buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); resetFunc(); //Вызываем reset delay(300); } myOLED.clrScr(); myOLED.print( "-----" , CENTER, 12); // Выводим текст myOLED.print( "-----" , CENTER, 30); // Выводим текст myOLED.print( "-----" , RIGHT, 48); // Выводим текст myOLED.update(); delay(2000); myOLED.clrScr(); myOLED.print( "GJLUJNJDRF R GECRE" , CENTER, 24); // Выводим текст ПОДГОТОВКА К ПУСКУ myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); resetFunc(); //Вызываем reset delay(300); } myOLED.clrScr(); myOLED.print( "JNRHSNBT DJPLEIYJQ" , CENTER, 24); // Выводим текст ОТКРЫТИЕ ВОЗДУШНОЙ myOLED.print( "PFCKJYRB" , CENTER, 36); // Выводим текст ЗАСЛОНКИ myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); delay(1000); resetFunc(); //Вызываем reset delay(300); } digitalWrite(ledPin7, HIGH); myOLED.clrScr(); myOLED.print( "PFGECR DTYNBKZNJHF" , CENTER, 24); // Выводим текст ЗАПУСК ВЕНТИЛЯТОРА myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); digitalWrite(ledPin7, LOW); delay(1000); resetFunc(); //Вызываем reset delay(300); } digitalWrite(ledPin5, HIGH); delay(300); myOLED.clrScr(); myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 12); // Выводим текст ПРОДУВКА КАМЕРЫ myOLED.print( "J:BLFYBT HJP:BUF" , CENTER, 24); // Выводим текст ОЖИДАНИЕ РОЗЖИГА myOLED.print( "XTHTP" , CENTER, 36); // Выводим текст ЧЕРЕЗ myOLED.print( "-15-" , CENTER, 48); // Выводим текст -15- myOLED.update(); delay(1000); myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14- myOLED.update(); delay(1000); myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13- myOLED.update(); delay(1000); myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12- myOLED.update(); delay(1000); myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11- myOLED.update(); delay(1000); myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10- myOLED.update(); delay(1000); myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09- myOLED.update(); delay(1000); myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08- myOLED.update(); delay(1000); myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07- myOLED.update(); delay(1000); myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06- myOLED.update(); delay(1000); myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05- myOLED.update(); delay(1000); myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04- myOLED.update(); delay(1000); myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03- myOLED.update(); delay(1000); myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02- myOLED.update(); delay(1000); myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); digitalWrite(ledPin5, LOW); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); digitalWrite(ledPin7, LOW); delay(1000); resetFunc(); //Вызываем reset delay(300); } digitalWrite(ledPin9, HIGH); // включение тр-р розжига myOLED.clrScr(); myOLED.print( "HJP:BU" , CENTER, 12); // Выводим текст РОЗЖИГ myOLED.print( "PFGECR AJHCEYRB 1" , CENTER, 24); // Выводим текст ЗАПУСК ФОРСУНКИ 1 myOLED.print( "XTHTP" , CENTER, 36); // Выводим текст ЧЕРЕЗ myOLED.print( "-3-" , CENTER, 48); // Выводим текст -3- myOLED.update(); delay(1000); myOLED.print( "-2-" , CENTER, 48); // Выводим текст -2- myOLED.update(); delay(1000); myOLED.print( "-1-" , CENTER, 48); // Выводим текст -1- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); delay(1000); myOLED.print( "DSRK>XTYBT" , CENTER, 36); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.update(); digitalWrite(ledPin9, LOW); digitalWrite(ledPin5, LOW); delay(2000); digitalWrite(ledPin7, LOW); delay(1000); resetFunc(); //Вызываем reset delay(300); } digitalWrite(ledPin10, HIGH); // включение соленоида 1й форсунки myOLED.clrScr(); myOLED.print( "HF<JNF AJHCEYRB 1" , CENTER, 12); // Выводим текст РАБОТА фОРСУНКИ 1 myOLED.print( "RJYNHJKM AFRTKF" , CENTER, 24); // Выводим КОНТРОЛЬ ФАКЕЛА myOLED.print( "XTHTP" , CENTER, 36); // Выводим текст ЧЕРЕЗ myOLED.print( "-5-" , CENTER, 48); // Выводим текст -5- myOLED.update(); delay(1000); myOLED.print( "-4-" , CENTER, 48);// Выводим текст -4- myOLED.update(); delay(1000); myOLED.print( "-3-" , CENTER, 48);// Выводим текст -3- myOLED.update(); delay(1000); digitalWrite(ledPin9, LOW); // выключение тр-р розжига myOLED.print( "-2-" , CENTER, 48);// Выводим текст -2- myOLED.update(); delay(1000); myOLED.print( "-1-" , CENTER, 48);// Выводим текст -1- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { myOLED.clrScr(); myOLED.print( "JNVTYF PFGECRF" , CENTER, 24); // Выводим текст ОТМЕНА ЗАПУСКА myOLED.update(); digitalWrite(ledPin10, LOW); delay(1000); myOLED.clrScr(); myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 12); // Выводим текст ПРОДУВКА КАМЕРЫ myOLED.print( "DSRK>XTYBT" , CENTER, 24); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.print( "XTHTP" , CENTER, 36); // Выводим текст ЧЕРЕЗ myOLED.print( "-15-" , CENTER, 48); // Выводим текст -15- myOLED.update(); delay(1000); myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14- myOLED.update(); delay(1000); myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13- myOLED.update(); delay(1000); myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12- myOLED.update(); delay(1000); myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11- myOLED.update(); delay(1000); myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10- myOLED.update(); delay(1000); myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09- myOLED.update(); delay(1000); myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08- myOLED.update(); delay(1000); myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07- myOLED.update(); delay(1000); myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06- myOLED.update(); delay(1000); myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05- myOLED.update(); delay(1000); myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04- myOLED.update(); delay(1000); myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03- myOLED.update(); delay(1000); digitalWrite(ledPin5, LOW); myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02- myOLED.update(); delay(1000); myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01- myOLED.update(); digitalWrite(ledPin7, LOW); delay(1000); myOLED.print( "----" , CENTER, 48); myOLED.update(); delay(1000); resetFunc(); //Вызываем reset delay(300); } } void loop() { buttonStateSTART = digitalRead(buttonPinSTART); buttonStateFIRE = digitalRead(buttonPinFIRE); if (buttonStateSTART == LOW && buttonStateFIRE == HIGH) { digitalWrite(ledPin8, HIGH); myOLED.clrScr(); myOLED.print( "RJNTK DDTLTY" , CENTER, 12); // Выводим текст КОТЕЛ ВВЕДЕН myOLED.print( "AJHCEYRF 2 UJNJDF" , CENTER, 24); // Выводим текст фОРСУНКА 2 ГОТОВА myOLED.print( "R PFGECRE" , CENTER, 36); // Выводим текст К ЗАПУСКУ myOLED.update(); delay(3000); } if (buttonStateSTART == HIGH && buttonStateFIRE == HIGH) { digitalWrite(ledPin8, LOW); digitalWrite(ledPin10, LOW); myOLED.clrScr(); myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 12); // Выводим текст ПРОДУВКА КАМЕРЫ myOLED.print( "DSRK>XTYBT" , CENTER, 24); // Выводим текст ВЫКЛЮЧЕНИЕ myOLED.print( "XTHTP" , CENTER, 36); // Выводим текст ЧЕРЕЗ myOLED.print( "-15-" , CENTER, 48); // Выводим текст -15- myOLED.update(); delay(1000); myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14- myOLED.update(); delay(1000); myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13- myOLED.update(); delay(1000); myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12- myOLED.update(); delay(1000); myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11- myOLED.update(); delay(1000); myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10- myOLED.update(); delay(1000); myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09- myOLED.update(); delay(1000); myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08- myOLED.update(); delay(1000); myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07- myOLED.update(); delay(1000); myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06- myOLED.update(); delay(1000); myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05- myOLED.update(); delay(1000); myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04- myOLED.update(); delay(1000); myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03- myOLED.update(); delay(1000); digitalWrite(ledPin5, LOW); myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02- myOLED.update(); delay(1000); myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01- myOLED.update(); digitalWrite(ledPin7, LOW); delay(1000); myOLED.print( "----" , CENTER, 48); myOLED.update(); delay(700); resetFunc(); //Вызываем reset delay(300); } if (buttonStateFIRE == LOW) { digitalWrite(ledPin6, HIGH); digitalWrite(ledPin8, LOW); digitalWrite(ledPin10, LOW); myOLED.clrScr(); myOLED.print( "FDFHBQYJT JNRK>XTYBT" , CENTER, 24); // Выводим текст АВАРИЙНОЕ ОТКЛЮЧЕНИЕ myOLED.print( "GJNE{ AFRTK" , CENTER, 12); // Выводим текст ПОТУХ ФАКЕЛ myOLED.print( "GHJLEDRF RFVTHS" , CENTER, 36); // Выводим текст ПРОДУВКА КАМЕРЫ myOLED.print( "-30-" , CENTER, 48); // Выводим текст -30- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-29-" , CENTER, 48);// Выводим текст -29- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-28-" , CENTER, 48);// Выводим текст -28- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-27-" , CENTER, 48);// Выводим текст -27- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-26-" , CENTER, 48);// Выводим текст -26- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-25-" , CENTER, 48);// Выводим текст -25- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-24-" , CENTER, 48);// Выводим текст -24- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-23-" , CENTER, 48);// Выводим текст -23- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-22-" , CENTER, 48);// Выводим текст -22- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-21-" , CENTER, 48);// Выводим текст -21- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-20-" , CENTER, 48);// Выводим текст -20- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-19-" , CENTER, 48);// Выводим текст -19- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-18-" , CENTER, 48);// Выводим текст -18- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-17-" , CENTER, 48);// Выводим текст -17- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-16-" , CENTER, 48);// Выводим текст -16- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-15-" , CENTER, 48);// Выводим текст -15- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-14-" , CENTER, 48);// Выводим текст -14- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-13-" , CENTER, 48);// Выводим текст -13- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-12-" , CENTER, 48);// Выводим текст -12- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-11-" , CENTER, 48);// Выводим текст -11- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-10-" , CENTER, 48);// Выводим текст -10- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-09-" , CENTER, 48);// Выводим текст -09- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-08-" , CENTER, 48);// Выводим текст -08- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-07-" , CENTER, 48);// Выводим текст -07- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-06-" , CENTER, 48);// Выводим текст -06- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-05-" , CENTER, 48);// Выводим текст -05- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-04-" , CENTER, 48);// Выводим текст -04- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-03-" , CENTER, 48);// Выводим текст -03- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } digitalWrite(ledPin5, LOW); myOLED.print( "-02-" , CENTER, 48);// Выводим текст -02- myOLED.update(); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.print( "-01-" , CENTER, 48);// Выводим текст -01- myOLED.update(); digitalWrite(ledPin7, LOW); delay(1000); buttonStateSTART = digitalRead(buttonPinSTART); if (buttonStateSTART == HIGH) { digitalWrite(ledPin6, LOW); } myOLED.clrScr(); myOLED.print( "RJNTK PF<KJRBHJDFY" , CENTER, 12); // Выводим текст КОТЕЛ ЗАБЛОКИРОВАН myOLED.print( "NHT<ETNCZ" , CENTER, 24); // Выводим текст ТРЕБУЕТСЯ myOLED.print( "GTHTPFGECR" , CENTER, 36); // Выводим текст ПЕРЕЗАПУСК myOLED.print( "NEV<KTHJV HF1" , CENTER, 48); // Выводим текст ТУМБЛЕРОМ РВ1 myOLED.update(); digitalWrite(ledPin6, LOW); delay(1000); for(;;); } }
Как видно в программе, я использовал вывод отсчета времени, чтобы при проведении отладочных работ, было видно в какой момент что срабатывает и через какие интервалы времени. Терзают меня сомнения в том, что часть кода, например строки с 373 по 583, с 312 по 359, с 241 по 285 и так далее можно реализовать как-то иначе, но вот как понять не могу.
http://arduino.ru/Reference/For
Раза в 3 можно сократить, если выкинуть графический дисплей и поставить символьный
Да уже аппаратно все собрано, что-либо менять в схеме уже поздно(
Почитал про for, возможно получится сделать отчет данным способом, но не пойму как при этом выводить на дисплей секунды, и к тому же размер боюсь меньше не станет, те же тапки по-моему получатся, только в профиль
размер боюсь меньше не станет, те же тапки по-моему получатся, только в профиль
как это меньше не станет? Вместо 29-ти вот таких блоков
будет один, плюс две обрамляющие строчки цикла For.
В этом блоке 7 строк, сейчас эти блоки занимают 7 * 29 = 203 строки. а будут занимать от силы 10 строк
С остальными повторами точно также.
Не увидел отчета об используемой памяти.
Откуда уверенность, что что-то надо сокращать?
Ну а в принципе, намек уже был дан: дисплей жрет более половины всей доступной памяти. Ну и строки, опять же, выводимые на дисплей, можно оставить только во flash при помощи PROGMEM.
И еще: если на экран не выводится ничего кроме текста, нет смысла использовать библиотеку с экранным буфером.
А какова цель уменьшения кода, если он рабочий и в память лезет? И до какого размера его надо уменьшить? На одну строку - это хорошо? А на сто? И, да кстати, что именно надо уменьшать, исходный код или размер скомпилированной прошивки?
А какова цель уменьшения кода, если он рабочий и в память лезет?
Откуда уверенность, что что-то надо сокращать?
мужики, ну вы смеетесь, что ли? или в код не заглядывали? Код написан методом тупого копирования блоков, причем один из блоков скопирован аж 29 раз!
Конечно, такое надо сокращать, а то девушки любить не будут... :)
А какова цель уменьшения кода, если он рабочий и в память лезет? И до какого размера его надо уменьшить? На одну строку - это хорошо? А на сто? И, да кстати, что именно надо уменьшать, исходный код или размер скомпилированной прошивки?
Дело в том, что код нормально работает и помещается в контроллере. Но нет предела совершенству, просто покоя не дает мысль, что можно сделать аккуратней и правильней. Заодно и подучиться.
Спасибо откликнувшимся, направление дали, буду пробовать)
Так на вопросы-то ответьте. Я что зря из задавал. Может завтра напишу чего, если ответите подробно.
Конечно, такое надо сокращать, а то девушки любить не будут... :)
Ну, если о девушках, так все наоборот - увеличивать рвутся :-)
Так на вопросы-то ответьте. Я что зря из задавал. Может завтра напишу чего, если ответите подробно.
b707 привильно подметил мое негодование по скетчу, слишком много я нафигачил повторяющихся блоков. К примеру отсчет тех же 30 секунд с выводом их на дисплей, реализовать бы в одном блоке с циклом for.
Правильная цитата "В этом блоке 7 строк, сейчас эти блоки занимают 7 * 29 = 203 строки. а будут занимать от силы 10 строк"
Убрал все повторяющиеся куски в циклы for - результа:
Было
Длина кода 595 строк
Стало: 285 строк
Результат неокончательный, сделал только самую очевидную оптимизацию. Уверен, что еще многое можно сократить.
Fantom81 - дерзайте
Но нет предела совершенству, просто покоя не дает мысль, что можно сделать аккуратней и правильней. Заодно и подучиться.
Такие вещи пишут событийными векторами. Например, событие сброс=01, событие продувка=02 и тд.
Далее на милсах сделай квант времени, который нужен, 0.1сек , 0.5сек или 1секунду.
В "суперцикле" loop заведи (например) три переменных, 1-предидущее 2-текущее 3-следующее состоЯНИЯ.
Значения их=0 - это неопределённое (после сброса) состояние.
Напиши отдельные функции: сброс, продувка, розжиг, авария и тд.
В суперцикле посредством кванта времени переключай вызов функций с контролем их исполнения и наличия ошибок (например не зажглось пламя или потухло) при помощи трёх переменных состояния.
Для дисплея сделай текстовый буфер или ссылку и скармливай функции вывода на дисплей.
Думаю, что в 150-200 строк "уместишься" )))
Так на вопросы-то ответьте. Я что зря из задавал. Может завтра напишу чего, если ответите подробно.
b707 привильно подметил мое негодование по скетчу
Я Вам задал простые вопросы.
1. до какого размера его надо уменьшить?
2. что именно надо уменьшать, исходный код или размер скомпилированной прошивки?
Потом отдельно попросил на них ответить. Как в бочку! Судя по отсутствию ответов, Вам нафиг не нужно ничего оптимизировать, Вы поговорить зашли
Возможно вы не внимательно прочитали ответ? Возможно я не умею правильно выразить свои мысли в тексте. b707 практически с начала переписки понял суть вопроса и дал верное направление. Повторюсь, что хочу убрать повторяющиеся блоки. В первом посте дал явно об этом понять.
:-)
Ну, убирайте.
Конечно, такое надо сокращать, а то девушки любить не будут... :)
не женское это дело - любить )))