【微控制器筆記】NodeMcu入坑—LUA指令碼語言PWM調光
阿新 • • 發佈:2019-02-15
先上程式碼
--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) 用定時器物件作為引數呼叫的回撥函式
有兩個參考資料很值得去下載,度娘一下就有,這裡就不上傳了
1.nudemcu中文版API
2.LUA程式設計指南
By Urien 2018年7月4日 15:48:21