一、背景
采用STM32作为核心控制器,分别控制串口屏和温度控制器。
二、技术方案
温度控制器工作时候需要参数设置和状态读取,两种通讯的模式如图所示:
对于参数设置,由用户在串口屏上设置参数,然后串口屏发送指令给STM32,STM32解析指令,然后发送控制命令给温控。温控接受指令,进行状态的修改并将返回值发送给STM32,STM32再将返回值进行解析,发送给串口屏。
主要实现如下:
对于状态读取,有STM32直接发送指令给温控,然后将温控返回的命令解析成串口屏可以识别的指令发送给串口屏。
串口屏的难点是通过按钮实现增减和曲线的绘制。
串口屏的增减控制部分程序如下:
function on_control_notify(screen,control,value)
if screen == 0 and control == 37 and value == 1 then
local v = string.format("%5.2f",get_value(0,5) + 0.01)
set_text(0,5, v)
sss = string.format("%5.2f",get_value(0,5))
my_uartsend_lampstate_notify(0xB1,0x05,sss)
end
end
function my_uartsend_lampstate_notify(xth_lamp,state,sss)
local lamp_state_notify = {}
lamp_state_notify[0] = 0xEE
lamp_state_notify[1] = xth_lamp
lamp_state_notify[2] = 0x11
lamp_state_notify[3] = 0x00
lamp_state_notify[4] = 0x00
lamp_state_notify[5] = 0x00
lamp_state_notify[6] = state
lamp_state_notify[7] = 0x11
lamp_state_notify[8] = 0x30+string.sub(sss,1,1)
lamp_state_notify[9] = 0x30+string.sub(sss,2,2)
lamp_state_notify[10] = 0x2E
lamp_state_notify[11] = 0x30+string.sub(sss,4,4)
lamp_state_notify[12] = 0x30+string.sub(sss,5,5)
lamp_state_notify[13] = 0x00
lamp_state_notify[14] = 0xFF
lamp_state_notify[15] = 0xFC
lamp_state_notify[16] = 0xFF
lamp_state_notify[17] = 0xFF
uart_send_data(lamp_state_notify)
end
串口屏的曲线绘制通过定时器每隔1s的时间往曲线中增加一个数据,部分程序如下:
function on_control_notify(screen,control,value)
if screen == 0 and control == 2 and value == 1 then
start_timer(1,1000,0,0)
end
end
function on_timer(timer_id)
if timer_id == 1 then
local v = string.format("%5.2f",get_value(1,5) + 0.01)
local Curve_value = math.random(0,1)
local Curve_value1 = math.random(1,2)
set_text(1,5,v + Curve_value)
set_text(1,6,v + Curve_value1)
set_history_graph_value(1,4,v + Curve_value,v + Curve_value1)
end
end
效果如下图: