Данный код идет в устройстве и доступен в web-редакторе.
Вы можете самостоятельно или с нашей помощью внести изменения для адаптации алгоритма под вас.
-- раздел импорта
local rfid = require("rfid")
local indication = require("indication")
local binascii = require("binascii")
local hw = require("hw")
-- инициализация необходимых объектов
local reader = rfid.Reader({reset_pin=pio.GPIO25})
local leds = indication.Leds.new({RGB=true, ledPin=pio.GPIO32})
local snd = indication.Sound.new(pio.GPIO21)
local start_web = hw.WebStarter()
local wdt_on = Settings.get("sys_wdt") == "on"
local locker = hw.OUT(nil, false, 1)
local btn = hw.IN()
-- настройки modbus
local params = {
addr = tonumber(Settings.get("net_dest")),
port = uart.UART2,
rxpin = 13,
txpin = 14,
rtspin = 12,
baudrate = 115200,
parity = uart.PARNONE,
clear= true
}
-- переопределим световые эффекты
function leds:ok(time_ms)
leds:set(100, 255, 100, time_ms or 100)
end
function leds:err(time_ms)
leds:set(255, 100, 100, time_ms or 100)
end
-- индикация при запуске
leds:start()
snd:start()
-- запускаем поток modbus
thread.start(function() modbus.rtu.init(params.addr, params.port, params.rxpin, params.txpin, params.rtspin, params.baudrate, params.parity, params.clear) end)
-- основной цикл
reader.process({
timeout_ms = 200,
mode = rfid.MODE_LOOP,
uidtype = rfid.UID_TAB,
wdt = wdt_on,
checkfunc = function(uid)
modbus.rtu.setregs8(0, table.unpack(uid.tab))
end,
waitfunc = function()
local req = {addr = 0xf0, qty = 3, clear = true}
local ret = modbus.rtu.getregs(req.addr, req.qty, req.clear)
local action, web_pwd, new_addr = ret[1], ret[2], ret[3]
if action == 1 then
locker.open()
leds:ok()
snd:ok()
elseif action == 2 then
locker.close()
leds:err()
snd:err()
end
if web_pwd ~= 0 then
start_web(web_pwd)
end
if new_addr ~= 0 then
Settings.set("net_dest", string.format("%d", new_addr & 0xfe))
os.exit()
end
end
})