用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// Frame1display.clearDisplay();display.drawBitmap(30,0,RUN1, 80, 32, 1);display.display();delay(50);// Frame2display.clearDisplay();display.drawBitmap(30,0,RUN2, 80, 32, 1);display.display();delay(50);// Frame3display.clearDisplay();display.drawBitmap(30,0,RUN3, 80, 32, 1);display.display();delay(50);// Frame4display.clearDisplay();display.drawBitmap(30,0,RUN4, 80, 32, 1);display.display();delay(50);// Frame5display.clearDisplay();display.drawBitmap(30,0,RUN5, 80, 32, 1);display.display();delay(50);// Frame6display.clearDisplay();display.drawBitmap(30,0,RUN6, 80, 32, 1);display.display();delay(50);// Frame7display.clearDisplay();display.drawBitmap(30,0,RUN7, 80, 32, 1);display.display();delay(50);// Frame8display.clearDisplay();display.drawBitmap(30,0,RUN8, 80, 32, 1);display.display();delay(50);// Frame9display.clearDisplay();display.drawBitmap(30,0,RUN9, 80, 32, 1);display.display();delay(50); // Frame10display.clearDisplay();display.drawBitmap(30,0,RUN10, 80, 32, 1);display.display();delay(50); <br>
完成,谢谢观看,能不能给我点赞呢是
用arduino和OLED制作火柴人奔跑动画相关推荐
- 【180929】趣味火柴人奔跑游戏源码
(WPF帧动画效果)火柴人在画板上前进的效果,演示了MainWindow.xaml 的交互逻辑,调用系统默认的帧进行动画, 开启一个后台线程,用来控制帧频率的刷新速度,找到系统图片存放的位置,并添加图 ...
- jQuery制作火柴人游戏源码
提供代码鉴阅及源码下载 下载源码链接: 链接:https://pan.baidu.com/s/16U4C8FJk8cVwqn6Q0ciwkA 提取码:iqwg <!DOCTYPE html> ...
- 跑动的小火柴人(flash动画)
本教程描绘的是完全用ActionScript做的一个火柴棍小人跑步的动画,你相信吗?完全是AS实现的.先看效果吧: 做的方法非常简单,直接把下面代码复制到第一帧,最好把帧频调到18fps.以下为引用的 ...
- python编写会动的火柴人_火柴人跑步怎么画 如何制作一个正在奔跑的火柴人动画形象?火柴人跑步动作怎么画...
小编最近一直致力于制作火柴人动画,制作火柴人各种搞笑的动作.为什么会一直想要制作火柴人动画呢?因为将动画制作成GIF格式之后,再发到微信聊天上就是一个很搞笑的微信表情包啦.然后小编的朋友总说小编制作的 ...
- c++ vector最大值_第14章 火柴人的无尽冒险(《C和C++游戏趣味编程》配套教学视频)...
本章我们将编写一个2D跑酷类游戏,玩家键盘控制火柴人奔跑和跳跃,躲避蝙蝠到达终点.游戏地图随机生成,随着关卡数的增加,游戏难度越来越大,效果如图所示. 首先定义Player类,实现异步输入控制和延时改 ...
- 2020级C语言大作业 - 火柴人打羽毛球
分享20级同学大一上学期用C语言(及少量C++)实现的火柴人打羽毛球.由于同学们刚学了三个月的编程,实现还不够完善,工程代码.图片音乐素材可以从百度网盘下载: 链接:https://pan.baidu ...
- 第14章 火柴人的无尽冒险(《C和C++游戏趣味编程》配套教学视频)
(图书介绍:童晶:<C和C++游戏趣味编程>新书预告) 本章我们将编写一个2D跑酷类游戏,玩家键盘控制火柴人奔跑和跳跃,躲避蝙蝠到达终点.游戏地图随机生成,随着关卡数的增加,游戏难度越来越 ...
- Silverlight中生动的火柴人动画
Silverlight中生动的火柴人动画 nikola开发了一款可以浏览bvh动画(3DMAX中的一种动画脚本格式,可以快速方便的帮助制作人物动作的动画)Silverlight 应用. 你可以直接看到 ...
- 画火柴人动画的手机软件_火柴人动画制作软件(Pivot Stickfigure Animator)2.25 中文版附教程...
火柴人游戏一直深受广大玩家喜爱,有没有人想过火柴人动画是怎么制作出来的呢?今天小编就为大家带来一款火柴人动画制作软件Pivot Stickfigures Animator,它可以帮你快速而简单的制作出 ...
最新文章
- 解决SpringMVC中的 Could not find acceptable represent
- bagging和时间序列预测_时间序列的LSTM模型预测——基于Keras
- django和flask用MD5加密密码
- jsp jdbc mysql增删改查_使用JSP+SERVLET+JDBC实现对数据库的增删改查(详细)
- 通过@Import注解把类注入容器的四种方式
- EasyUI Easyloader 加载器
- Freemarker 最简单的例子程序
- linux指令格式介绍
- nmap扫描器的使用
- html网页设计实验原理,网页设计实验报告
- B区考研学校排名计算机,b区(b区考研学校排名)
- isupper函数用法
- 【学习KubeEdge】
- 微信小程序 校园食堂订餐点餐配送系统项目app毕业设计
- R语言Fisher检验的workspace问题
- 易语言服务器端口总被占用,易语言检测端口是否被占用的代码
- MFC更改对话框的背景色
- YUV图解 (YUV444, YUV422, YUV420, YV12, NV12, NV21)
- 2021高考成绩查询理综各科得分,2021高考一共几科 总分多少分
- Knockout.js的简单使用
热门文章
- 医院三级医院信息系统验收标准
- BW项目随手记:数据源无法激活使用问题,需同步至ODP数据源
- java计算机毕业设计校园快递联盟系统源码+系统+mysql数据库+lw文档
- 二手书交易平台相关调研
- 网站建设学习(二)---内网穿透
- PyCharm和Jupyter使用对比
- html5 jquery paint plugin,5+最好的画板,并在画布上手动绘制JavaScript和jQuery插件
- RC低通滤波器的响应特性
- 阅文java面试_【上海阅文集团Java面试】阅文后端Java,二轮技术一轮HR-看准网
- 怎么在vue中发起数据请求