Главная » Статьи » Arduino с нуля » Работа с Arduino |
В проектах, нередко, требуется выведение особых символов на экран. Но так как стандартный набор LCD ограничен, а иногда и вовсе только английскими буквами, то приходится создавать их в ручную. В этом уроке мы разберем пошаговое создание своих символов, на примере загрузочной строки, которую можно использовать в большом количестве проектов и устройств.
Компоненты, схема устройства и сам дисплей, будут такими же, как и в предыдущем уроке. Изменится только сам код программы. Давайте начнем.
Для начала берем основу кода, для работы с LCD дисплеем: //подключение библиотеки для работы с LCD #include <LiquidCrystal.h> //инициализируем LCD с указанием контактов LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); void setup() { //начало работы, с указанием размерности экрана lcd.begin(16, 2); } void loop() { }
Описывать данный скетч мы не будем, так как подробно каждая строка рассматривается в предыдущем уроке. Теперь давайте научимся создавать свои символы и выводить их на экран.
Добавление символов происходит с помощью создания массива, размерностью 5 на 7 (что соответствует размеру одного прямоугольника, входящего в дисплей), состоящего из бинарных чисел (0 и 1): byte line_1[8] = { B00000, B00000, B00000, B00000, B00000, B00000, B00000, } Как видите, сейчас массив заполнен одними нулями. То есть ни один из пикселей прямоугольника сейчас не задействован. Чтобы сформировать символ, нужно в массив добавить единицы. Получается, что там где в массиве 0 - пиксель не включен, а где 1 - пиксель включен. Например вот так выглядит символ "П": byte line_1[8] = { B11111, B10001, B10001, B10001, B10001, B10001, B10001, };
Теперь нужно данный символ инициализировать, для этого в функции setup() пишем следующее:
lcd.createChar(1,line_1);
, где 1 - это порядковый номер, а line_1 - это имя массива байтов. Вот так выглядит полный код программы: //подключение библиотеки для работы с LCD #include <LiquidCrystal.h> //инициализируем LCD с указанием контактов LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); //создаем свои символы byte line_1[8] = { B11111, B10001, B10001, B10001, B10001, B10001, B10001, }; void setup() { //начало работы, с указанием размерности экрана lcd.begin(16, 2); //инициализируем массив lcd.createChar(1,line_1); //сдвигаем курсор на первый столбец и первую строку lcd.setCursor(0,0); //выводим символ на экран lcd.write(1); } void loop() { } Если залить скетч в Arduino, то мы увидим букву "П", стоящую в первом столбце, первой строки. Теперь давайте немного усложним задачу, и создадим линию загрузки. Для этого нужно создать пять дополнительных символов, отвечающие за каждый из столбцов дисплея. И также их инициализировать: //подключение библиотеки для работы с LCD #include <LiquidCrystal.h> //инициализируем LCD с указанием контактов LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); //создаем свои символы byte line_1[8] = { B10000, B10000, B10000, B10000, B10000, B10000, B10000, }; byte line_2[8] = { B11000, B11000, B11000, B11000, B11000, B11000, B11000, }; byte line_3[8] = { B11100, B11100, B11100, B11100, B11100, B11100, B11100, }; byte line_4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, }; byte line_5[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; void setup() { //начало работы, с указанием размерности экрана lcd.begin(16, 2); //инициализируем массивы lcd.createChar(0,line_1); lcd.createChar(1,line_2); lcd.createChar(2,line_3); lcd.createChar(3,line_4); lcd.createChar(4,line_5); //сдвигаем курсор на одну второй столбце, первой строки lcd.setCursor(1,0); //выводим сообщение lcd.print("GM-project.com"); } Теперь нужно выводить строку. Для этого создаем двойной цикл. Внешний цикл, по i, будет отвечать за номер столбца в строке. А внутренний цикл, по j, будет отвечать за вывод соответствующего столбца на экран. Таким образом, функция loop() будет иметь вид: void loop() { //сдвигаем курсор на первый столбец и вторую строку lcd.setCursor(0,1); //очищаем эту строку lcd.print(" "); //16 пробелов //выводим на экран загрузку for (int i = 0; i < 16 ; i++) { for (int j = 0; j < 5 ; j++) { lcd.setCursor(i,1); lcd.write(j); delay(10); } } }
Первым делом мы переводим курсор на вторую строку и очищаем ее: //сдвигаем курсор на первый столбец и вторую строку lcd.setCursor(0,1); //очищаем эту строку lcd.print(" "); //16 пробелов Теперь выводим эту строку на экран. Сначала мы берем первый прямоугольник (i = 0). И этот прямоугольник начинаем заполнять линиями. От line_1, до line_5. Таким образом, последним нашим действием, в данном прямоугольнике, будет вывод на экран line_5. Потом мы берем второй прямоугольник, и проделываем с ним тоже самое. И так все 16 областей: for (int i = 0; i < 16 ; i++) { for (int j = 0; j < 5 ; j++) { lcd.setCursor(i,1); lcd.write(j); delay(10); } } Когда вся наша строка заполнена, цикл прерывается. Мы очищаем всю строку, и снова начинаем ее заполнение с нуля. Полный код программы: //подключение библиотеки для работы с LCD #include <LiquidCrystal.h> //инициализируем LCD с указанием контактов LiquidCrystal lcd(12, 11, 10, 5, 4, 3, 2); //создаем свои символы byte line_1[8] = { B10000, B10000, B10000, B10000, B10000, B10000, B10000, }; byte line_2[8] = { B11000, B11000, B11000, B11000, B11000, B11000, B11000, }; byte line_3[8] = { B11100, B11100, B11100, B11100, B11100, B11100, B11100, }; byte line_4[8] = { B11110, B11110, B11110, B11110, B11110, B11110, B11110, }; byte line_5[8] = { B11111, B11111, B11111, B11111, B11111, B11111, B11111, }; void setup() { //начало работы, с указанием размерности экрана lcd.begin(16, 2); //инициализируем массивы lcd.createChar(0,line_1); lcd.createChar(1,line_2); lcd.createChar(2,line_3); lcd.createChar(3,line_4); lcd.createChar(4,line_5); //сдвигаем курсор на одну второй столбце, первой строки lcd.setCursor(1,0); //выводим сообщение lcd.print("GM-project.com"); } void loop() { //сдвигаем курсор на первый столбец и вторую строку lcd.setCursor(0,1); //очищаем эту строку lcd.print(" "); //16 пробелов //выводим на экран загрузку for (int i = 0; i < 16 ; i++) { for (int j = 0; j < 5 ; j++) { lcd.setCursor(i,1); lcd.write(j); delay(10); } } }
Видео работы устройства:
Задания для самостоятельного выполнения:
Двенадцатый урок проекта "Arduino с нуля" подошел к концу. Надеюсь тема была для вас полезной, и вы узнали что-нибудь новое. Также надеюсь, что при выполнении заданий у вас не возникнет вопросов и вы справитесь самостоятельно. Если же что-нибудь не будет получаться, или у вас появятся какие-либо вопросы, не стесняйтесь, и оставляйте их в комментариях или же на форуме.
Если Вам понравился наш урок, поделитесь им с друзьями.
←Предыдущий урок | Следующий урок→
| |
Просмотров: 13889 | |
Всего комментариев: 0 | |