Оглавление:

Как добавить дисплей E-Ink в свой проект: 12 шагов (с изображениями)
Как добавить дисплей E-Ink в свой проект: 12 шагов (с изображениями)

Видео: Как добавить дисплей E-Ink в свой проект: 12 шагов (с изображениями)

Видео: Как добавить дисплей E-Ink в свой проект: 12 шагов (с изображениями)
Видео: Приказ комиссара. Warhammer 40k 2024, Ноябрь
Anonim
Как добавить дисплей E-Ink к вашему проекту
Как добавить дисплей E-Ink к вашему проекту
Как добавить дисплей E-Ink к вашему проекту
Как добавить дисплей E-Ink к вашему проекту

Многие проекты включают мониторинг каких-либо данных, таких как данные об окружающей среде, часто с использованием Arduino для управления. В моем случае я хотел контролировать уровень соли в моем смягчителе воды. Возможно, вы захотите получить доступ к данным через вашу домашнюю сеть, но в равной степени вы можете захотеть отобразить их там, где они измеряются. Или у вас может быть постоянно включенный удаленно подключенный дисплей в более удобном месте.

Теперь вы можете использовать несколько видов дисплеев, все довольно дешевые, но имеющие разные преимущества и недостатки:

  • Буквенно-цифровой ЖК-дисплей - самый дешевый, но и самый ограниченный вариант.
  • OLED-дисплей может отображать графику, но дешевые дисплеи очень маленькие. На второй фотографии показан OLED-дисплей 128x64 пикселей рядом с дисплеем E-Ink.
  • Дисплей E-Ink (или E-Paper) несколько больше и, следовательно, его легче читать, а его преимущество заключается в том, что дисплей остается, даже когда он выключен! Но на перерисовку дисплея уходит несколько секунд.

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

В таком приложении среднее потребление тока может быть настолько низким, что батарея литиевого дымового извещателя 9 В может работать в течение 10 лет! Более того, некоторые из этих дисплеев будут отображать три цвета: белый, черный и красный (или желтый). Идеально, если вы хотите отображать предупреждение или предупреждение красным цветом.

Запасы

Самые дешевые дисплеи E-Ink, которые я нашел, продаются через BuyDisplay, также доступны у многих продавцов eBay. К сожалению, документация оставляет желать лучшего, поэтому я решил написать руководство - читайте дальше!

В зависимости от ваших требований и вашего бюджета, у вас есть выбор различных размеров:

  • 1,54 дюйма (152 x 152 = 23, 104 пикселя)
  • 2,13 дюйма (212 x 104 = 22 048 пикселей)
  • 2,6 дюйма (296 x 152 = 44 992 пикселя)
  • 2,7 дюйма (176 x 264 = 46, 464 пикселя)
  • 2,9 дюйма (296 x 128 = 37, 888 пикселей)
  • 4,2 дюйма (400x300 = 120 000 пикселей)
  • 5,83 дюйма (640 x 480 = 307, 200 пикселей)
  • 7,5 дюйма (880 x 528 = 464, 640 пикселей)

(Диапазон расширился с тех пор, как я смотрел в последний раз, поэтому, возможно, он расширился еще больше к тому времени, когда вы это прочтете.)

Доступны двухцветные (черный / белый) или трехцветные (черный / красный / белый или черный / желтый / белый). В этом руководстве предполагается, что вы используете красную версию, но если вы выбрали желтую версию, просто прочтите «желтый» вместо «красного» повсюду.

Выберите версию SPI (4-проводную). Я использовал модель 1,54 дюйма, она очень хорошего размера.

Шаг 1. Подключение дисплея

Подключение вашего дисплея
Подключение вашего дисплея

Эти дисплеи поставляются с разъемом 2x4 контакта. Номера контактов четко обозначены: контакты 7, 5, 3 и 1 (слева направо) в верхнем ряду и 8, 6, 4, 2 в нижнем.

Ваш дисплей может поставляться с 8-жильным соединительным кабелем, который упрощает подключение. (У моего коммутационного кабеля 2 красных провода и 2 коричневых. Они не взаимозаменяемы!

В следующей таблице приведены подключения, которые применимы к большинству типов Arduino (включая Uno, Pro Mini, Pro Micro и Nano).

Модуль электронных чернил Ардуино
Штырь Имя Штырь Имя
1 VDD Vcc 3,3 / 5 В
2 VSS Gnd Gnd
3 Последовательные данные в 11 MOSI
4 Последовательные часы в 13 SCK
5 / Выбор чипа 10
6 Данные / Instr 9
7 Сброс настроек 8
8 Устройство занято 7

Шаг 2. Загрузите прилагаемое программное обеспечение

Вы можете использовать предоставленное программное обеспечение, как описано в этом шаге, или вы можете использовать мою расширенную библиотеку на следующем шаге.

Найдите свое устройство на BuyDisplay.com. Внизу страницы вы найдете загружаемый ZIP-файл «Библиотека Arduino и пример для 4-проводного SPI». Щелкните по нему, чтобы загрузить и открыть в проводнике Windows.

Проводник Windows покажет, что это содержит одну папку верхнего уровня «Libraries-Examples_ER-EPM0154-1R». (Название будет немного другим, если ваша модель не 1,54 дюйма.)

Скопируйте эту папку верхнего уровня в папку с библиотеками Arduino. Щелкните правой кнопкой мыши, чтобы переименовать папку, и удалите «Библиотеки-Примеры_» из имени.

(Чтобы найти папку с библиотеками Arduino, в среде Arduino IDE нажмите «Файл… Настройки» и обратите внимание на расположение Sketchbook. Перейдите к нему, и вы найдете папку «библиотеки» Arduino среди папок с эскизами.)

Откройте эту папку и откройте в ней папку «Библиотеки». Перетащите все файлы из этой папки в родительскую папку на один уровень выше («ER-EPM0154-1R»). Удалите (теперь пустую) папку «Библиотеки».

Теперь вы установили файлы и набросок экзамена как библиотеку Arduino. Обратите внимание, что если ваш дисплей не 1,54 дюйма, единственная разница, кажется, состоит в двух строках в ER-ERM * -1.h, определяющих ШИРИНУ и ВЫСОТУ.

В среде Arduino IDE нажмите File… Exampes и прокрутите вниз до ER-EPM0154-1R для демонстрационного скетча, который вы сможете скомпилировать и запустить, как только вы подключите свой дисплей к Arduino.

Шаг 3: Запуск демонстрации

Запуск демонстрации
Запуск демонстрации
Запуск демонстрации
Запуск демонстрации

В среде Arduino IDE щелкните Файл… Примеры… ER-EPM0154-1R.

Подключите Arduino к компьютеру с помощью USB-кабеля или как обычно.

В разделе «Инструменты» установите плату, процессор и порт.

В разделе "Эскиз" нажмите "Загрузить".

После завершения загрузки будет небольшая задержка, и задержка будет мигать несколько раз, когда будет закрашено первое изображение. Смотрите, как проходит демонстрация.

Шаг 4: Использование расширенной библиотеки

Вы можете скачать мою расширенную библиотеку с github по адресу

N. B. У меня высокая степень уверенности, что моя библиотека будет работать с дисплеями, совместимыми с любым размером, но на самом деле я тестировал ее только с моделью 1,54 дюйма. Если вы используете другую, пожалуйста, дайте мне знать в комментариях в конце этого руководства, чтобы убедиться, что он работает. Но если это не так, я сделаю все возможное, чтобы вы начали.

Загрузите и сохраните zip-файл. В среде Arduino IDE нажмите «Скетч… Включить библиотеку… Добавить. ZIP-библиотеку» и выберите сохраненный zip-файл.

Моя библиотека содержит несколько незначительных улучшений:

  • Это позволяет использовать разные номера контактов Arduino (кроме MOSI).
  • Эту же библиотеку можно использовать для устройств любого размера.
  • Предусмотрены новая 50% -ная заливка и пятнистая заливка (набор случайных пикселей).

Библиотека поставляется в виде стандартного сжатого (zip) файла Arduino. Загрузите его в папку «Загрузки» (или в другое место) и в среде Arduino IDE щелкните «Скетч… Включить библиотеку… Добавить библиотеку ZIP».

В разделе «Примеры» вы найдете E-ink_ER-EPM. Есть 3 примера эскизов:

  • ER_EPM154-1R-Test: исходная демонстрация, предоставленная поставщиком
  • E-ink_demo: эскиз, разработанный на следующих этапах
  • E-ink_rotate: Демонстрация вращения изображения.

Шаг 5: Самостоятельное программирование

К сожалению, отсутствует документация с кодом, предоставленным поставщиком, и код примера не прокомментирован должным образом. Это делает его труднее, чем следовало бы использовать, и основная цель данного Руководства - исправить это.

Базовые концепты

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

Эти участки экрана известны как объекты «Paint». Вам нужен только один, и для каждого раздела экрана вы определяете его высоту, ширину и поворот. По завершении вы загружаете его, определяя позицию на экране, в которую он будет загружаться, и будет ли он черно-белым или красно-белым.

Левый верхний угол экрана имеет координаты по горизонтали (x) и вертикали (y) (0, 0), левый нижний угол - (0, 151), а правый верхний - (151, 0).

Инициализация

Откройте эскиз E-ink_demo в среде Arduino IDE и следуйте ему, пока я буду описывать, как использовать библиотеку.

Вверху скетча вы увидите следующие линии, которые всегда нужны:

#include <SPI.h #include "ER-ERM0154-1.h" #include "imagedata.h" #include "epdpaint.h" #define COLORED 0 #define UNCOLORED 1 Epd epd;

Строки #include включают необходимые библиотеки. SPI.h - это стандартная библиотека Arduino, но остальные являются частью библиотеки электронных чернил.

Мы определяем имена для НЕЦВЕТНЫХ (белых) пикселей и ЦВЕТНЫХ (черных или красных). (Примечание для моих собратьев-европейцев: используется американское написание COLOR.)

Epd epd; line создает объект устройства электронной бумаги, на котором мы будем отображать. Это должно быть здесь в начале скетча, чтобы сделать его доступным для функций setup () и loop ().

Если у вас дисплей другого размера, вы можете заменить строку EPD на:

Epd epd (ШИРИНА, ВЫСОТА);

(предварительно определив WIDTH и HEIGHT в операторах #define.)

Таким же образом вы можете указать номера контактов, отличные от стандартных, с помощью:

Epd epd (WIDTH, HEIGHT, BUSY_PIN, RESET_PIN, DC_PIN, CS_PIN);

В setup () нам нужно инициализировать устройство следующим образом:

Серийный.начало (9600)

if (epd. Init ()! = 0) {Serial.print ("Ошибка инициализации электронной бумаги"); возвращение; }

(Фактически, epd. Init () никогда не возвращает ошибку, но будущие улучшения могут обнаружить отсутствие или нефункционирование дисплея.)

Шаг 6: написание текста

Написание текста
Написание текста

В E-ink_demo обратите внимание на loop (). Сначала очистим дисплей:

epd. ClearFrame ()

(На самом деле в этом нет необходимости, если вы собираетесь отображать собственное изображение.)

Прежде чем мы сможем рисовать что-либо (будь то текст или графику), нам нужно создать объект Paint для рисования:

беззнаковое символическое изображение [1024]

Краска краска (изображение, 152, 18); // ширина должна быть кратной 8

Это резервирует некоторое пространство (1024 байта) и выделяет его объекту Paint во второй строке. Это предварительно настроено как 152 пикселя в ширину и 18 пикселей в глубину. Мы можем перенастроить его позже для повторного использования по мере необходимости, но обратите внимание: ширина должна быть кратной 8, поскольку на байт хранится 8 пикселей, и мы не можем разделить байты. (Фактически, при необходимости он округлит его в большую сторону, но тогда может возникнуть недоумение, когда ваш дисплей не будет выглядеть так, как должен.

Теперь мы должны очистить объект рисования до НЕЦВЕТНОЙ (белый), затем в позиции (x, y) = (22, 2) мы пишем «e-ink Demo», используя шрифт высотой 16 пикселей, и COLORED (чтобы отобразить на НЕЦВЕТНЫЙ фон.

paint. Clear (НЕЦВЕТНЫЙ)

paint. DrawStringAt (12, 2, «демонстрация электронной бумаги», & Font16, ЦВЕТНАЯ);

Обратите внимание, что координаты (22, 2) представляют собой верхний левый угол первого символа строки и находятся на 22 пикселя и 2 пикселя вниз относительно верхнего левого угла объекта рисования, а не всего дисплея.. Текст лучше всего выглядит как минимум на один пиксель ниже верха объекта рисования.

Доступны следующие шрифты:

Font8 - 5x8 пикселей Font12 - 7x12 пикселей Font16 - 11x16 пикселей Font20 - 14x20 пикселей Font24 - 17x24 пикселей

Теперь нам просто нужно отправить объект рисования («paint») на устройство («epd»):

epd. SetPartialWindowBlack (paint. GetImage (), 0, 3, paint. GetWidth (), paint. GetHeight ());

SetPartialWindowBlack - это метод, который мы применяем к объекту epd, используя изображение и его свойства ширины и глубины объекта рисования. Мы говорим ему записать это изображение на устройство в (x, y) = (0, 3). И мы говорим, что ЦВЕТНЫЕ пиксели должны быть черными.

Это было не так уж сложно, правда? Попробуем еще один.

paint. Clear (ЦВЕТНЫЕ);

paint. DrawStringAt (20, 2, «(Белый на цвете)», & Font12, UNCOLORED); epd. SetPartialWindowRed (paint. GetImage (), 0, 24, paint. GetWidth (), paint. GetHeight ());

Мы повторно используем тот же объект рисования, с той же шириной и высотой, но на этот раз давайте очистим его до COLORED и напишем ему UNCOLORED строку. И для разнообразия мы сделаем ЦВЕТНЫЕ пиксели красными и запишем их на устройство в (0, 24), чуть ниже первого.

Мы записали два объекта рисования в память устройства, но еще не сказали ему отображать их. Мы делаем это с помощью следующего утверждения:

epd. DisplayFrame ();

(В скетче E-ink_demo мы фактически оставляем это до конца, после рисования еще нескольких вещей, но вы можете вставить его сюда, если хотите, mybe, а затем delay (10000); чтобы дать вам время полюбоваться своей работой.

Шаг 7: рисование линий и прямоугольников

Рисование линий и прямоугольников
Рисование линий и прямоугольников

Давайте посмотрим, как рисовать линии и прямоугольники. Мы собираемся использовать тот же объект рисования, но нам нужно изменить его конфигурацию на 40 пикселей в ширину и 36 пикселей в высоту. Мы очистим его до НЕЦВЕТНОЙ.

paint. SetWidth (40);

paint. SetHeight (36); paint. Clear (НЕЦВЕТНЫЙ);

Мы собираемся нарисовать (ЦВЕТНОЙ) прямоугольник с верхним левым углом (5, 3) и нижним правым (35, 33) относительно объекта рисования, как обычно. Мы также нарисуем его диагонали в виде линий от (5, 3) до (35, 33) и от (35, 3) до (5, 33). Наконец, мы напишем весь объект рисования (красный) на экран в (32, 42).

//ВЕРХНИЙ РЯД:

// Прямоугольник paint. Clear (UNCOLORED); paint. DrawRectangle (5, 3, 35, 33, ЦВЕТНОЙ;) paint. DrawLine (5, 3, 35, 33, ЦВЕТНОЙ); paint. DrawLine (35, 3, 5, 33, ЦВЕТНАЯ); epd. SetPartialWindowRed (paint. GetImage (), 32, 42, paint. GetWidth (), paint. GetHeight ());

Библиотека в том виде, в котором она появилась, также предоставляла закрашенный прямоугольник, но я хотел закрашенный, поэтому я добавил новый метод. Мы сделаем еще два прямоугольника, один заштрихованный, а другой - залитый, и поместим их справа от первого, чередуя их черный и красный.

// Закрашенный прямоугольник paint. Clear (UNCOLORED); paint. DrawShadedRectangle (5, 3, 35, 33); epd. SetPartialWindowBlack (paint. GetImage (), 72, 42, paint. GetWidth (), paint. GetHeight ()); // Закрашенный прямоугольник paint. Clear (UNCOLORED); paint. DrawFilledRectangle (5, 3, 35, 33, ЦВЕТНОЙ); epd. SetPartialWindowRed (paint. GetImage (), 112, 42, paint. GetWidth (), paint. GetHeight ());

Шаг 8: рисование кругов

Рисование кругов
Рисование кругов

Так же легко рисовать круги. Вместо координат двух углов мы должны указать координаты центра и радиуса. Мы очистим объект рисования, затем поместим круг в точках (20, 15) (относительно объекта рисования) и радиусом 15. И повторите для закрашенного и закрашенного круга.

//ВТОРОЙ РЯД

// Круг paint. Clear (НЕЦВЕТНЫЙ); paint. DrawCircle (20, 18, 15, ЦВЕТНОЙ); epd. SetPartialWindowBlack (paint. GetImage (), 32, 78, paint. GetWidth (), paint. GetHeight ()); // Закрашенный круг paint. Clear (UNCOLORED); paint. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowRed (paint. GetImage (), 72, 78, paint. GetWidth (), paint. GetHeight ()); // Закрашенный круг paint. Clear (UNCOLORED); paint. DrawFilledCircle (20, 18, 15, ЦВЕТНОЙ); epd. SetPartialWindowBlack (paint. GetImage (), 112, 78, paint. GetWidth (), paint. GetHeight ());

Шаг 9: НЕЦВЕТНАЯ НА ЦВЕТНОЙ ФОНЕ

НЕЦВЕТНЫЕ НА ЦВЕТНОЙ ФОНЕ
НЕЦВЕТНЫЕ НА ЦВЕТНОЙ ФОНЕ

Мы здесь отлично ладим! Итак, пока мы в движении, давайте сделаем еще 3 круга в строке ниже, на этот раз НЕЦВЕТНОЙ на ЦВЕТНОМ объекте рисования, как мы это сделали со второй строкой текста.

// ТРЕТЬЯ СТРОКА

// Круг paint. Clear (ЦВЕТНОЙ); paint. DrawCircle (20, 18, 15, НЕЦВЕТНЫЙ); epd. SetPartialWindowRed (paint. GetImage (), 32, 114, paint. GetWidth (), paint. GetHeight ()); // Закрашенный круг paint. Clear (COLORED) paint. DrawShadedCircle (20, 18, 15); epd. SetPartialWindowBlack (paint. GetImage (), 72, 114, paint. GetWidth (), paint. GetHeight ()); // Закрашенный круг paint. Clear (COLORED); paint. DrawFilledCircle (20, 18, 15, НЕЦВЕТНЫЙ); epd. SetPartialWindowRed (paint. GetImage (), 112, 114, paint. GetWidth (), paint. GetHeight ());

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

paint. DrawSpeckledCircle (20, 18, 15, 25);

Последний параметр (25) - это плотность, то есть процент пикселей, которые нужно раскрасить. Если не указано, предполагается 50%.

Существует также DrawSpeckledRectangle с необязательным дополнительным параметром, определяющим плотность.

Шаг 10: вращение

Вращение
Вращение
Вращение
Вращение

Все, что мы можем нарисовать, мы можем повернуть на 90, 180 или 270 градусов. (Считаем вращения по часовой стрелке.)

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

Итак, если вы хотите, чтобы ваш текст был повернут по часовой стрелке на 90 градусов, чтобы он читался сверху вниз (а не слева направо), верхний правый угол объекта рисования будет (0, 0) для целей всего, что вы пишете. или нарисуйте его, причем x измеряется от этого угла вниз, а y - от этого угла влево.

Вы, наверное, заметили, что мы оставили место в левой части дисплея. Итак, давайте напишем текст, повернутый на 270 градусов, то есть читаем снизу вверх. Это поместит (0, 0) в нижний левый угол.

Обратите внимание, что, как бы вы ни вращали рисованный объект, вращение применяется только тогда, когда вы рисуете на нем пиксели. Когда вы приходите писать его на устройство, это все еще координаты верхнего левого угла, которые вы должны передать SetPartialWindow.

Итак, напомним, давайте настроим наш объект рисования на ширину 32 и высоту 110, и мы дадим ему свойство ROTATE_270. Не то чтобы мы должны делать все это, прежде чем что-то писать или рисовать.

paint. SetWidth (32);

paint. SetHeight (110); paint. SetRotate (ROTATE_270);

Мы очистим его до COLORED и напишем ему UNCOLORED строку, а затем поместим ее в (0, 42). (Помните, это верхний левый угол. Забудьте о любом повороте пикселей в нем.)

paint. Clear (ЦВЕТНЫЕ); paint. DrawStringAt (8, 8, «В сторону!», & Font16, UNCOLORED); epd. SetPartialWindowBlack (paint. GetImage (), 0, 42, paint. GetWidth (), paint. GetHeight ());

Наконец, нам нужно указать устройству отображать все пиксели, которые мы ему предоставили. И если мы не собираемся менять его какое-то время и хотим сэкономить заряд батареи, мы можем перевести его в спящий режим, и почему бы также не перевести Arduino в спящий режим, чтобы его разбудили, когда придет время взять и отобразить другой измерение.

epd. DisplayFrame ();

epd. Sleep ();

Второй пример эскиза показывает поворот на 90, 180 и 270 градусов. К настоящему времени вы уже должны быть в состоянии следить за ним самостоятельно.

Шаг 11: рисование растровых изображений

Рисование растровых изображений
Рисование растровых изображений

Демонстрация поставщика включает отображение пары растровых изображений. Их легко создать с помощью инструмента, который можно загрузить с

www.buydisplay.com/image2lcd

Он поставляется в виде zip-файла, содержащего установочный файл.exe и текстовый файл, содержащий лицензионный ключ. Разверните его, затем дважды щелкните файл.exe, чтобы установить его.

Очевидно, что существуют довольно строгие ограничения на то, что вы можете отображать, поскольку пиксели E-ink могут быть либо включены, либо выключены и поэтому не могут отображать уровни серого. Но можно наложить на изображение прямоугольный объект краски. Возможно, вы захотите отобразить логотип, символы или фиксированный текст необычным шрифтом, на который вы можете наложить переменный текст или графику, например столбчатую или круговую диаграмму, возможно, указав что-то вроде уровня жидкости.

Вы можете создать свое изображение с помощью любого программного обеспечения для рисования, с которым вы знакомы, или вы можете сканировать эскиз или рисунок, но в любом случае вам нужно уменьшить его до двух уровней. Сохраните его как.gif,-j.webp

Запустите Image2Lcd. Внизу вы увидите вкладку «Регистрация». Нажмите на нее и введите регистрационный код, который находится в текстовом файле в загруженном вами zip-файле. Это удалит наложение на изображение.

В Image2Lcd откройте файл изображения. На левой панели убедитесь, что у вас есть

  • Тип выходного файла: массив C
  • Режим сканирования: горизонтальное сканирование
  • BitsPixel: монохромный
  • Максимальная ширина и высота: размер вашего дисплея и
  • Необходимо снять флажок Включить данные заголовка.

Нажмите кнопку рядом с Макс. Ширина и высота для обработки. Будет показан результат обработки. Возможно, вам придется отрегулировать ползунки Яркость и Контрастность, чтобы получить наилучшие результаты.

Установите флажок «Обратный цвет» над ползунком «Яркость», сделав его негативным изображением, что по какой-то причине необходимо, затем нажмите «Сохранить», чтобы сохранить его как imagedata.cpp в папке, содержащей ваш эскиз Arduino. В следующий раз, когда вы откроете скетч с помощью Arduino IDE, вы увидите его как новую вкладку.

Шаг 12: отображение растрового изображения

Отображение вашего растрового изображения
Отображение вашего растрового изображения

В основном файле скетча Arduino сразу после строк #include вверху вставьте:

#include "imagedata.h"

Создайте новую вкладку (щелкните стрелку вниз в конце строки вкладок) и назовите ее imagedata.h. Вставьте в него следующие 2 строчки:

extern const беззнаковый символ IMAGE_BLACK ;

extern const беззнаковый символ IMAGE_RED ;

В вашем файле imagedata.cpp первая строка будет начинаться с

const unsigned char gImage_image [2888] = {

(Число в квадратных скобках будет другим, если вы не используете 1,54-дюймовый дисплей.) Замените это на

const unsigned char IMAGE_BLACK PROGMEM = {

Это для черно-белого изображения. Если вы хотите, чтобы он был красным и белым, измените его на

const unsigned char IMAGE_RED PROGMEM = {

Непосредственно перед этой строкой добавьте

#включают

#include "imagedata.h"

Теперь вы готовы показать свое изображение. В loop () в вашем основном файле добавьте

epd. ClearFrame ();

epd. DisplayFrame (IMAGE_BLACK, NULL);

Или, если вы создали красное изображение, вторая строка должна быть

epd. DisplayFrame (NULL, IMAGE_RED);

Фактически, вы можете создать комбинированное красное и черное изображение, преобразовав красную и черную части отдельно с помощью Image2Lcd и отобразив их обе с помощью

epd. DisplayFrame (IMAGE_BLACK, IMAGE_RED);

Однако любые пиксели, которые указаны как черные на черно-белом изображении и красные на красно-белом, будут красными.

Наконец, вы можете наложить на свое изображение любую из текстовых или графических функций, о которых мы узнали ранее. Я хотел добавить свой дескриптор Twitter, поэтому добавил

Краска краска (изображение, 20, 152); // ширина должна быть кратной 8

paint. SetRotate (ROTATE_270); paint. Clear (НЕЦВЕТНЫЙ); paint. DrawStringAt (20, 2, «@pleriche», & Font16, ЦВЕТНОЙ); epd. SetPartialWindowRed (paint. GetImage (), 0, 0, paint. GetWidth (), paint. GetHeight ()); epd. SetPartialWindowRed (paint. GetImage (), 0, 0, paint. GetWidth (), paint. GetHeight ()); epd. DisplayFrame ();

Рекомендуемые: