教你让OLED动起来!多重字符串版!-Arduino中文社区 - Powered by Discuz! Archiver

新手之帆 发表于 2019-8-3 21:05

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

本帖最后由 新手之帆 于 2020-11-1 17:02 编辑

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


LZ研究了一下,发现Adafruit_SSD1306这个库,都是由buffer的数组进行显示的
清屏也只是将全部化为0
里面是这样写的:

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


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


但是
这个函数要怎样写呢
首先,我们要摸索出来我的一个for 的起点和终点 也就是该行的第一个像素点和最后一个像素点
这里的字是8*8大小的
根据我的摸索及实际使用
我改好了库
请看图片

大概是这样 能做到效果就可以了

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


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


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


下面给出一段小示例 关于上面所讲的millis以及变量的使用
**** Hidden Message *****
就这样,烧录进去之后,你就会看到blink的效果 完全不需要延时
这大大提高了程序的运行效率


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


结合上一篇帖子的代码 我们可以给出不需要库的代码
**** Hidden Message *****
这里面变量名的命名比较粗浅 各位请见谅
特别提醒:OLED_RESET的脚是有板载LED接口而定的 这不同的板子是不同的
像我用的是esp32 就写48266是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 就填01就是16 2就是32 3就是48 就这样 没别的可填
roll_y就是y坐标 只有4个数 0 16 32 48

最后是库文件

求版主大佬加精!

Creeper666 发表于 2019-8-3 23:54

佛了

大家都知道:





































这是篇水贴

t3486784401 发表于 2019-8-4 08:59

我看看大家都知道了什么

tiedian 发表于 2019-8-4 09:35

学习学习

单片机菜鸟 发表于 2019-8-4 10:45

反正我不知道

shameless 发表于 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

单片机菜鸟 发表于 2019-8-4 10:45
反正我不知道

大佬,可以了
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 教你让OLED动起来!多重字符串版!