сокращение повторяющего кода или повторявших команд
- Войдите на сайт для отправки комментариев
Пт, 25/01/2019 - 00:14
void DisPlay(){ if (regimDP!=BS) { //очищаем дисплей при переходе на любой другой режим отображения lcd.clear(); timerDP=0; regimDP=BS;} if (BS>4) { //самодиагностика if (timerDSB==0) lcd.backlight(); //вкл подсветку дисплея if (timerDSB==5) lcd.noBacklight(); //выкл подсветку дисплея if (timerDP>16) { //таймер 1 строки, меняем вывод информации flagDPa=!flagDPa; timerDP=0;} lcd.setCursor(0, 0); if (flagDPa==0) { lcd.print(L"ОБРЫВ ЛИНИИ ИЛИ");} if (flagDPa==1) { lcd.print(L" ДЕФЕКТ ДАТЧИКА");} if (BS==5) { lcd.setCursor(4, 1); lcd.print(L"ПОЛ "); lcd.print(TempPol); lcd.print(L"°C");} if (BS==6) { lcd.setCursor(2, 1); lcd.print(L"ВОЗДУХ "); lcd.print(TempAir); lcd.print(L"°C");} if (BS==7) { lcd.setCursor(3, 1); lcd.print(L"ПЕЧЬ "); lcd.print(TempStove); lcd.print(L"°C");} if (BS==8) { lcd.setCursor(0, 1); lcd.print(L"ДОМ "); lcd.print(TempHause); lcd.print(L"°С "); lcd.print(" f="); lcd.print(Humidity); lcd.print("%");}} if (BS<4) { //отображаем диагностиеу lcd.backlight(); //вкл подсветку дисплея if (timerCH>252) BS=4; //выходит из диагностики через 63 сек lcd.setCursor(0, 0); lcd.print(L"ОШИБКИ "); if (BS==0) { lcd.print(TP-0); //количество ощибок lcd.setCursor(0, 1); lcd.print(L"ПОЛ "); lcd.print(TempPol); lcd.print(L"°C");} if (BS==1) { lcd.print(TA-0); //количество ощибок lcd.setCursor(0, 1); lcd.print(L"ВОЗДУХ "); lcd.print(TempAir); lcd.print(L"°C");} if (BS==2) { lcd.print(TS-0); //количество ощибок lcd.setCursor(0, 1); lcd.print(L"ПЕЧЬ "); lcd.print(TempStove); lcd.print(L"°C");} if (BS==3) { lcd.print(TH-0); //количество ощибок lcd.setCursor(0, 1); lcd.print(L"ДОМ "); lcd.print(TempHause); lcd.print(L"°С "); lcd.print(" f="); lcd.print(Humidity); lcd.print("%");}} if (BS==4) { //рабочий режим if (BR==1 && Fan==0){ //ни чего не работает lcd.noBacklight(); //выкл подсветку дисплея lcd.clear();} // очистили дисплей if (FOTO==0 && Fan==0) { //работает т. п., но темно в помещении lcd.noBacklight(); //выкл подсветку дисплея lcd.clear();} // очистили дисплей // вывели показание на дисплей 1 строка if (FOTO==1 && Fan==0 && BR!=1) { // не работает вентилято и печ, отображаем т. п. lcd.setCursor(0, 0); lcd.print(L"ПОЛ "); lcd.print(TempPol); lcd.print(L"°C"); lcd.print(" "); if (warms==1){ lcd.setCursor(11, 0); lcd.print(L"ГРЕЕТ");} if (warms==0){ lcd.setCursor(11, 0); lcd.print(" ");}} if (Fan>0 && Fan<4) { // работает печь lcd.setCursor(0, 0); lcd.print(L"ПЕЧЬ "); lcd.print(TempStove); lcd.print(L"°C "); lcd.print(Fan-0); //отображаем режим 1, 2, 3 //if (Fan==1) lcd.print("1"); //if (Fan==2) lcd.print("2"); //if (Fan==3) lcd.print("3"); lcd.print(L" скор");} if (Fan>3 && Fan<7){ // работает вентиляция lcd.setCursor(0, 0); lcd.print(L"Вентиляция реж "); lcd.print(Fan-3);} //отображаем режим 1, 2, 3 //if (Fan==4)lcd.print("1"); //if (Fan==5)lcd.print("2"); //if (Fan==6)lcd.print("3"); if ((Fan>0 && Fan<7) || (BR!=1 && FOTO==1)) { //2 срока lcd.setCursor(0, 1); lcd.print(L"ДОМ"); lcd.setCursor(4, 1); lcd.print(TempHause); lcd.print(L"°С"); lcd.setCursor(11, 1); lcd.print("f="); lcd.setCursor(13, 1); lcd.print(Humidity); lcd.print("%"); lcd.backlight();}}} //вкл подсветку дисплея
например строки 33 по 39, 65 по 71, 110 по 119 одно и тоже действие, как их можно выполнить одной командой
http://arduino.ru/Reference/FunctionDeclaration
Смею предположить, что через оператор "или"....
не очень подходит
http://arduino.ru/Reference/FunctionDeclaration
я правильно понял
А что, как есть в память не влезает?
влезает, интересно просто как уменьшить размер
я правильно понял
Идею-то может и поняли (повторяющиеся куски вынести в функцию), но реализовали совсем не правильно.
Сущность "haus" вобще ни к чему. Строки 2 и 3 выкидываем. Ваша функция ничего не возвращает, значит ей незачем иметь тип int. В строке 4 меняем int на void. Во всех местах, где вы пытаетесь её вызвать словом haus (например в строке 110) пишете вместо него: second_line();
Далее осваиваете функции с параметрами, тогда ещё сможете украсить Ваш скетч.
Ну и говоря "уменьшить размер" обычно подразумевает уменьшить занимаемую скомпилированным скетчем память микроконтроллера. Здесь правильнее говорить об удобстве, повышении читабельности и т.д.
Спасибо, прилично уменьшает
Sketch uses 14 248 bytes (44%) of program storage space. Maximum is 32 256 bytes.
Global variables use 765 bytes (37%) of dynamic memory, leaving 1 283 bytes for local variables. Maximum is 2 048 bytes.
Следующая часто повторяющаяся последовательность - установить курсор в координаты, вывести строку, вывести значение, вывести ещё строку. Вот и сделайте функцию, которая всё это выполняет, а координаты, строки и числа передавайте ей в качестве параметров. Текст ещё существенно сократится.
можно какой ни будь пример, а то я пробую и все получается на увеличение