| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298 |
- --- 模块功能 测报逻辑控制
- -- @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
|