用arduino和OLED弄一个火柴人奔跑动画
用arduino和OLED制作火柴人奔跑动画
有趣火柴人奔跑动画
2.为动画创建位图
这可能是最耗时的步骤。你必须创建一组框架,这将适合128x32格式。您可以尝试从任何拖鞋剪贴片中创建它们,您可以在网上找到。
所有的框架需要是黑白的!!!
我创造了显示奔跑生物的帧,一共八张
3.连接
OLED | arduino |
---|---|
GND | GND |
VCC | VCC |
SDA | A4 |
SCK | A5 |
OLED 显示屏有四个引脚,分别是:
1.SDA(数据线) SCK(时钟线) VDD(3.3V) GND
2.在UNO开发板上I2C接口,SDA对应D4,SCK对应D5
3.在MEGA2560开发板上I2C接口,SDA对应D20, SCL对应D21
3.创建位图的代码表示
①使用在线取模软件
要创建位图的代码表示,我们将使用在线工具
图像2cpp
你可以找到它去下面的网址
https://javl.github.io/image2cpp/
执行以下步骤:
- 在Select Image(选择图像)部分,逐个打开帧文件
- 通过检查图像设置部分检查上传的Image Settings(图像)是否正确
- 如果想要具有黑色背景,并且只点亮线像素,请检查倒置图像颜色,在Background选择Black
- 在Output(输出部分)
- 在Code output format(代码输出格式)中指定"Arduino code ,single bitmap"
- 在Identifier/Prefix(标识符/前缀)中提供动画名称,必须要英文
- 按Generate code(生成按钮)
- 保存生成的代码。它将被粘贴到arduino编译器
4.创建动画代码
①首先,我们需要引用所需的头文件
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
前一个用于 I2C 接口,其他两个用于与 OLED 显示器配合工作
②我们需要定义显示屏的大小
#define SCREEN_WIDTH 128 // OLED 显示宽度128 in pixels
#define SCREEN_HEIGHT 64 // OLED 显示高度64 in pixels
③引用函数库,里面有宣布通过 OLED 显示连接的引脚。有了这些别针,我们宣布显示器本身
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
然后,您必须复制粘贴我们从Image2cpp 中获得的代码
④这是一个相当长的代码,所以我不会粘贴在这里的全部。我只显示一帧
static const unsigned char Frame1 [] PROGMEM = {
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0xff, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00,
0x00, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x01, 0x83, 0x80, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x00, 0x00, 0x03, 0x0c,
0x40, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xe1, 0x0c, 0x60, 0x00, 0x00, 0x00, 0x00, 0xf0,
0x00, 0x1f, 0xff, 0x80, 0x20, 0x00, 0x00, 0x00, 0x01, 0xe0, 0x00, 0x01, 0xf9, 0xe0, 0x20, 0x00,
0x00, 0x00, 0x03, 0xc0, 0x00, 0x00, 0xcc, 0x78, 0x60, 0x00, 0x00, 0x03, 0xe7, 0x80, 0x00, 0x00,
0x64, 0x1f, 0xc0, 0x00, 0x00, 0x0e, 0xff, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x00, 0x1c,
0x0e, 0x00, 0x00, 0x00, 0x33, 0xf0, 0x00, 0x00, 0x00, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x18, 0x1f,
0xf0, 0x00, 0x00, 0x7f, 0xf0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x00, 0x00,
0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x03, 0x80, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00,
0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00,
0x01, 0x86, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
然后,在设置功能中,我们正在初始化 OLED 显示屏
void setup() {
Serial.begin(9600);
delay(500);
// by default, we'll generate the high voltage from the 3.3v line internally! (neat!)
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); // initialize with the I2C addr 0x3D (for the 128x64)
}
然后,我们有循环功能,我们重播所有10帧在50ms间隔
void loop() {
// Diplay Animation
// Frame1
display.clearDisplay();
display.drawBitmap(30,0,RUN1, 80, 32, 1);
display.display();
delay(50);
// Frame2
display.clearDisplay();
display.drawBitmap(30,0,RUN2, 80, 32, 1);
display.display();
delay(50);
// Frame3
display.clearDisplay();
display.drawBitmap(30,0,RUN3, 80, 32, 1);
display.display();
delay(50);
// Frame4
display.clearDisplay();
display.drawBitmap(30,0,RUN4, 80, 32, 1);
display.display();
delay(50);
// Frame5
display.clearDisplay();
display.drawBitmap(30,0,RUN5, 80, 32, 1);
display.display();
delay(50);
// Frame6
display.clearDisplay();
display.drawBitmap(30,0,RUN6, 80, 32, 1);
display.display();
delay(50);
// Frame7
display.clearDisplay();
display.drawBitmap(30,0,RUN7, 80, 32, 1);
display.display();
delay(50);
// Frame8
display.clearDisplay();
display.drawBitmap(30,0,RUN8, 80, 32, 1);
display.display();
delay(50);
// Frame9
display.clearDisplay();
display.drawBitmap(30,0,RUN9, 80, 32, 1);
display.display();
delay(50);
// Frame10
display.clearDisplay();
display.drawBitmap(30,0,RUN10, 80, 32, 1);
display.display();
delay(50); <br>
完成,谢谢观看,能不能给我点赞呢是😁
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfgijeg
系列文章
更多
同类精品
更多
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
怎样阻止微信小程序自动打开
PHP中文网 06-13