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-ти вот таких блоков
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 строк
С остальными повторами точно также.
Не увидел отчета об используемой памяти.
Откуда уверенность, что что-то надо сокращать?
Ну а в принципе, намек уже был дан: дисплей жрет более половины всей доступной памяти. Ну и строки, опять же, выводимые на дисплей, можно оставить только во 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 практически с начала переписки понял суть вопроса и дал верное направление. Повторюсь, что хочу убрать повторяющиеся блоки. В первом посте дал явно об этом понять.
:-)
Ну, убирайте.
Конечно, такое надо сокращать, а то девушки любить не будут... :)
не женское это дело - любить )))