LAC 3.035

Fantom81
Offline
Зарегистрирован: 10.03.2021

Здравствуйте, пытаюсь воссоздать программный модуль котла 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 и так далее можно реализовать как-то иначе, но вот как понять не могу.

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

Раза в 3 можно сократить, если выкинуть графический дисплей и поставить символьный

Fantom81
Offline
Зарегистрирован: 10.03.2021

Kakmyc пишет:
Раза в 3 можно сократить, если выкинуть графический дисплей и поставить символьный

Да уже аппаратно все собрано, что-либо менять в схеме уже поздно(

Fantom81
Offline
Зарегистрирован: 10.03.2021

Почитал про for, возможно получится сделать отчет данным способом, но не пойму как при этом выводить на дисплей секунды, и к тому же размер боюсь меньше не станет, те же тапки по-моему получатся, только в профиль

b707
Offline
Зарегистрирован: 26.05.2017

Fantom81 пишет:

 размер боюсь меньше не станет, те же тапки по-моему получатся, только в профиль

как это меньше не станет? Вместо 29-ти вот таких блоков

myOLED.print( "-22-" , CENTER, 48);// Выводим текст -22-
    myOLED.update();
    delay(1000);
    buttonStateSTART = digitalRead(buttonPinSTART);
    if (buttonStateSTART == HIGH) {
    digitalWrite(ledPin6, LOW);
  }

будет один, плюс две обрамляющие строчки цикла For.

В этом блоке 7 строк, сейчас эти блоки занимают 7 * 29 = 203 строки. а будут занимать от силы 10 строк

С остальными повторами точно также.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Не увидел отчета об используемой памяти.

Откуда уверенность, что что-то надо сокращать?

Ну а в принципе, намек уже был дан: дисплей жрет более половины всей доступной памяти. Ну и строки, опять же, выводимые на дисплей, можно оставить только во flash при помощи PROGMEM.

И еще: если на экран не выводится ничего кроме текста, нет смысла использовать библиотеку с экранным буфером.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

А какова цель уменьшения кода, если он рабочий и в память лезет? И до какого размера его надо уменьшить? На одну строку - это хорошо? А на сто? И, да кстати, что именно надо уменьшать, исходный код или размер скомпилированной прошивки?

b707
Offline
Зарегистрирован: 26.05.2017

ЕвгенийП пишет:

А какова цель уменьшения кода, если он рабочий и в память лезет?

andriano пишет:

Откуда уверенность, что что-то надо сокращать?

мужики, ну вы смеетесь, что ли? или в код не заглядывали? Код написан методом тупого копирования блоков, причем один из блоков скопирован аж 29 раз!

Конечно, такое надо сокращать, а то девушки любить не будут... :)

 

Fantom81
Offline
Зарегистрирован: 10.03.2021

ЕвгенийП пишет:

А какова цель уменьшения кода, если он рабочий и в память лезет? И до какого размера его надо уменьшить? На одну строку - это хорошо? А на сто? И, да кстати, что именно надо уменьшать, исходный код или размер скомпилированной прошивки?

Дело в том, что код нормально работает и помещается в контроллере. Но нет предела совершенству, просто покоя не дает мысль, что можно сделать аккуратней и правильней. Заодно и подучиться.

Спасибо откликнувшимся, направление дали, буду пробовать)

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Так на вопросы-то ответьте. Я что зря из задавал. Может завтра напишу чего, если ответите подробно.

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

b707 пишет:

Конечно, такое надо сокращать, а то девушки любить не будут... :)

Ну, если о девушках, так все наоборот - увеличивать рвутся :-)

Fantom81
Offline
Зарегистрирован: 10.03.2021

ЕвгенийП пишет:

Так на вопросы-то ответьте. Я что зря из задавал. Может завтра напишу чего, если ответите подробно.

b707 привильно подметил мое негодование по скетчу, слишком много я нафигачил повторяющихся блоков. К примеру отсчет тех же 30 секунд с выводом их на дисплей, реализовать бы в одном блоке с циклом for.

Правильная цитата "В этом блоке 7 строк, сейчас эти блоки занимают 7 * 29 = 203 строки. а будут занимать от силы 10 строк" 

b707
Offline
Зарегистрирован: 26.05.2017

Убрал все повторяющиеся куски в циклы for - результа:

 Было

Длина кода 595 строк

Скетч использует 9362 байт (30%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1542 байт (75%) динамической памяти, оставляя 650 байт для локальных переменных.

Стало: 285 строк

Скетч использует 7700 байт (25%) памяти устройства. Всего доступно 30720 байт.
Глобальные переменные используют 1398 байт (68%) динамической памяти, оставляя 650 байт для локальных переменных.

Результат неокончательный, сделал только самую очевидную оптимизацию. Уверен, что еще многое можно сократить.

Fantom81 - дерзайте

-NMi-
Offline
Зарегистрирован: 20.08.2018

Fantom81 пишет:

Но нет предела совершенству, просто покоя не дает мысль, что можно сделать аккуратней и правильней. Заодно и подучиться.

Такие вещи пишут событийными векторами. Например, событие сброс=01, событие продувка=02 и тд.

Далее на милсах сделай квант времени, который нужен, 0.1сек , 0.5сек или 1секунду.

В "суперцикле" loop заведи (например) три переменных, 1-предидущее 2-текущее 3-следующее состоЯНИЯ.

Значения их=0 - это неопределённое (после сброса) состояние.

Напиши отдельные функции: сброс, продувка, розжиг, авария и тд.

В суперцикле посредством кванта времени переключай вызов функций с контролем их исполнения и наличия ошибок (например не зажглось пламя или потухло) при помощи трёх переменных состояния.

Для дисплея сделай текстовый буфер или ссылку и скармливай функции вывода на дисплей.

Думаю, что в 150-200 строк "уместишься" )))

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Fantom81 пишет:

ЕвгенийП пишет:

Так на вопросы-то ответьте. Я что зря из задавал. Может завтра напишу чего, если ответите подробно.

b707 привильно подметил мое негодование по скетчу

Я Вам задал простые вопросы. 

1. до какого размера его надо уменьшить?
2. что именно надо уменьшать, исходный код или размер скомпилированной прошивки?

Потом отдельно попросил на них ответить. Как в бочку! Судя по отсутствию ответов, Вам нафиг не нужно ничего оптимизировать, Вы поговорить зашли

Fantom81
Offline
Зарегистрирован: 10.03.2021

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

:-)

Ну, убирайте.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

b707 пишет:

Конечно, такое надо сокращать, а то девушки любить не будут... :)

не женское это дело - любить )))