uart_free_protocol = 1 -- 设置全局变量uart_free_protocol,使用自由串口协议 -- 开锁指令数组(按地址1-5和锁编号1-12顺序) openlock = { -- 0x01地址 [0] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x01,0x05}, -- 01锁 [1] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x02,0x06}, -- 02锁 [2] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x03,0x07}, -- 03锁 [3] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x04,0x00}, -- 04锁 [4] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x05,0x01}, -- 05锁 [5] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x06,0x02}, -- 06锁 [6] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x07,0x03}, -- 07锁 [7] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x08,0x0C}, -- 08锁 [8] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x09,0x0D}, -- 09锁 [9] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x0A,0x0E}, -- 10锁 [10] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x0B,0x0F}, -- 11锁 [11] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x04,0x00,0x01,0x0C,0x08}, -- 12锁 -- 0x02地址 [12] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x01,0x06}, -- 13锁 [13] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x02,0x05}, -- 14锁 [14] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x03,0x04}, -- 15锁 [15] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x04,0x03}, -- 16锁 [16] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x05,0x02}, -- 17锁 [17] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x06,0x01}, -- 18锁 [18] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x07,0x00}, -- 19锁 [19] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x08,0x0F}, -- 20锁 [20] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x09,0x0E}, -- 21锁 [21] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x0A,0x0D}, -- 22锁 [22] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x0B,0x0C}, -- 23锁 [23] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x04,0x00,0x01,0x0C,0x0B}, -- 24锁 -- 0x03地址 [24] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x01,0x07}, -- 25锁 [25] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x02,0x04}, -- 26锁 [26] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x03,0x05}, -- 27锁 [27] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x04,0x02}, -- 28锁 [28] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x05,0x03}, -- 29锁 [29] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x06,0x00}, -- 30锁 [30] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x07,0x01}, -- 31锁 [31] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x08,0x0E}, -- 32锁 [32] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x09,0x0F}, -- 33锁 [33] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x0A,0x0C}, -- 34锁 [34] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x0B,0x0D}, -- 35锁 [35] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x04,0x00,0x01,0x0C,0x0A}, -- 36锁 -- 0x04地址 [36] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x01,0x00}, -- 37锁 [37] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x02,0x03}, -- 38锁 [38] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x03,0x02}, -- 39锁 [39] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x04,0x05}, -- 40锁 [40] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x05,0x04}, -- 41锁 [41] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x06,0x07}, -- 42锁 [42] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x07,0x06}, -- 43锁 [43] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x08,0x09}, -- 44锁 [44] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x09,0x08}, -- 45锁 [45] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x0A,0x0B}, -- 46锁 [46] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x0B,0x0A}, -- 47锁 [47] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x04,0x00,0x01,0x0C,0x0D}, -- 48锁 -- 0x05地址 [48] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x01,0x01}, -- 49锁 [49] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x02,0x02}, -- 50锁 [50] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x03,0x03}, -- 51锁 [51] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x04,0x04}, -- 52锁 [52] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x05,0x05}, -- 53锁 [53] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x06,0x06}, -- 54锁 [54] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x07,0x07}, -- 55锁 [55] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x08,0x08}, -- 56锁 [56] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x09,0x09}, -- 57锁 [57] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x0A,0x0A}, -- 58锁 [58] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x0B,0x0B}, -- 59锁 [59] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x04,0x00,0x01,0x0C,0x0C} -- 60锁 } -- 一键全开指令数组(按地址1-5顺序) openAlllock = { [0] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x05,0x00,0x00,0x04}, -- 0x01地址 [1] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x05,0x00,0x00,0x07}, -- 0x02地址 [2] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x05,0x00,0x00,0x06}, -- 0x03地址 [3] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x05,0x00,0x00,0x01}, -- 0x04地址 [4] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x05,0x00,0x00,0x00} -- 0x05地址 } -- 读取所有通道状态指令数组(按地址1-5顺序) readLockState = { [0] = {[0] = 0xA5,0xA5,0x00,0x01,0x00,0x0A,0x00,0x00,0x0B}, -- 0x01地址 [1] = {[0] = 0xA5,0xA5,0x00,0x02,0x00,0x0A,0x00,0x00,0x08}, -- 0x02地址 [2] = {[0] = 0xA5,0xA5,0x00,0x03,0x00,0x0A,0x00,0x00,0x09}, -- 0x03地址 [3] = {[0] = 0xA5,0xA5,0x00,0x04,0x00,0x0A,0x00,0x00,0x0E}, -- 0x04地址 [4] = {[0] = 0xA5,0xA5,0x00,0x05,0x00,0x0A,0x00,0x00,0x0F} -- 0x05地址 } sendID = 0 -- 全局发送ID sendFlag = 0 -- 全局发送状态,设置优先级 0-查询状态 1-发送开锁 -- 系统加载LUA脚本文件之后,立即调用此回调函数,通常用于执行初始化操作,仅执行一次。 -- on_timer(timer_id)函数是LUA定时器中断函数,timer_id值范围为0-31。 function on_init() start_timer(1, 200, 0, 0) end -- 接收查询所有通道状态指令,改变状态 function on_uart_recv_data(packet, bytelen) -- 第3个字节packet[2]为锁控板地址,第9个字节packet[8 + i]为所有锁状态(一个锁控板有12把锁) if packet[0] == 0xA5 and packet[1] == 0xA5 and packet[2] ~= 0x00 and packet[3] == 0x00 and packet[5] == 0x0A and packet[6] == 0x00 and packet[7] == 0x0C then -- 采用遍历赋值,待验证 -- local screenId = 0 -- if packet[2] == 1 then -- screenId = 0 -- elseif packet[2] == 2 then -- screenId = 1 -- elseif packet[2] == 3 then -- screenId = 2 -- elseif packet[2] == 4 then -- screenId = 3 -- elseif packet[2] == 5 then -- screenId = 4 -- end -- for i = 0, 11 do -- if packet[8 + i] == 0 then -- set_value(screenId, i + 1, 1) -- else -- set_value(screenId, i + 1, 0) -- end -- end if packet[2] == 1 then -- 0x01地址 if packet[8] == 0 then set_value(0, 1, 1) else set_value(0, 1, 0) end if packet[9] == 0 then set_value(0, 2, 1) else set_value(0, 2, 0) end if packet[10] == 0 then set_value(0, 3, 1) else set_value(0, 3, 0) end if packet[11] == 0 then set_value(0, 4, 1) else set_value(0, 4, 0) end if packet[12] == 0 then set_value(0, 5, 1) else set_value(0, 5, 0) end if packet[13] == 0 then set_value(0, 6, 1) else set_value(0, 6, 0) end if packet[14] == 0 then set_value(0, 7, 1) else set_value(0, 7, 0) end if packet[15] == 0 then set_value(0, 8, 1) else set_value(0, 8, 0) end if packet[16] == 0 then set_value(0, 9, 1) else set_value(0, 9, 0) end if packet[17] == 0 then set_value(0, 10, 1) else set_value(0, 10, 0) end end if packet[2] == 2 then -- 0x02地址 if packet[8] == 0 then set_value(1, 1, 1) else set_value(1, 1, 0) end if packet[9] == 0 then set_value(1, 2, 1) else set_value(1, 2, 0) end if packet[10] == 0 then set_value(1, 3, 1) else set_value(1, 3, 0) end if packet[11] == 0 then set_value(1, 4, 1) else set_value(1, 4, 0) end if packet[12] == 0 then set_value(1, 5, 1) else set_value(1, 5, 0) end if packet[13] == 0 then set_value(1, 6, 1) else set_value(1, 6, 0) end if packet[14] == 0 then set_value(1, 7, 1) else set_value(1, 7, 0) end if packet[15] == 0 then set_value(1, 8, 1) else set_value(1, 8, 0) end if packet[16] == 0 then set_value(1, 9, 1) else set_value(1, 9, 0) end if packet[17] == 0 then set_value(1, 10, 1) else set_value(1, 10, 0) end end if packet[2] == 3 then -- 0x03地址 if packet[8] == 0 then set_value(2, 1, 1) else set_value(2, 1, 0) end if packet[9] == 0 then set_value(2, 2, 1) else set_value(2, 2, 0) end if packet[10] == 0 then set_value(2, 3, 1) else set_value(2, 3, 0) end if packet[11] == 0 then set_value(2, 4, 1) else set_value(2, 4, 0) end if packet[12] == 0 then set_value(2, 5, 1) else set_value(2, 5, 0) end if packet[13] == 0 then set_value(2, 6, 1) else set_value(2, 6, 0) end if packet[14] == 0 then set_value(2, 7, 1) else set_value(2, 7, 0) end if packet[15] == 0 then set_value(2, 8, 1) else set_value(2, 8, 0) end if packet[16] == 0 then set_value(2, 9, 1) else set_value(2, 9, 0) end if packet[17] == 0 then set_value(2, 10, 1) else set_value(2, 10, 0) end end if packet[2] == 4 then -- 0x04地址 if packet[8] == 0 then set_value(3, 1, 1) else set_value(3, 1, 0) end if packet[9] == 0 then set_value(3, 2, 1) else set_value(3, 2, 0) end if packet[10] == 0 then set_value(3, 3, 1) else set_value(3, 3, 0) end if packet[11] == 0 then set_value(3, 4, 1) else set_value(3, 4, 0) end if packet[12] == 0 then set_value(3, 5, 1) else set_value(3, 5, 0) end if packet[13] == 0 then set_value(3, 6, 1) else set_value(3, 6, 0) end if packet[14] == 0 then set_value(3, 7, 1) else set_value(3, 7, 0) end if packet[15] == 0 then set_value(3, 8, 1) else set_value(3, 8, 0) end if packet[16] == 0 then set_value(3, 9, 1) else set_value(3, 9, 0) end if packet[17] == 0 then set_value(3, 10, 1) else set_value(3, 10, 0) end end if packet[2] == 5 then -- 0x05地址 if packet[8] == 0 then set_value(4, 1, 1) else set_value(4, 1, 0) end if packet[9] == 0 then set_value(4, 2, 1) else set_value(4, 2, 0) end if packet[10] == 0 then set_value(4, 3, 1) else set_value(4, 3, 0) end if packet[11] == 0 then set_value(4, 4, 1) else set_value(4, 4, 0) end if packet[12] == 0 then set_value(4, 5, 1) else set_value(4, 5, 0) end if packet[13] == 0 then set_value(4, 6, 1) else set_value(4, 6, 0) end if packet[14] == 0 then set_value(4, 7, 1) else set_value(4, 7, 0) end if packet[15] == 0 then set_value(4, 8, 1) else set_value(4, 8, 0) end if packet[16] == 0 then set_value(4, 9, 1) else set_value(4, 9, 0) end if packet[17] == 0 then set_value(4, 10, 1) else set_value(4, 10, 0) end end end end -- 用户触摸修改控件后,执行此回调函数.点击按钮控件,修改文本控件、修改滑动条、滑动选择都会触发此事件。 -- screen 画面ID -- control 控件ID -- value 控件值 function on_control_notify(screen, control, value) -- 按钮点击事件开锁,后期考虑采用一定的规律定制计算公式,如sendID = (screen * 12) + (control - 11) if screen == 0 and control == 11 and value == 1 then -- 画面0, 0x01地址 sendID = 0 sendFlag = 1 elseif screen == 0 and control == 12 and value == 1 then sendID = 1 sendFlag = 1 elseif screen == 0 and control == 13 and value == 1 then sendID = 2 sendFlag = 1 elseif screen == 0 and control == 14 and value == 1 then sendID = 3 sendFlag = 1 elseif screen == 0 and control == 15 and value == 1 then sendID = 4 sendFlag = 1 elseif screen == 0 and control == 16 and value == 1 then sendID = 5 sendFlag = 1 elseif screen == 0 and control == 17 and value == 1 then sendID = 6 sendFlag = 1 elseif screen == 0 and control == 18 and value == 1 then sendID = 7 sendFlag = 1 elseif screen == 0 and control == 19 and value == 1 then sendID = 8 sendFlag = 1 elseif screen == 0 and control == 20 and value == 1 then sendID = 9 sendFlag = 1 elseif screen == 1 and control == 11 and value == 1 then -- 画面1,0x02地址 sendID = 12 sendFlag = 1 elseif screen == 1 and control == 12 and value == 1 then sendID = 13 sendFlag = 1 elseif screen == 1 and control == 13 and value == 1 then sendID = 14 sendFlag = 1 elseif screen == 1 and control == 14 and value == 1 then sendID = 15 sendFlag = 1 elseif screen == 1 and control == 15 and value == 1 then sendID = 16 sendFlag = 1 elseif screen == 1 and control == 16 and value == 1 then sendID = 17 sendFlag = 1 elseif screen == 1 and control == 17 and value == 1 then sendID = 18 sendFlag = 1 elseif screen == 1 and control == 18 and value == 1 then sendID = 19 sendFlag = 1 elseif screen == 1 and control == 19 and value == 1 then sendID = 20 sendFlag = 1 elseif screen == 1 and control == 20 and value == 1 then sendID = 21 sendFlag = 1 elseif screen == 2 and control == 11 and value == 1 then -- 画面2,0x03地址 sendID = 24 sendFlag = 1 elseif screen == 2 and control == 12 and value == 1 then sendID = 25 sendFlag = 1 elseif screen == 2 and control == 13 and value == 1 then sendID = 26 sendFlag = 1 elseif screen == 2 and control == 14 and value == 1 then sendID = 27 sendFlag = 1 elseif screen == 2 and control == 15 and value == 1 then sendID = 28 sendFlag = 1 elseif screen == 2 and control == 16 and value == 1 then sendID = 29 sendFlag = 1 elseif screen == 2 and control == 17 and value == 1 then sendID = 30 sendFlag = 1 elseif screen == 2 and control == 18 and value == 1 then sendID = 31 sendFlag = 1 elseif screen == 2 and control == 19 and value == 1 then sendID = 32 sendFlag = 1 elseif screen == 2 and control == 20 and value == 1 then sendID = 33 sendFlag = 1 elseif screen == 3 and control == 11 and value == 1 then -- 画面3,0x04地址 sendID = 36 sendFlag = 1 elseif screen == 3 and control == 12 and value == 1 then sendID = 37 sendFlag = 1 elseif screen == 3 and control == 13 and value == 1 then sendID = 38 sendFlag = 1 elseif screen == 3 and control == 14 and value == 1 then sendID = 39 sendFlag = 1 elseif screen == 3 and control == 15 and value == 1 then sendID = 40 sendFlag = 1 elseif screen == 3 and control == 16 and value == 1 then sendID = 41 sendFlag = 1 elseif screen == 3 and control == 17 and value == 1 then sendID = 42 sendFlag = 1 elseif screen == 3 and control == 18 and value == 1 then sendID = 43 sendFlag = 1 elseif screen == 3 and control == 19 and value == 1 then sendID = 44 sendFlag = 1 elseif screen == 3 and control == 20 and value == 1 then sendID = 45 sendFlag = 1 elseif screen == 4 and control == 11 and value == 1 then -- 画面4,0x05地址 sendID = 48 sendFlag = 1 elseif screen == 4 and control == 12 and value == 1 then sendID = 49 sendFlag = 1 elseif screen == 4 and control == 13 and value == 1 then sendID = 50 sendFlag = 1 elseif screen == 4 and control == 14 and value == 1 then sendID = 51 sendFlag = 1 elseif screen == 4 and control == 15 and value == 1 then sendID = 52 sendFlag = 1 elseif screen == 4 and control == 16 and value == 1 then sendID = 53 sendFlag = 1 elseif screen == 4 and control == 17 and value == 1 then sendID = 54 sendFlag = 1 elseif screen == 4 and control == 18 and value == 1 then sendID = 55 sendFlag = 1 elseif screen == 4 and control == 19 and value == 1 then sendID = 56 sendFlag = 1 elseif screen == 4 and control == 20 and value == 1 then sendID = 57 sendFlag = 1 elseif screen == 0 and control == 100 and value == 1 then -- 一键全开,控件ID统一为100 sendID = 100 sendFlag = 1 elseif screen == 1 and control == 100 and value == 1 then sendID = 200 sendFlag = 1 elseif screen == 2 and control == 100 and value == 1 then sendID = 300 sendFlag = 1 elseif screen == 3 and control == 100 and value == 1 then sendID = 400 sendFlag = 1 elseif screen == 4 and control == 100 and value == 1 then sendID = 500 sendFlag = 1 end end -- 系统每隔1秒钟会自动调用此回调函数。 function on_systick() end -- 当画面切换时,执行此回调函数,screen为切换后的画面ID。 function on_screen_change(screen) end -- LUA定时器中断函数,timer_id值范围为0-31。 -- 单独使用该函数不生效,该函数触发回调需要配合 start_timer(timer_id, timeout, countdown, repeatNum) ,来开启定时器,定时器溢出超时了,才会触发on_timer(timer_id)。 function on_timer(timer_id) if sendFlag == 1 then sendFlag = 0 -- 发送开锁的优先级更高 if sendID == 100 then uart_send_data(openAlllock[0]) -- 0x01地址全开 elseif sendID == 200 then uart_send_data(openAlllock[1]) -- 0x02地址全开 elseif sendID == 300 then uart_send_data(openAlllock[2]) -- 0x03地址全开 elseif sendID == 400 then uart_send_data(openAlllock[3]) -- 0x04地址全开 elseif sendID == 500 then uart_send_data(openAlllock[4]) -- 0x05地址全开 else uart_send_data(openlock[sendID]) -- 根据sendId获取对应的openlock数组开锁指令发送 end else -- 读取锁控板所有通道状态, 根据当前画面ID获取对应的查询所有锁状态的指令发送 local currentScreenId = get_current_screen() if currentScreenId == 0 then uart_send_data(readLockState[0]) elseif currentScreenId == 1 then uart_send_data(readLockState[1]) elseif currentScreenId == 2 then uart_send_data(readLockState[2]) elseif currentScreenId == 3 then uart_send_data(readLockState[3]) else uart_send_data(readLockState[4]) end end end