Доброго времени суток всем. Комрады, подскажите, как оптимизировать процесс. Очень тупит тач в части изменения значения времени... Хочется, сделать так, что б не ждать по пол-минуты... ЗЫ: можно просто указать направление, куда копать...
убрать из кода все delay() Они вроде небольшие, но их много и выполняются по нескольку раз - вот и результат И еще - не пробовали использовать массивы и процедуры с параметрами? Делать на каждую из 4 ламп по отдельной копии одной и той же длинной процедуры - это крайне неээфективный код. А если ламп станет 20 - двадцать процедур копировать станете?
Спасибо за совет. Но что именно включить в массив? Можно написать одну функцию с неопределенным номером лампы и ее каким то образом включать? Откровенно говоря, пока не понятно.( Принимаю любые мысли)
Была похожая проблема с тачскрином. У Вас отрисовка информации на дисплее идет постоянно или по событию? У меня проблема была как раз в этом, МК была постоянно занята отрисовкой и получалось, что опрос тачскрина был слишком редким. Хорошо подсказали, поставил условия отрисовки по событию и тачскрин ожил.
Дык вы ПОСТОЯННО что-то рисуете на экране. Вопрос - ЗАЧЕМ? На экране надо рисовать только то, что изменилось. По итогу - у вас МК занят только тупой постоянной перерисовкой экрана, отсюда все проблемы. Идеологически правильно: 1. Делаем отдельные функции для отрисовки того или иного контента; 2. Делаем флаги статуса - нуждается тот или иной контент в перерисовке; 3. Внутри каждой функции отрисовки проверяем - если не надо перерисовывать - вываливаемся, иначе - отрисовываем; 4. В loop вызываем функции перерисовки; При таком подходе у вас будет перерисовываться только то, что изменилось. Следующий шаг - ООП, как правило, когда нужно экранное меню с большим количеством экранов - проще это сделать на ООП, тогда мешанины в loop и setup не будет, совсем. Если интересует архитектура с ООП - пишите, покажу один из вариантов.
А под numb указывать номер лампы? Т.е., написать одну функцию и в зависимости от вызова вставлять те или иные данные. Например, номер? или координаты?
Те, нужно придумать систему флагов и их вызова, чтобы шаблон в "фигуру" складывался нужного назначения?
Если одна строка "лампы" и изменение ее параметров, то в целом понятно. Но как тогда прорисовать все 4?
Все переписывать не буду, напишу кусок: Код (C++): int X_Lt=10, Y_Lt=35, R_Lt=12; long X_Lt_1=X_Lt, Y_Lt_1=Y_Lt; long X_Lt_2=X_Lt, Y_Lt_2=Y_Lt+34; long X_Lt_3=X_Lt, Y_Lt_3=Y_Lt+68; long X_Lt_4=X_Lt, Y_Lt_4=Y_Lt+102; Заменим переменные X_lt* и y_lt* на массивы: Код (C++): int X_Lt =10,Y_Lt=35, R_Lt=12; long X_Lts[4] = {X_Lt,X_Lt,X_Lt,X_LT}; long Y_Lts[4] = {Y_Lt,Y_Lt+34,Y_Lt+68,Y_Lt+102}; с остальными переменными делаем похожим образом функции Lamp_* заменяем на : Код (C++): void Lamp(int n){ g.textRus(n,X_Lts[n],Y_Lts[n]); g.drawCircle(X_Lts[n]+32,Y_Lts[n]+10,R_Lt); geo.fillTriangle(X_Lts[n]+55,Y_Lt[n]+10,X_Lts[n]+76,Y_Lts[n]-2,X_Lts[n]+76,Y_Lts[n]+22); // Изменение таймера на "-" на включение лампы if (ht_On[n]>=0 && ht_On[n]<=9){ // и т.д } функцию Код (C++): void Light_L() { g.setColor (VGA_YELLOW); g.setBackColor(VGA_BLUE); g.setFont(Arial_round_16x24); Lamp_1(); Lamp_2(); Lamp_3(); Lamp_4(); } заменяем на Код (C++): void Light_L() { g.setColor (VGA_YELLOW); g.setBackColor(VGA_BLUE); g.setFont(Arial_round_16x24); Lamp(0); Lamp(1); Lamp(2); Lamp(3); } лампы будут с 0 нумироваться
далее фунцию Lamp разбить на 2. первая функция только мониторит тач. вторая функция только рисует. в цикле луп мы вызываем функцию мониоринга тачскрина. если засекли нажатие, то вызываем функцию отрисовки
Доброго времени суток. По итогу родилось это: см. вложение Но возникла проблема. Вот тут: Код (C++): if (x_T_M[n]>=X_Lt_m[n]+57 && x_T_M[n]<=X_Lt_m[n]+75 && y_T_M[n]>=Y_Lt_m[n] && y_T_M[n]<=Y_Lt_m[n]+20 && val_D[n]==2 /*Состояние освещения вкл лампы*/ && val_On[n]==1);// Условие таймера на включение часов { ht_On[n]= ht_On[n]-1; Serial.print("-ht_On[n]="); Serial.println(ht_On[n]); if (ht_On[n] == 24) { ht_On[n] = 0; } } При обращении в любой точке экрана к тачу ht_On уходит в минус. Как следствие, не работает увеличение ht_On на +. Если все условие закоментировать, работает как часы. Комрады, помогите найти косяк....
вероятно, всех так испугал кусочек кода с кучей условий и "внятными" именами массивов. типа Xt_m_n[n] и Lt_x_k[n], что никто не рискует лезть дальше... Обилие непонятных имен с подчеркиваниями лично мне напомнили клинопись