在 16x2 LCD 显示器上创建自定义动画
组件和用品
| × | 1 | ||||
| × | 1 | ||||
| × | 1 |
应用和在线服务
| ||||
|
关于这个项目
LiquidCrystal 库使在 Arduino 中使用 LCD 变得容易。该库中一个特别有趣的函数是 createChar() 函数:您可以创建自定义字形(字符),每个字形由一个包含 8 个字节的数组描述,每行一个。每个字节的五个最低有效位确定该行中的像素。手工编写字节来创作艺术并不是艺术家理想的过程,所以我做了 一个网络工具 你可以在其中绘制字形,并为你生成代码 .
在本文中,我将展示如何创建只有一个 Arduino 板和一个 LCD 的自定义动画——您可以使用它来创建大量项目:您可以制作游戏、短篇小说或音乐视频,或者装饰一个状态面板。
图>
将 LCD 连接到 Arduino
将 LCD 连接到 Arduino - 根据您的屏幕型号,不同的连接可能效果更好。对于我的一个屏幕,下面的原理图效果很好 - 但对于另一个,我必须使用电位计(如本链接下的教程)并调整电阻值以获得最佳对比度。
请参阅此链接下的 TinkerCad 模拟。
创作艺术
转到 https://tusindfryd.github.io/screenduino/ 上的工具并创建您的艺术作品。一次最多可以使用 8 个部分,因此如果您无法选择新方块,请确保您没有使用 8 个部分。
生成代码
完成第一张图片后,取消选中 盒子 “只是 函数” .将代码复制到剪贴板并将其上传到您的 Arduino。此时,您应该会在 LCD 上看到您的图像。
制作更多帧
确保您的代码已保存。您现在可以创建第二个框架。只需绘制另一个图像。完成后,检查 盒子 “只是 函数” .复制该函数并将其粘贴到代码的末尾。将新函数重命名为其他名称 - 例如 image01()
,以便您可以跟踪。现在您需要将调用移动到 image()
从 setup()
loop()
的函数 函数,添加延迟,调用 image01()
,并再次添加延迟。考虑重命名 image()
到 image00()
为了一致性。你的 loop()
函数应如下所示:
void loop(){ image00();延迟(250); image01();延迟(250);}
将草图上传到您的 Arduino。尝试添加更多帧或更改延迟时间。
代码
- 蝴蝶变形动画
蝴蝶变形动画Arduino
这是示例代码(来自 gif 的蝴蝶变形动画背后的代码)。/* 蝴蝶变形动画 2021 ~ by 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, image22); lcd.createChar(1, image23); lcd.createChar(2, image07); lcd.createChar(3, image08); lcd.createChar(4, image09); lcd.setCursor(5, 1);液晶显示器(字节(0)); lcd.setCursor(6, 1);液晶显示器(字节(1)); lcd.setCursor(6, 0);液晶显示器(字节(2)); lcd.setCursor(7, 0);液晶显示器(字节(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, image22); lcd.createChar(1, image23); lcd.createChar(2, image07); lcd.createChar(3, image08); lcd.createChar(4, image09); lcd.createChar(5, image06); lcd.setCursor(5, 1);液晶显示器(字节(0)); lcd.setCursor(6, 1);液晶显示器(字节(1)); lcd.setCursor(6, 0);液晶显示器(字节(2)); lcd.setCursor(7, 0);液晶显示器(字节(3)); lcd.setCursor(8, 0);液晶显示器(字节(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, image22); lcd.createChar(1, image23); lcd.createChar(2, image07); lcd.createChar(3, image08); lcd.createChar(4, image09); lcd.setCursor(5, 1);液晶显示器(字节(0)); lcd.setCursor(6, 1);液晶显示器(字节(1)); lcd.setCursor(6, 0);液晶显示器(字节(2)); lcd.setCursor(7, 0);液晶显示器(字节(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, image22); lcd.createChar(1, image23); lcd.createChar(2, image07); lcd.createChar(3, image08); lcd.createChar(4, image09); lcd.createChar(5, image24); lcd.setCursor(5, 1);液晶显示器(字节(0)); lcd.setCursor(6, 1);液晶显示器(字节(1)); lcd.setCursor(6, 0);液晶显示器(字节(2)); lcd.setCursor(7, 0);液晶显示器(字节(3)); lcd.setCursor(8, 0);液晶显示器(字节(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};字节 image25[8] ={B00000, B00000, B00000, B10000, B10000, B00000, B00000, B00000}; lcd.createChar(0, image22); lcd.createChar(1, image23); lcd.createChar(2, image07); lcd.createChar(3, image08); lcd.createChar(4, image09); lcd.createChar(5, image24); lcd.createChar(6, image25); lcd.setCursor(5, 1);液晶显示器(字节(0)); lcd.setCursor(6, 1);液晶显示器(字节(1)); lcd.setCursor(6, 0);液晶显示器(字节(2)); lcd.setCursor(7, 0);液晶显示器(字节(3)); lcd.setCursor(8, 0);液晶显示器(字节(4)); lcd.setCursor(7, 1);液晶显示器(字节(5)); lcd.setCursor(8, 1); lcd.write(byte(6));}void image05(){lcd.clear();字节 image24[8] ={B01010, B10100, B01011, B10101, B11010, B10101, B11010, B01110};字节 image25[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, image24); lcd.createChar(1, image25); lcd.createChar(2, image23); lcd.createChar(3, image07); lcd.createChar(4, image08); lcd.setCursor(7, 1);液晶显示器(字节(0)); lcd.setCursor(8, 1);液晶显示器(字节(1)); lcd.setCursor(6, 1);液晶显示器(字节(2)); lcd.setCursor(6, 0);液晶显示器(字节(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};字节 image25[8] ={B10000, B00000, B00000, B00000, B00000, B00000, B00000, B00000}; lcd.createChar(0, image08); lcd.createChar(1, image07); lcd.createChar(2, image09); lcd.createChar(3, image24); lcd.createChar(4, image25); lcd.setCursor(7, 0);液晶显示器(字节(0)); lcd.setCursor(6, 0);液晶显示器(字节(1)); lcd.setCursor(8, 0);液晶显示器(字节(2)); lcd.setCursor(7, 1);液晶显示器(字节(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, image24); lcd.createChar(1, image08); lcd.createChar(2, image07); lcd.createChar(3, image09); lcd.setCursor(7, 1);液晶显示器(字节(0)); lcd.setCursor(7, 0);液晶显示器(字节(1)); lcd.setCursor(6, 0);液晶显示器(字节(2)); lcd.setCursor(8, 0); lcd.write(byte(3));}
示意图
制造工艺