美文网首页
灯厂们背后的MCU,看LPC如何花式点灯(之五)

灯厂们背后的MCU,看LPC如何花式点灯(之五)

作者: MagicoePaper | 来源:发表于2020-07-27 18:19 被阅读0次

    终于来到了最后一篇,这一篇我们总结下这种外设点灯的优点。之后我们会用Arduino上知名的插件NeoPixel-KnightRider移植到MCU,实现花式点灯.

    优缺点总结

    方式 优点 缺点
    单核GPIO翻转 简单,易上手,RAM/Flash消耗少 占用MCU
    SPI轮训方式 简单,易上手,Flash消耗小 占MCU资源,RAM开销大
    SPI DMA方式 Flash消耗小,不占MCU资源 RAM开销大,代码略复杂
    EZH的方式 库直接用,简单,不占MCU资源 需要一点RAM和Flash
    双核的方式 易上手,不占主MCU资源 需要额外的RAM和Flash,工程有点复杂
    SCT的方式 Flash和RAM开销小 有点复杂,占用一点MCU的资源

    我个人是比较倾向用EZH的实现WS2812这种串行协议的,一来用库简单,MCU开销很小。所以接下来移植NeoPixel-KnightRider这个库我们会以EZH的方式进行。

    移植NeoPixel-KnightRider

    NeoPixel-KnightRider是结合Arduino开发板和AdaFruit NeoPixel灯条设计的一个流水灯的代码库,可以实现呼吸灯等显示效果。


    NeoPixel-KnightRider配合Arduino

    其代码比较简单,其核心API就 个

    • knightRider() 呼吸流水灯的灯效
    • clearStrip() 熄灭灯带所有的灯
    • dimColor()设定灯的亮度
    • colorWheel()普通流水灯的灯效
      根据NeoPixel-KnightRider的API我们按照SDK的API风格改成了:
    • WS2812Strip_KnightRider()
    • WS2812_StripClear()
    • WS2812_ColorDim()
    • WS2812_ColorWheel()
      增加了WS2812_StripInit() API用于初始化
      增加了独立的WS2812_StripShow() API用于把颜色数据发送个WS2812
      实际应用中,我们一般调用
      WS2812_StripInit()完成初始化
      WS2812Strip_KnightRider() 跑马灯

    具体可以参看如下代码,比较简单


    应用实例代码

    这里我们搭了个实际的demo,用的是P0_26引脚(LPC55S69-EVK的P17的D11脚)接的WS2812的Data In数据线,5V和GND直接从LPC55S69-EVK的P16的+5V和GND引出的。
    江湖规矩,上图。图中,红线是+5V,黑线是GND,棕线是数据线。


    LPC55S69-EVK连接WS2812灯带

    连接好后,别忘了根据灯带上WS2812的个数调整WS2812_PIXELS的值。这里我们设定为80。


    设置WS2812灯带上LED的个数

    OK,让我们看看最终的效果吧。

    链接:https://pan.baidu.com/s/1CrGBr1nLrw65v35I3Hamhw
    提取码:p7rk

    相关文章

      网友评论

          本文标题:灯厂们背后的MCU,看LPC如何花式点灯(之五)

          本文链接:https://www.haomeiwen.com/subject/ssxtrktx.html