--- 模块功能 测报逻辑控制 -- @module -- @author lcg -- @license MIT -- @copyright yf -- @release 2019.07.18 require 'ril' require "misc" -- require "haikang" -- require "audio" module(..., package.seeall) -- 0--关闭 -- 1--1.8V -- 2--1.9V -- 3--2.0V -- 4--2.6V -- 5--2.8V -- 6--3.0V -- 7--3.3V -- 电压域与控制的GPIO的对应关系如下: -- pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13 -- pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18 -- pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24 pmd.ldoset(7,pmd.LDO_VMMC) pmd.ldoset(7,pmd.LDO_VLCD) pmd.ldoset(7,pmd.LDO_VCAM) motor_en = pins.setup(pio.P0_8,0) -- dir:far or near:以载玻片为参考点;载玻片在步进电机端; -- 注:motor_dir(1) -- 1:near; 0:far motor_dir = pins.setup(pio.P0_11,0) motor_mv = pins.setup(pio.P0_12,0) -- 电机上下限位; limit_up = pins.setup(pio.P0_2) limit_down = pins.setup(pio.P0_3) light_led = pins.setup(pio.P0_31,0) hk_alarm_in = pins.setup(pio.P0_30,0) -- 蓝色led:做拍照指示: led = pins.setup(pio.P0_10,0) -- 海康相机拍照: function hk_takephoto() log.warn("hk_takephoto is running...") hk_alarm_in(1) led(1) sys.wait(1100) hk_alarm_in(0) led(0) -- sys.wait(1000) -- hmi.write("sysTest.switchPic.val=0") end -- 步进电机方向运行标志位: up_step_flag = 0 down_step_flag = 0 -- 步进电机,停止命令标志位: stop_step = 0 -- 步进电机复位,到最顶端: function motor_reset() log.warn("~~~~~~~~~~motor_reset") -- 电机向上运行;直到达到上限位; motor_en(1) motor_dir(0) if up_step_flag == 1 then log.error("warn:step motor is stepping to up!!!") return end if down_step_flag == 1 then log.error("error:stepping to down will stop!!!") stop_step = 1 end up_step_flag = 1 while limit_up() == 1 do -- log.warn("limit_up",limit_up()) motor_mv(1) sys.wait(1) motor_mv(0) sys.wait(1) if stop_step == 1 then stop_step = 0 log.error("attention:step up breaking!!!") -- hmi.write("sysTest.switchUp.val=0") break end end up_step_flag = 0 log.error("up_step_flag = 0!!!") -- hmi.write("sysTest.switchUp.val=0") -- 后期评估是否要脱机; motor_en(0) end -- 步进电机向下运动到下限位: function motor_down() log.warn("~~~~~~~~~~motor_down") -- 电机向下运行;直到达到上限位; motor_en(1) motor_dir(1) if down_step_flag == 1 then log.error("warn:step motor is stepping to down!!!") return end if up_step_flag == 1 then log.error("error:stepping to up will stop!!!") stop_step = 1 end down_step_flag = 1 while limit_down() == 1 do -- log.warn("limit_down",limit_down()) motor_mv(1) sys.wait(1) motor_mv(0) sys.wait(1) if stop_step == 1 then stop_step = 0 log.error("attention:step down breaking!!!") -- hmi.write("sysTest.switchDown.val=0") break end end down_step_flag = 0 log.error("down_step_flag = 0!!!") -- hmi.write("sysTest.switchDown.val=0") -- 后期评估是否要脱机; motor_en(0) end -- 步进电机对焦拍照: -- 流程:先向下运行到下限位;然后倒序向上逐渐拍照; photo_num,step = 0, 0 photo_flag = 0 function autotakepic() -- photo_flag = 0 log.warn("testAutopic is running!!!") light_led(1)--打开补光灯 -- 注意,如果此时电机已经在最下端,则需要延时一下补光灯,来让相机对焦; sys.wait(5000) -- 电机向下运动: motor_down() log.warn("motor_down is ok!!!") hk_takephoto() -- 到最低端,3s后开始向上拍照; sys.wait(5000) motor_en(1) motor_dir(0) haikang.step = 0 haikang.photo_num = 0 while limit_up() == 1 do step = step + 1 motor_mv(1) sys.wait(1) motor_mv(0) sys.wait(1) -- 拍照的脉冲间隔; -- if step >= 1000 then -- photo_num = photo_num + 1 -- sys.wait(1500) -- log.warn("=========================take pic!!!") -- hk_takephoto() -- step = 0 -- end end step = 0 hk_takephoto() log.error("photo_num is:",photo_num) log.error("step num is:",step) light_led(0)--关闭补光灯 -- photo_flag = 1 end function autotakepic2() local photo_step photo_flag = 0 log.warn("testAutopic2 is running!!!") light_led(1)--打开补光灯 -- 注意,如果此时电机已经在最下端,则需要延时一下补光灯,来让相机对焦; sys.wait(5000) -- 电机向下运动: motor_down() log.warn("motor_down is ok!!!") hk_takephoto() -- 到最低端,3s后开始向上拍照; sys.wait(5000) motor_en(1) motor_dir(0) haikang.step = 0 haikang.photo_num = 0 photo_step = nvm.get("photo_step") or 50 log.warn("+++++++++++++++++++++++++++photo_step:",photo_step) while limit_up() == 1 do step = step + 1 motor_mv(1) sys.wait(1) motor_mv(0) sys.wait(1) -- 拍照的脉冲间隔; -- if step >= 5 then if step%photo_step == 0 then -- sys.wait(1000) photo_num = photo_num + 1 sys.wait(2000) log.warn("=========================take pic!!!") hk_takephoto() end end log.error("photo_num is:",photo_num) log.error("step num is:",step) light_led(0)--关闭补光灯 sys.wait(10000) photo_flag = 1 haikang.http_chose_photo_task() end function test_takephoto() log.warn("test_takephoto is running...") audio.play('/ldata/takephoto.mp3') light_led(1)--打开补光灯 sys.wait(15*1000) hk_takephoto() light_led(0)--关闭补光灯 sys.wait(10000) -- photo_flag = 1 haikang.http_chose_photo_task() end function http_chose_photo() -- http触发计算清晰度; -- local url = "http://yfzhwlw.com/test" -- local url = "http://yfznscd.com/bzy_mqtt_photo" -- local url = "http://yfznscd.com/spore_count" local url = "http://120.27.222.26/bzy_mqtt_photo" -- local url = "http://39.104.94.153/bzy_mqtt_photo" local param = { imei="", step = 0, photo_num = 0 } while not socket.isReady() do sys.wait(2000) end param.imei = misc.getimei()-- 唯一ID param.step = haikang.step param.photo_num = haikang.photo_num log.error("#################### type param is:",type(param)) local code, head, body = http.request("POST", url, 10000,nil,param) -- local code, head, body = http.request("POST", url, 60000,nil,param) log.error("#################### http code is:",code) log.error("#################### http body is:",body) return code end function http_chose_photo_task() sys.taskInit(function () -- 重试次数 local RETRY = 3 local cnt = 1 for cnt = 1, RETRY do local res = haikang.http_chose_photo() log.error("---------http_chose_photo:",type(res),res) if res == "200" then log.warn("haikang.http_chose_photo res 200!") audio.play('/ldata/alarm.mp3') -- haikang.step = 0 -- haikang.photo_num = 0 break else log.error("haikang.http_chose_photo res:",res) sys.wait(3000) end end -- haikang.step = 0 -- haikang.photo_num = 0 end) end