• 欢迎大家分享资料!前往留言板评论即可!

解决OLED的二维码显示错误问题

合宙 模组资料网 2年前 (2021-05-15) 316次浏览 0个评论 扫描二维码

为了方便开发者进行二次开发,Air系列模块提供了disp接口,开发者可以使用它实现LCD/OLED屏幕的文字、图片、二维码等内容的显示。

但是由于OLED背景是黑色的,所以可能导致二维码显示出现问题,无法扫码:

解决OLED的二维码显示错误问题

看起来这个二维码的确有一点违和感。那么正确的二维码是什么样子的呢?我们来观察一下:

解决OLED的二维码显示错误问题

正确的二维码,四角是黑色方框,内是黑色的实心正方形,类似“回”字。所以扫码OLED的输出存在问题。

那么如何解决这个问题呢?把“背景”弄成白色:

解决OLED的二维码显示错误问题

如图所示,背景弄成白色以后,二维码的显示也就正常了,但是这样看起来很LOW,没有OLED的那种特殊的美感,而且耗电量也会增加(OLED原理是这样的:每一个像素,都是一个发光二极管,发光时工作,不发光时则完全不耗电。所以显示的面积越大,耗电量越多)。

不过别急,还有一个方案可供选择,那就是只把二维码部分的背景色涂黑即可。先模拟一下,p个图看看效果怎么样:

解决OLED的二维码显示错误问题

貌似还不错,很高大上,而且符合消费者日常的扫码习惯(二维码外,有一个“白边”衬托)。那么如何编码实现呢?

实际并不复杂,我们来分步解说。首先要理解它的工作原理:

解决OLED的二维码显示错误问题

如图所示,黑色背景上绘制一个白色方框,白色方框上边再绘制一个二维码,然后刷新显示即可。

示例代码:

module(..., package.seeall)

require "mono_std_spi_ssd1306"

--LCD分辨率的宽度和高度(单位是像素)
WIDTH, HEIGHT = disp.getlcdinfo()

-- qrencode.encode(string) 创建二维码信息
-- @param string 二维码字符串
-- @return width 生成的二维码信息宽度
-- @return data 生成的二维码数据
-- @usage local width, data = qrencode.encode("http://www.openluat.com")
local width, data = qrencode.encode('http://www.openluat.com')

-- disp.putqrcode(data, width, display_width, x, y) 显示二维码
-- @param data 从qrencode.encode返回的二维码数据
-- @param width 二维码数据的实际宽度
-- @param display_width 二维码实际显示宽度,实际显示宽度开根号需要是整数
-- @param x 二维码显示起始坐标x
-- @param y 二维码显示起始坐标y

--- 二维码显示函数
local function appQRCode()
    disp.setbkcolor(0)
    disp.setcolor(0xffff)
    disp.clear()
    disp.puttext('hello', 0, 0)
    disp.drawrect(64, 0, WIDTH - 1, HEIGHT - 1, 0xffff)
    local displayWidth = 50
    disp.putqrcode(data, width, displayWidth, 64 + (64 - displayWidth) / 2, (HEIGHT - displayWidth) / 2)
    disp.update()
end

appQRCode()

OK,根据示例代码我们修改一下,看看效果如何:

解决OLED的二维码显示错误问题

实际效果图。很不错哦,可以顺利扫码啦。

感谢开发者 超级VIP-帅B大人 冯鸣(235382) 提供图片素材。


转载请注明原文链接:解决OLED的二维码显示错误问题
喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址