цифровая электроника
вычислительная техника
встраиваемые системы

 

Arduino и LCD-дисплей: советы и трюки

Автор: Mike(admin) от 5-03-2018, 18:35

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


Arduino и LCD-дисплей: советы и трюки

Тем не менее, несмотря на простоту таких дисплеев, у них есть некоторые особенности, знание о которых позволит использовать их лучшим образом.


Буфер ЖК-дисплея Arduino


Многие люди напрямую отправляют символ в ЖК-дисплей, реализуя непосредственное отображение своего кода на дисплее. Использование простого буфера может показаться излишним. Одним из положительных моментов является то, что вы получаете более предсказуемое поведение. Компромисс заключается в том, что вам нужно использовать еще несколько байт ОЗУ. Итак, как можно реализовать буфер?


Сначала нужно объявить некоторые массивы символов. В зависимости от вашего приложения может иметь смысл использовать многомерный массив. В противном случае можно иметь отдельные массивы для каждой строки. Например, можно объявить «line0» и «line1» каждый с 21 символом внутри (помните, что у вас всегда должен быть дополнительный символ для нулевого терминатора).



char line0[21];
char line1[21];

Измените буфер, когда ваш код должен внести изменения на ЖК-дисплей Arduino.



line0[4] = 8;
line0[5] = 5;
line0[6] = ‘C’

Наконец, используйте отдельную функцию lcd.print() для каждой строки. Затем в вашем бесконечном цикле loop() вызовите подпрограмму для обновления экрана.


Использование sprintf() для очистки символа


Представьте, что мы собрали температурный регистратор, который печатает текущую температуру на дисплее. Но во время отладки мы продолжаем наблюдать за тем, что температура отображается неправильно. Например, на экране сначала отображается 5 градусов.


Arduino и LCD-дисплей: советы и трюки

Затем 15.


Arduino и LCD-дисплей: советы и трюки

Но через некоторое время помещение остывает, а у нас отображается 85.


Arduino и LCD-дисплей: советы и трюки

Но 85 не холоднее 15. И в этом случае неважно, показывали ли мы в градусах Цельсия, Фаренгейта или Кельвина. Это значит, что по факту у нас 8 градусов, но символ «5» остался от предыдущего значения (15) и не стерся. Таким образом, здесь есть два варианта. Очищайте дисплей каждый раз, когда вы хотите напечатать на экране, или печатайте пустые символы в любом месте, которое должно быть пустым. Второй метод называется «заполнением». Второй метод более предпочтителен благодаря меньшим усилиям при работе дисплея и минимизации мерцания, поскольку при полном обновлении дисплея может быть заметно мерцание экрана.


Для изменения одного символа следует использовать функцию sprintf(). Вот пример ее использования:



char msg[21];
int temperature = 8;
sprintf(msg, “Temperature: %-7d”, temperature);

В этом случае мы приняли значение 7, так как слово Temperature занимает 14 символов из 20-ти доступных на строку.


Как печатать значения с запятой на ЖК-дисплее


Вы могли бы заметить в примере выше, что были использованы лишь целые числа для отображения температуры. Существует одна причина: sprintf() не поддерживает float. Ну, вернее, реализация avr-libc не поддерживает float без флага компилятора. Легким обходным решением является функция dtostrf() (эта функция кажется уникальной для avr-libc).



char float_str[8];
char line0[21];
float temperature = 15.12;
dtostrf(temperature,4,2,float_str);
sprintf(line0, “Temperature: %-7s”, float_str);

Используйте библиотеку Fast LiquidCrystal


Библиотека Fast LiquidCrystal оптимизирует отображение символов по I2C.


Не путайте номера столбцов и строк


Следует помнить, что для команд LCD столбцы идут на первом месте, затем строки. При этом счет начинается с 0. Например: lcd.setCursor(2,1) устанавливает курсор на третий столбец во второй строке, а не на второй столбец третьей строки.


Строки и столбцы ЖК-дисплея Arduino

Не забудьте макрос f()


Так же, как и при отладке с помощью Serial.print(), использование lcd.print () может отнимать немного оперативной памяти. Для предотвращения этого «оберните» все строки внутри знаменитого макроса F().


LCD.print(F(“Hello, World!”));



© digitrode.ru


Теги: Arduino, дисплеи




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий