查看: 1149|回复: 24

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

[复制链接]
  • TA的每日心情
    奋斗
    2019-8-25 00:01
  • 签到天数: 87 天

    [LV.6]常住居民II

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

    大家都知道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, 下载次数: 4)
    觉得好就打赏一下吧!!让我有动力继续写教程
  • TA的每日心情
    擦汗
    2019-9-17 15:14
  • 签到天数: 107 天

    [LV.6]常住居民II

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

    大家都知道:





































    这是篇水贴

    你今天的打赏,是我明天学习Arduino的动力!
  • TA的每日心情
    擦汗
    2019-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

    发表于 2019-8-4 08:59 | 显示全部楼层
    我看看大家都知道了什么
  • TA的每日心情
    开心
    2019-9-20 09:34
  • 签到天数: 745 天

    [LV.9]以坛为家II

    发表于 2019-8-4 10:45 | 显示全部楼层
    反正我不知道
    打赏作者鼓励一下!

    该用户从未签到

    发表于 2019-8-4 13:13 | 显示全部楼层
    6666666666666
  • TA的每日心情
    奋斗
    2019-8-25 00:01
  • 签到天数: 87 天

    [LV.6]常住居民II

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

    大家都知道:

    不阔能!下午3:00更新
    觉得好就打赏一下吧!!让我有动力继续写教程
  • TA的每日心情
    奋斗
    2019-8-25 00:01
  • 签到天数: 87 天

    [LV.6]常住居民II

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

    大家都知道:

    阔以了!!
    觉得好就打赏一下吧!!让我有动力继续写教程
  • TA的每日心情
    奋斗
    2019-8-25 00:01
  • 签到天数: 87 天

    [LV.6]常住居民II

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

    阔以了!!!
    觉得好就打赏一下吧!!让我有动力继续写教程
  • TA的每日心情
    奋斗
    2019-8-25 00:01
  • 签到天数: 87 天

    [LV.6]常住居民II

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

    大佬,可以了
    觉得好就打赏一下吧!!让我有动力继续写教程
    您需要登录后才可以回帖 登录 | 立即注册  

    本版积分规则

    热门推荐

    求ESP8266+0.96oled的天气代码
    求ESP8266+0.96oled的天气
    新人求助
    新人求助
    仿真出错!显示原因是这个,但是找不到该出错文件
    用Arduino制作支持ROS机器人操作系统的7轴机械臂
    用Arduino制作支持ROS机器
    参赛项目:[/backcolor] 用Arduino制作支持ROS机器人操作系统的7轴机械臂[/backcolor
    为拍月亮而生的便携望远镜系统。
    为拍月亮而生的便携望远镜
    参赛项目: 便携望远镜系统 参赛组员: 1人 布丁:嵌入式软件、上位机软件、电路、结
    光敏电阻检测环境光实验
    光敏电阻检测环境光实验
    本文节选自《Arduino程序设计基础》 一些简单的电子元件就可以做传感器使用,例如我
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   ( 蜀ICP备14017632号-3 )
    快速回复 返回顶部 返回列表