查看: 14428|回复: 71

教你让OLED动起来!多重字符串版!

  [复制链接]

该用户从未签到

发表于 2019-8-3 21:05 | 显示全部楼层 |阅读模式
本帖最后由 新手之帆 于 2020-11-1 17:02 编辑

大家都知道arduino单片机是单线程的
而上次教程中的多段字符串的运行速度必须一致
而且 一个loop里面还要延时
这岂不是阻塞了程序的运行吗
那么
究竟要怎么样才能弥补缺点呢
LZ专门看了一下我所使用的OLED库
清屏是清全部的(在我所使用的库里)
那么
我要1/2  1/3要怎么办呢?


LZ研究了一下,发现Adafruit_SSD1306这个库,都是由buffer的数组进行显示的
清屏也只是将全部化为0
里面是这样写的: `Z%0IEGCV}A4H6(6RQGTXH1.png

由此,我们可以确定 范围是从0-(SSD1306_LCDWIDTH*SSD1306_LCDHEIGHT/8)-1的(指像素点啊)


然后,我们要的效果是什么?
滚动屏对吧
而且
是多重字符串的
所以
清屏肯定要有清1/2 1/4之类的
但该库没有
所以,我就自己加了上去(文末下载库)
而且,我只写了清除1行的函数
但是 我们可以加个参数 写要清除哪一行 这样 我们就可以做到滚动的效果


但是
这个函数要怎样写呢
首先,我们要摸索出来我的一个for 的起点和终点 也就是该行的第一个像素点和最后一个像素点
这里的字是8*8大小的
根据我的摸索及实际使用
我改好了库
请看图片
8VCZGLEYDQJ2F2277]M}[NA.png
大概是这样 能做到效果就可以了

也许会有人说为什么没加大括号 这也许是你的C++学得不好了
如果执行的内容只有1行的话 那么可以省略


那么,解决了屏幕的清除问题 我不想用delay 可以怎么办啊


首先,我们先创建一个整形变量
int last_time;
然后在setup的最后赋值
last_time=millis();
然后在loop里面这样判断
if(millis()-last_time>=你设定的时间值也就是如果不这样写 你的delay要写多少)
  就执行某个动作


下面给出一段小示例 关于上面所讲的millis以及变量的使用
游客,如果您要查看本帖隐藏内容请回复

就这样,烧录进去之后,你就会看到blink的效果 完全不需要延时
这大大提高了程序的运行效率


所以
我们可不可以
如果(当前时间大于我的设定值)
  清屏;
就这样啊
就可以实现我们想要的效果


结合上一篇帖子的代码 我们可以给出不需要库的代码
游客,如果您要查看本帖隐藏内容请回复

这里面变量名的命名比较粗浅 各位请见谅
特别提醒:OLED_RESET的脚是有板载LED接口而定的 这不同的板子是不同的
像我用的是esp32 就写4  8266是2好像 还是4 uno nano是13
上传完成之后
接线正确 你就会看到屏幕上的字符在滚动了


接下来 我们要把它们写成一个库


名字就叫ROLL吧!


void Begin(void);
void Loop(String,int,int,int,int);

只有2个函数,但功能很强大!

Begin()放在setup

Loop()就loop

这里主要讲解一下Loop
void ROLL::Loop(String s,int len,int roll_y,int delay_time,int now_times)
s就是C++风格的字符串 len就是s的长度
delay_time是你的流畅度 你要延时的时间
now_times就是根据roll_y 如果roll_y为0 就填0  1就是16 2就是32 3就是48 就这样 没别的可填
roll_y就是y坐标 只有4个数 0 16 32 48

最后是库文件
Adafruit_GFX_Library.rar (273.81 KB, 下载次数: 45)

该用户从未签到

发表于 2019-8-3 23:54 | 显示全部楼层
佛了

大家都知道:





































这是篇水贴

该用户从未签到

发表于 2019-8-4 08:59 | 显示全部楼层
我看看大家都知道了什么

该用户从未签到

发表于 2019-8-4 10:45 | 显示全部楼层
反正我不知道

该用户从未签到

发表于 2019-8-4 13:13 | 显示全部楼层
6666666666666

该用户从未签到

 楼主| 发表于 2019-8-4 13:39 | 显示全部楼层
Creeper666 发表于 2019-8-3 23:54
佛了

大家都知道:

不阔能!下午3:00更新

该用户从未签到

 楼主| 发表于 2019-8-4 15:49 | 显示全部楼层
Creeper666 发表于 2019-8-3 23:54
佛了

大家都知道:

阔以了!!

该用户从未签到

 楼主| 发表于 2019-8-4 15:50 | 显示全部楼层
t3486784401 发表于 2019-8-4 08:59
我看看大家都知道了什么

阔以了!!!

该用户从未签到

 楼主| 发表于 2019-8-4 15:51 | 显示全部楼层

大佬,可以了
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

热门推荐

点灯科技的blink库有没有设备到设备间分享数据功能啊
点灯科技的blink库有没有
请问下,点灯科技的blink库里有没有接受其他设备的函数程序啊? 我想设计4个8266设
OLED 128*64自制可达10000000个选项的菜单(已更新)
OLED 128*64自制可达10000
OLED 128*64自制可达10000000个选项的菜单 温馨提示: 建议占个楼再食用本帖子
DIY炫彩灯带,竟如此简单,更有硬件开发工具免费领!
DIY炫彩灯带,竟如此简单
什么是涂鸦Arduino SDK? Arduino 是全球最流行的开源硬件平台,涂鸦官方推出的 Ardui
ESP8266利用Blinker、小爱同学和本地按钮控制4路开关
ESP8266利用Blinker、小爱
案例介绍:小爱同学(安卓、苹果、小爱音响均可)控制4路开关 硬件需求:ESP8266 node
Seeeduion XIAO
Seeeduion XIAO
请问有那位大神用Seeeduion XIAO做过HID设备吗 求教程 网上有些说要用 TinyUSB来做 不
Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
快速回复 返回顶部 返回列表