Создание пользовательских анимаций на ЖК-дисплеях 16x2
Компоненты и расходные материалы
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
Приложения и онлайн-сервисы
| ||||
|
Об этом проекте
Библиотека LiquidCrystal упрощает использование ЖК-дисплеев с Arduino. Особенно интересной функцией из этой библиотеки является функция createChar ():вы можете создавать собственные глифы (символы), каждый из которых описывается массивом из восьми байтов, по одному для каждой строки. Пять младших битов каждого байта определяют пиксели в этой строке. Написание байтов вручную для создания произведений искусства - не совсем идеальный процесс для художника, поэтому я сделал веб-инструмент в котором вы можете рисовать глифы, а код создается для вас .
В этой статье я покажу, как создавать собственные анимации, используя только плату Arduino и ЖК-дисплей, которые вы можете использовать для создания большого количества проектов:вы можете создать игру, рассказ, музыкальное видео или украсить статусную панель.
Подключение ЖК-дисплея к Arduino
Подключите ЖК-дисплей к Arduino - в зависимости от модели вашего экрана разные соединения могут работать лучше. Для одного из моих экранов приведенная ниже схема работала хорошо, но для другого мне пришлось использовать потенциометр (как в учебнике по этой ссылке) и настроить сопротивление резистора, чтобы получить лучший контраст.
См. Симуляцию на TinkerCad по этой ссылке.
Создание искусства
Перейдите к инструменту по адресу https://tusindfryd.github.io/screenduino/ и создайте свое искусство. Одновременно можно использовать до 8 секций, поэтому, если вы не можете выбрать новый квадрат, убедитесь, что вы уже не используете 8 секций.
Генерация кода
Когда вы закончите со своим первым изображением, снимите флажок the коробка "просто the функция " . Скопируйте код в буфер обмена и загрузите его на свой Arduino. На этом этапе вы должны увидеть свое изображение на ЖК-дисплее.
Создание дополнительных рамок
Убедитесь, что ваш код сохранен. Теперь вы можете создать вторую рамку. Просто нарисуйте другое изображение. Когда вы закончите, проверьте the коробка "просто the функция " . Скопируйте функцию и вставьте ее в конец своего кода. Переименуйте новую функцию во что-нибудь другое, например image01 ()
, чтобы вы могли отслеживать. Теперь вам нужно переместить вызов в image ()
. из setup ()
функцию в loop ()
функция, добавьте задержку, вызовите image01 ()
, и снова добавьте задержку. Попробуйте переименовать image ()
в image00 ()
для консистенции. Ваш loop ()
функция должна выглядеть примерно так:
недействительный цикл () {image00 (); задержка (250); image01 (); задержка (250);}
Загрузите эскиз на свой Arduino. Попробуйте добавить больше кадров или изменить время задержки.
Код
- Анимация "Метаморфоза бабочки"
Анимация «Метаморфоза бабочки» Arduino
Это пример кода (код анимации метаморфозы бабочки из гифки)./ * анимация метаморфозы бабочки 2021 ~ от tusindfryd этот код находится в общественном достоянии * / # includeLiquidCrystal lcd (12, 11 , 5, 4, 3, 2); // RS, E, D4, D5, D6, D7void setup () {lcd.begin (16, 2);} void loop () {image00 (); задержка (250); image01 (); задержка (250); image02 (); задержка (250); image03 (); задержка (700); image04 (); задержка (250); image05 (); задержка (250); image06 (); задержка (700); image07 (); задержка (1250);} void image00 () {lcd.clear (); байт image22 [8] ={B00110, B01101, B11011, B10011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11000}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (byte (4));} void image01 () {lcd.clear (); байт image22 [8] ={B00110, B00101, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B11001, B10111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11000}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; байт image06 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00000, B00011}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.createChar (5, изображение06); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (байт (4)); lcd.setCursor (5, 0); lcd.write (byte (5));} void image02 () {lcd.clear (); байт image22 [8] ={B00000, B00001, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00001, B00111, B00100, B11001, B10111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11000}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (byte (4));} void image03 () {lcd.clear (); байт image22 [8] ={B00000, B00001, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10000, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11010}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; байт image24 [8] ={B00010, B00111, B00111, B00111, B00111, B00111, B00010, B00000}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.createChar (5, изображение24); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (байт (4)); lcd.setCursor (7, 1); lcd.write (byte (5));} void image04 () {lcd.clear (); байт image22 [8] ={B00000, B00001, B00011, B00011, B00111, B01111, B01111, B11111}; байт image23 [8] ={B01111, B11110, B11100, B11000, B11000, B10001, B10000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00111}; байт image08 [8] ={B00000, B01000, B10000, B10000, B10000, B11111, B11111, B11010}; байт image09 [8] ={B00000, B00000, B00000, B00000, B00000, B11000, B11000, B00100}; байт image24 [8] ={B00010, B00100, B01011, B10101, B11010, B10101, B11010, B01110}; байтовое изображение25 [8] ={B00000, B00000, B00000, B10000, B10000, B00000, B00000, B00000}; lcd.createChar (0, изображение22); lcd.createChar (1, изображение23); lcd.createChar (2, изображение07); lcd.createChar (3, изображение08); lcd.createChar (4, изображение09); lcd.createChar (5, изображение24); lcd.createChar (6, изображение25); lcd.setCursor (5, 1); lcd.write (байт (0)); lcd.setCursor (6, 1); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (7, 0); lcd.write (байт (3)); lcd.setCursor (8, 0); lcd.write (байт (4)); lcd.setCursor (7, 1); lcd.write (байт (5)); lcd.setCursor (8, 1); lcd.write (byte (6));} void image05 () {lcd.clear (); байт image24 [8] ={B01010, B10100, B01011, B10101, B11010, B10101, B11010, B01110}; байтовое изображение25 [8] ={B00000, B00000, B00000, B10000, B10000, B00000, B00000, B00000}; байт image23 [8] ={B01101, B01010, B01101, B00111, B00000, B00000, B00000, B00000}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00001, B00011}; байт image08 [8] ={B00000, B00000, B00000, B00000, B00000, B00000, B00000, B10000}; lcd.createChar (0, изображение24); lcd.createChar (1, изображение25); lcd.createChar (2, изображение23); lcd.createChar (3, изображение07); lcd.createChar (4, изображение08); lcd.setCursor (7, 1); lcd.write (байт (0)); lcd.setCursor (8, 1); lcd.write (байт (1)); lcd.setCursor (6, 1); lcd.write (байт (2)); lcd.setCursor (6, 0); lcd.write (байт (3)); lcd.setCursor (7, 0); lcd.write (byte (4));} void image06 () {lcd.clear (); байт image08 [8] ={B00000, B00100, B01010, B01010, B10001, B00011, B00110, B01100}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00001, B00010, B00010, B00001}; байт image09 [8] ={B00000, B00000, B10000, B11000, B00000, B00000, B11000, B00100}; байт image24 [8] ={B00100, B00100, B00011, B00000, B00000, B00000, B00000, B00000}; байтовое изображение25 [8] ={B10000, B00000, B00000, B00000, B00000, B00000, B00000, B00000}; lcd.createChar (0, изображение08); lcd.createChar (1, изображение07); lcd.createChar (2, изображение09); lcd.createChar (3, изображение24); lcd.createChar (4, изображение25); lcd.setCursor (7, 0); lcd.write (байт (0)); lcd.setCursor (6, 0); lcd.write (байт (1)); lcd.setCursor (8, 0); lcd.write (байт (2)); lcd.setCursor (7, 1); lcd.write (байт (3)); lcd.setCursor (8, 1); lcd.write (byte (4));} void image07 () {lcd.clear (); байт image24 [8] ={B10101, B01110, B01110, B00100, B10101, B01110, B00100, B11111}; байт image08 [8] ={B00000, B00100, B01010, B01010, B10001, B00011, B00110, B01100}; байт image07 [8] ={B00000, B00000, B00000, B00000, B00001, B00010, B00010, B00001}; байт image09 [8] ={B00000, B00000, B10000, B11000, B00000, B00000, B00000, B00000}; lcd.createChar (0, изображение24); lcd.createChar (1, изображение08); lcd.createChar (2, изображение07); lcd.createChar (3, изображение09); lcd.setCursor (7, 1); lcd.write (байт (0)); lcd.setCursor (7, 0); lcd.write (байт (1)); lcd.setCursor (6, 0); lcd.write (байт (2)); lcd.setCursor (8, 0); lcd.write (byte (3));}
Схема
Производственный процесс
- CDS:3D-прозрачные ЖК-дисплеи
- ЖК-панель с Arduino для симулятора полета
- ЖК-анимация и игры
- Отображение изображения на ЖК-экране TFT с помощью Arduino UNO!
- Осциллограф 10 Гц-50 кГц для самостоятельного изготовления на ЖК-дисплее 128x64
- Как создать веб-сайт, взаимодействующий с Arduino с помощью PHP
- Монитор сердечного ритма MAX 30102 на ЖК-дисплее 16x2
- Метеостанция Arduino
- Простой будильник с DS1302 RTC
- Процесс прототипа печатной платы:5 шагов для создания пользовательской печатной платы