Arduino:Библиотеки/LedDisplay: различия между версиями
Нет описания правки |
Нет описания правки |
||
Строка 204: | Строка 204: | ||
<references /> | <references /> | ||
[[Категория:Функция]] | [[Категория:Функция]] | ||
[[Категория:Библиотека LedDisplay]] | [[Категория:Библиотека LedDisplay]] | ||
[[Категория:LedDisplay]] | [[Категория:LedDisplay]] |
Версия от 11:14, 8 июля 2023
Содержание | Знакомство с Arduino | Продукты | Основы | Справочник языка Arduino | Примеры | Библиотеки | Хакинг | Изменения | Сравнение языков Arduino и Processing |
Библиотека LedDisplay[1]
Эта библиотека позволяет отправлять текст на LED-дисплеи типа Avago HCMS-29xx. Это очень маленькие дисплеи, которые состоят из одного ряда светодиодных матриц, обладающих размерами 5 на 7 светодиодов.
![](/ruwiki/images/2/26/HCMs297x_1.png)
Этот дисплей работает через синхронный последовательный интерфейс. Чтобы управлять им, понадобится пять выходных линий. Вот они:
- Данные (DATA) – передача данных от микроконтроллера
- Выбор регистра (RS) – здесь указывается регистр (для инструкций или данных)
- Тактовая частота (CLOCK) – задается микроконтроллером
- Вкл/Выкл (ENABLE) – включение/выключение дисплея
- Сброс (RESET) – сброс дисплея
Всю необходимую работу по управлению контактами и передаче данных библиотека LedDisplay делает за вас.
Чтоб использовать библиотеку, скачайте этот ZIP-файл, распакуйте его, а затем поместите в папку для библиотек IDE Arduino. Чтобы узнать, где находится эта папка, откройте IDE Arduino, кликните на Файл > Настройки (File > Preferences) – адрес папки будет указан в самом верху, в поле «Размещение папки скетчей» (Sketchbook location). Затем перезапустите IDE Arduino.
Примечание: Файл библиотеки зашифрован, поэтому перед использованием его нужно расшифровать. В противном случае вам будет выдавать ошибку «can not load Keyword.txt».
Начните со скетчей-примеров, идущих вместе с библиотекой.
Ниже пример цепи для использования библиотеки LedDisplay. На этой картинке, впрочем, есть ошибка: красные провода на 3-ем и 10-ом контактах должны быть подключены к +5 VDC, а не к «земле».
![](/ruwiki/images/5/5f/HCMs297x-bb_2.png)
Вот схема:
![](/ruwiki/images/b/ba/HCMs297x-schematic_3.png)
Кроме того, ZIP-файл с библиотекой также содержит файл для программы Fritzing со схемой HCMS-29xx, который называется «HCMS-29xx.fzpz». Пользуйтесь на здоровье.
Несколько дисплеев
Начиная с версии 0.3 и благодаря Марку Либману (Mark Liebman) библиотека LedDisplay позволяет управлять несколькими дисплеями.
Для этого соедините все линии дисплеев (кроме DATA) параллельно. Линию для передачи данных можно подключить как гирлянду справа налево – чтобы данные от первого дисплея шли к данным от второго и так далее.
Также убедитесь, что DATA-линия первого дисплея подключена к Arduino. Картинка ниже показывает схему подключения для трех дисплеев.
![](/ruwiki/images/7/77/HCMs297x_multiple_bb_4.png)
Теперь, когда все подключено, осталось лишь изменить в коде аргумент, отвечающий за длину дисплея: он должен быть суммой символов на всех дисплеях. К примеру, если у вас три дисплея, и у каждого по восемь символов, то эта сумма будет «24».
Функции библиотеки LedDisplay
Функция
LedDisplay myDisplay = LedDisplay(dataPin, registerSelect, clockPin, chipEnable, resetPin, displayLength)
Создает экземпляр класса LedDisplay. Первые пять аргументов – это номера контактов Arduino, подключенных к дисплею. Последний аргумент – это длина дисплея (для HCMS-291x и HCMS-297x это «8», для HCMS-290x и HCMS-296x это «4»). Тип данных – int.
Функция
myDisplay.begin()
инициализирует и сбрасывает дисплей.
Для печати
Функция
myDisplay.write(whatCharacter, whatPosition)
печатает указанный символ в указанной позиции дисплея. Тип данных первого аргумента – char, второго – byte.
Пример:
myDisplay.write('A', 4)
Кроме того, поскольку LedDisplay наследует у библиотеки Print функции print() и println(), их можно использовать и для печати на дисплей, но до тех пор, пока то, что вы печатаете, в него умещается. К примеру, ниже показано, как напечатать на дисплее миллисекунды и титульную строку.
myDisplay.print("ms:");
myDisplay.print(millis());
Кроме того, с их помощью можно делать и обычные для класса Print вещи:
int myInt = 12;
myDisplay.print(myInt, DEC);
// или
myDisplay.print(myInt, HEX);
Для перемещения строки
Если вы хотите автоматически двигать текстовую строку, то вам для начала понадобится функция setString(). Этот метод сохраняет символьную строку в объекте LedControl, после чего вы можете воспользоваться функцией scroll(), чтобы двигать строку влево и вправо.
Функция
setString(stringToDisplay)
отображает строку на дисплее. Аргумент stringToDisplay – собственно, строка, которую нужно показать. Тип данных – char. Если строка длиннее дисплея, то показывается только начало строки. Затем эту строку можно двигать при помощи функции scroll().
Функция
getString()
считывает строку, показанную на дисплее. Пример:
// считываем строку, показанную на дисплее (для отладки):
Serial.println(myDisplay.getString());
Функция
stringLenght()
считывает длину строки, показанной на дисплее. Более подробно смотрите в фрагменте ниже.
Функция
scroll(direction)
двигает изображение на экране при помощи строки, заданной функцией setString(). Тип данных – int. Если в качестве аргумента указать отрицательное число, строка будет двигаться влево, а если положительное, то вправо.
Пример:
...
void setup() {
...
// двигаем строку, которая длиннее дисплея:
myDisplay.setString("This is a very long string"); // "Это очень длинная строка"
}
void loop() {
// если строка выходит за пределы экрана, меняем направление
// движения; если строка вышла за пределы правой части экрана,
// то меняем направление, когда курсор достигает 8-ой позиции,
// а если влево, то когда курсор стоит на позиции, которая
// меньше длины строки.
if ((myDisplay.cursorPosition() > displayLength) ||
(myDisplay.cursorPosition() <= -(myDisplay.stringLength()))) {
myDirection = -myDirection;
delay(1000);
}
// двигаем строку:
myDisplay.scroll(myDirection);
delay(100);
}
Для управления курсором
- Функция clear() очищает дисплей.
- Функция home() ставит курсор в самую левую позицию.
- Функция setCursor(whichPosition) ставит курсор в заданную позицию. Аргумент whichPosition – позиция, в которую нужно поставить курсор. Тип данных – int.
- Функция getCursor() считывает позицию курсора.
Для управления дисплеем
- Функция setBrightness(bright) позволяет задавать яркость в диапазоне от «0» до «15». Тип данных – int.
- Функция loadControlRegister(dataByte) отправляет 8 бит одному из контрольных регистров. Тип данных – int. Другими словами, напрямую передает дисплею код определенной команды (о них можно почитать в «даташите» дисплея).
- Функция loadDotRegister() отправляет 320 бит регистру для хранения данных. Тип данных – int.
Чтобы узнать версию
Функция version() считывает номер версии библиотеки.
Примеры
- LedDisplay fade - Печать функцией print() и изменение яркости дисплея
- LedDisplay print - Печать функцией print()
- LedDisplay printAnalog - Печать аналоговых данных
- LedDisplay scroll - Перемещение строки влево/вправо
- LedDisplay scroll multiple - Печать на трех LED-дисплеях
- LedDisplay scroll serial - Печать данных из последовательного порта
- LedDisplay writeCharacters - Печать функцией write()