×
嵌入式 > 技术百科 > 详情

【单片机笔记】NodeMcu入坑—LUA脚本语言PWM调光

发布时间:2020-06-04 发布时间:
|

先上代码


--pwm.lua

pin = 4

dutyMAX = 1023

dutyMIN = 0

flag = 0

pwm.setup(pin,100,dutyMAX)

pwm.start(pin)

function changeDuty()

    local duty = pwm.getduty(pin);

    print(duty);

    if(flag == 0) then

        if (duty > dutyMIN+10) then

            pwm.setduty(pin,duty - 10);

        else

            flag = 1;

        end

    else

        if (duty < dutyMAX-10) then

            pwm.setduty(pin,duty + 10);

        else

            flag = 0;

        end

    end

end

tmr.alarm(0 , 50 , tmr.ALARM_AUTO , changeDuty);

这个程序功能很简单,就是每50ms调用一次changeDuty功能函数,而这个函数采用的是定时器回调的方式去实现,


tmr.alarm(0 , 50 , tmr.ALARM_AUTO , changeDuty);

上面这个句话就是把changeDuty这个函数注册到定时器,定时器每50ms会回调一次。在这个功能函数里面就更简单了,每次进入都会打印一次当前的pwm占空比,以及改变占空比,实现pwm调光呼吸灯。


下面一步步讲解:


管脚初始化 PWM功能函数:


pwm.setup(pin,clock,duty)

pin 1〜12, IO 指数

clock 1〜1000, pwm 频率

duty 0〜1023, pwm 占空比, 最大 1023(10bit)

自定义函数

function 函数名()

代码块

end 

if 流程控制

if (判断条件) then

[条件满足是执行的语句]

else

[条件不满足是执行的语句]

end 

定时器

NodeMCU 提供 7 个静态定时器, 编号为 0-6。

使用此计时器释放资源时, 请调用 tmr.unregister()。

tmr.alarm([id/ref], interval_ms, mode, func())

参数:

id/ref 定时器 ID(0-6) 或对象,

interval_ms 定时器间隔(以毫秒为单位) 。 最大值是 6870947。

mode 定时器模式:

tmr.ALARM_SINGLE 一次性报警(不需要调用 tmr.unregister())

tmr.ALARM_SEMI 手动重复报警(调用 tmr.start()重启)

tmr.ALARM_AUTO 自动重复报警

func(timer) 用定时器对象作为参数调用的回调函数 

 

 

『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
ADI 高精度低功耗精密放大器