Arduino:Библиотеки/LedDisplay

Материал из Онлайн справочника
Версия от 11:42, 18 февраля 2024; Myagkij (обсуждение | вклад)
(разн.) ← Предыдущая версия | Текущая версия (разн.) | Следующая версия → (разн.)
Перейти к навигацииПерейти к поиску

Перевод: Максим Кузьмин
Проверка/Оформление/Редактирование: Мякишев Е.А.


Библиотека LedDisplay[1]

Эта библиотека позволяет отправлять текст на LED-дисплеи типа Avago HCMS-29xx. Это очень маленькие дисплеи, которые состоят из одного ряда светодиодных матриц, обладающих размерами 5 на 7 светодиодов.

Этот дисплей работает через синхронный последовательный интерфейс. Чтобы управлять им, понадобится пять выходных линий. Вот они:

  • Данные (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, а не к «земле».

Вот схема:

Кроме того, ZIP-файл с библиотекой также содержит файл для программы Fritzing со схемой HCMS-29xx, который называется «HCMS-29xx.fzpz». Пользуйтесь на здоровье.

Несколько дисплеев

Начиная с версии 0.3 и благодаря Марку Либману (Mark Liebman) библиотека LedDisplay позволяет управлять несколькими дисплеями.

Для этого соедините все линии дисплеев (кроме DATA) параллельно. Линию для передачи данных можно подключить как гирлянду справа налево – чтобы данные от первого дисплея шли к данным от второго и так далее.

Также убедитесь, что DATA-линия первого дисплея подключена к Arduino. Картинка ниже показывает схему подключения для трех дисплеев.

Теперь, когда все подключено, осталось лишь изменить в коде аргумент, отвечающий за длину дисплея: он должен быть суммой символов на всех дисплеях. К примеру, если у вас три дисплея, и у каждого по восемь символов, то эта сумма будет «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() считывает номер версии библиотеки.

Примеры

См.также

Внешние ссылки