Инверсия текста на LCD5110 с библиотекой LCD5110_Graph.h
- Войдите на сайт для отправки комментариев
Доброго времени суток!
Всем известкая библиотека "LCD5110_Graph.h" имеет функцию инверсии текста. Выглядит она так:
myGLCD.invertText(true); - Функция ВКЛючает инверсию текста
myGLCD.invertText(false); - Функция ВЫКЛючаетинверсию текста
Особенность этой инверсии в том, что любой текст, помещенный после функции myGLCD.invertText(true) + любое количество строк с текстом будут инвертироваться до тех пор пока не будет вставленна функция myGLCD.invertText(false). Это меня крайне не устраивает, так как при создании меню на LCD5110 я полузуюсь этими функциями чтобы обозначить в каком месте на экране мы находимся и какое значение меняем.
В связи с особенностью этой инверсии приходится много раз дублировать одни и те же надписи и строки для понятного отображения на дисплее. Это приводит к транжирству драгоценной памяти в МК.
Вот кусок примера который который демонстрирует как это дело выглядит.
void loop() { if (value < 3) {value = 0;} myGLCD.clrScr(); //Очистка экрана myGLCD.drawLine(0, 9, 83, 9); //Рисует линию myGLCD.print("Intervals Set", CENTER, 1); //Выводим внизу на дисплей LCD5110 "Interval" if (value == 0) { myGLCD.invertText(true); //Вкл. инвертиртный текст myGLCD.print("Interval 1 ", LEFT, 11); //Выводим внизу на дисплей LCD5110 "Interval 1" myGLCD.invertText(false); //Выкл. инвертиртный текст myGLCD.print("Interval 2 ", LEFT, 20); //Выводим внизу на дисплей LCD5110 "Interval 2" myGLCD.print("Interval 3 ", LEFT, 30); //Выводим внизу на дисплей LCD5110 "Interval 3" myGLCD.print("Interval 4 ", LEFT, 40); //Выводим внизу на дисплей LCD5110 "Interval 4" } else if (value == 1) { myGLCD.print("Interval 1 ", LEFT, 11); //Выводим внизу на дисплей LCD5110 "Interval 1" myGLCD.invertText(true); //Вкл. инвертиртный текст myGLCD.print("Interval 2 ", LEFT, 20); //Выводим внизу на дисплей LCD5110 "Interval 2" myGLCD.invertText(false); //Выкл. инвертиртный текст myGLCD.print("Interval 3 ", LEFT, 30); //Выводим внизу на дисплей LCD5110 "Interval 3" myGLCD.print("Interval 4 ", LEFT, 40); //Выводим внизу на дисплей LCD5110 "Interval 4" } else if (value == 2) { myGLCD.print("Interval 1 ", LEFT, 11); //Выводим внизу на дисплей LCD5110 "Interval 1" myGLCD.print("Interval 2 ", LEFT, 20); //Выводим внизу на дисплей LCD5110 "Interval 2" myGLCD.invertText(true); //Вкл. инвертиртный текст myGLCD.print("Interval 3 ", LEFT, 30); //Выводим внизу на дисплей LCD5110 "Interval 3" myGLCD.invertText(false); //Выкл. инвертиртный текст myGLCD.print("Interval 4 ", LEFT, 40); //Выводим внизу на дисплей LCD5110 "Interval 4" } else if (value == 3) { myGLCD.print("Interval 1 ", LEFT, 11); //Выводим внизу на дисплей LCD5110 "Interval 1" myGLCD.print("Interval 2 ", LEFT, 20); //Выводим внизу на дисплей LCD5110 "Interval 2" myGLCD.print("Interval 3 ", LEFT, 30); //Выводим внизу на дисплей LCD5110 "Interval 3" myGLCD.invertText(true); //Вкл. инвертиртный текст myGLCD.print("Interval 4 ", LEFT, 40); //Выводим внизу на дисплей LCD5110 "Interval 4" myGLCD.invertText(false); //Выкл. инвертиртный текст } if (value > 3) {value = 0;} myGLCD.update(); //Выгружаем из буфера в микроконтроллер } }
Подскажите идеи как перепахать в библиотеке эту функцию, чтобы это выглядило так:
myGLCD.invertText("Interval 4 ", LEFT, 40);
и после этого я например мог бы писать:
myGLCD.print("Interval 3 ", LEFT, 30);
А вот так выглядит сама функция в библиотеке:
void LCD5110::invertText(bool mode) { if (mode==true) cfont.inverted=1; else cfont.inverted=0; }
что мешает написать функцию с этими тремя операторами? причем не в библиотеке, а прямо в скетче?
Видимо или я не четко обозначил проблему или вы не внимательно прочитали.
Такой конструкцией я и пользуюсь но не в отдельной функции. Но это не удобно даже если вынести это в отдельную функци, не дает универсальности и тратит драгоценную память так как приходится задваивать и затраивать и т.д. текст который лаконично мог бы усаживаться в одной функции. Смотрите пример. Там именно так как вы пишите но без функции. Но строк у меня 4 в этом меню. Из-за такой конструкции мне приходется вызывать аж 4 раза одну и туже функцию с одним и тем же текстом. + текс разный может быть. Это все равно что еще 4 страницы написать на LCD5110
Если я правильно понимаю, то доп функция не уменьшит объем памяти в этом случае. Да и слова могут быть разними. Не только Interval.
А может я не понимаю что вы хотите мне сказать или не правильно пользую эти функции.
Я так понимаю требуется "склеить" функцию:
с одной из... в библиотеке:
Но не понимаю как это сделать
Если я правильно понимаю, то доп функция не уменьшит объем памяти в этом случае. Да и слова могут быть разними. Не только Interval.
А может я не понимаю что вы хотите мне сказать или не правильно пользую эти функции.
пока вы не написали фразы, что я выше выделил - я думал, вы понимаете. Теперь вижу. что нет :(
Функцию, ЕСТЕССТВЕННО, надо писать так, чтобы она принимала фразу. направление текста и положение КАК ПАРАМЕТРЫ. Тогда вы сможете ее использовать по всему скетчу, заменив ею бесконечные вызовы этих трех строк.
Если я правильно понимаю, то доп функция не уменьшит объем памяти в этом случае. Да и слова могут быть разними. Не только Interval.
А может я не понимаю что вы хотите мне сказать или не правильно пользую эти функции.
пока вы не написали фразы, что я выше выделил - я думал, вы понимаете. Теперь вижу. что нет :(
Функцию, ЕСТЕССТВЕННО, надо писать так, чтобы она принимала фразу. направление текста и положение КАК ПАРАМЕТРЫ. Тогда вы сможете ее использовать по всему скетчу, заменив ею бесконечные вызовы этих трех строк.
Спасибо. я попробую это сделать. А как с объемом памяти? Он уменьшится?
Я правильноВас понял? Если я наделаю максимально допустимые слова в отдельные функции по вашему примеру, то это уменьшит объем расходуемой памяти МК и уменьшит размер писанины одной страницы?
не надо ничего склеивать. Пока вы плохо разбираетесь вообще, что такое функция - не лезте в библиотеку.
Придется все-таки дать вам готовый код, хотя это и не в правилах этого форума. Добавьте эту функцию куда-нибудь в скетч, лучше в начало, перед setup()
Использование: вместо кода
вызываем
Если я наделаю максимально допустимые слова в отдельные функции по вашему примеру, то это уменьшит объем расходуемой памяти МК и уменьшит размер писанины одной страницы?
похоже, вы опять ничего не поняли. Какие "допустимые слова", какие "отдельные функции"???? ОДНА ФУНКЦИЯ из трех строк.
Вппрочем, я уже написал вам готовое.
Если я наделаю максимально допустимые слова в отдельные функции по вашему примеру, то это уменьшит объем расходуемой памяти МК и уменьшит размер писанины одной страницы?
похоже, вы опять ничего не поняли. Какие "допустимые слова", какие "отдельные функции"???? ОДНА ФУНКЦИЯ из трех строк.
Вппрочем, я уже написал вам готовое.
Это сообщение я написал до получения готового решения от Вас, уважаемый b707.
Спасибо Вам за терпение и за готовое решение.