查看: 1892|回复: 29

教你让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, 下载次数: 11)
  • TA的每日心情
    擦汗
    2019-11-10 00:34
  • 签到天数: 115 天

    [LV.6]常住居民II

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

    大家都知道:





































    这是篇水贴

  • TA的每日心情
    擦汗
    2019-7-29 00:08
  • 签到天数: 47 天

    [LV.5]常住居民I

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

    [LV.10]以坛为家III

    发表于 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 | 显示全部楼层

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

    本版积分规则

    热门推荐

    Arduino MEGA 与UNO 通过nRF24L模块通讯
    Arduino MEGA 与UNO 通过n
    之前在深水宝很“实惠”的店铺买了一些原件,随手砍了esp8266以及nRF24L*3 因为缺
    【原创】 drawbot平面关节scara机械臂写字机 画画机器人直播...
    【原创】 drawbot平面关节
    这个项目上个月就在做了,结构和代码反反复复改了多次,加上自己又太忙,一直没来得及
    新手求教:用模拟口读取可调电阻的值
    新手求教:用模拟口读取可
    我想问的有以下两个问题: 1.如图,模拟口读取的是可调电阻至VCC一侧的模拟值,还是可
    【Arduino】108种传感器系列实验(37)---MQ-3酒精传感器模块
    【Arduino】108种传感器系
    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是
    AI分拣系统
    AI分拣系统
    人工智能分拣系统 应用简介 在日常生活中,人们经常需要对物体进行分类,”材料分类
    Copyright   ©2015-2016  Arduino中文社区  Powered by©Discuz!   
    快速回复 返回顶部 返回列表