По организации блока пользователя

На этом форуме Вы можете задать вопросы знатокам программы и автору.
Ответить
Аватара пользователя
RedSky
Лейтенант
Сообщения: 533
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 64
Откуда: Днепропетровск
Имя: Алексей

По организации блока пользователя

#1

Сообщение RedSky » 04.02.2017{, 15:50}

Подскажите, можно ли в блоках пользователя сделать так что-бы последняя строчка кода и в скетче тоже оказалась последней.
Делаю набор блоков для 5110 на библиотеках Adafruit с кириллицей и графикой. Будут разные блоки для строк по аналогии с 1602 и блоки фигур. Нужно что-то типа:

void loop()
{
display.setContrast(contrast);      // Устанавливаем контраст
display.clearDisplay();       // Очищаем дисплей
//тут ещё что-то будет
display.display();//конец скетча

Сейчас приходится разносить display.clearDisplay() и display.display() в первую и последнюю кучу, а хочется служебные функции уместить в один блок инициализации.

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

По организации блока пользователя

#2

Сообщение Boroda » 04.02.2017{, 16:46}

Не до конца понял...

Вот пример кода:



Код: Выделить всё

void setup()
{ // секция настроек
    ...............
    // код из платы
    ..............
} // конец секции настроек

void loop()
{ // секция цикла
    ..............................
    // код из платы
    ..............................
    // тут код вашего блока
    display.setContrast(contrast);      // Устанавливаем контраст
    display.clearDisplay();       // Очищаем дисплей
    //тут ещё что-то будет
    display.display();
    //конец вашего кода
    ..............................
    // код из платы
    ..............................
{ // конец секции цикла

// далее секция подпрограмм и прерываний

bool _isTimer(unsigned long startTime, unsigned long period )
{
    unsigned long currentTime;
    currentTime = millis();
    if (currentTime>= startTime) {return (currentTime>=(startTime + period));} else {return     (currentTime >=(4294967295-startTime+period));}
}

ISR(TIMER2_OVF_vect)
{ TCNT2=100;
    if(_PWDC >= 1000){asm volatile ("jmp 0x0000");}else{_PWDC = _PWDC+1;};
}
Что и как должно быть?
Последний раз редактировалось Boroda 04.02.2017{, 16:49}, всего редактировалось 1 раз.

Аватара пользователя
RedSky
Лейтенант
Сообщения: 533
Зарегистрирован: 19.12.2016{, 20:07}
Репутация: 64
Откуда: Днепропетровск
Имя: Алексей

По организации блока пользователя

#3

Сообщение RedSky » 05.02.2017{, 10:43}

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

Аватара пользователя
Boroda
Капитан
Сообщения: 836
Зарегистрирован: 01.05.2016{, 01:04}
Репутация: 38
Откуда: Коломна
Имя: Станислав
Контактная информация:

По организации блока пользователя

#4

Сообщение Boroda » 05.02.2017{, 11:24}

Тут надо понимать, что вывод на такой индикатор занимает очень много времени, поэтому обновлять его надо только по необходимости (переход по пунктам меню, изменение значения, которое отображается в данный момент на индикаторе и т.д.). Следовательно блоки подготовки и обработки данных вставляем в любое место программы, а вот блок вывода индикации необходимо поставить на отдельную плату с битом разрешения работы (в версии FLProg 2.3.1 появилась возможность запускать платы по условию).

Вложения
1899396.jpg
Последний раз редактировалось Boroda 05.02.2017{, 11:30}, всего редактировалось 1 раз.

Ответить

Вернуться в «Спросить у знатоков»