haikang.lua 8.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298
  1. --- 模块功能 测报逻辑控制
  2. -- @module
  3. -- @author lcg
  4. -- @license MIT
  5. -- @copyright yf
  6. -- @release 2019.07.18
  7. require 'ril'
  8. require "misc"
  9. -- require "haikang"
  10. -- require "audio"
  11. module(..., package.seeall)
  12. -- 0--关闭
  13. -- 1--1.8V
  14. -- 2--1.9V
  15. -- 3--2.0V
  16. -- 4--2.6V
  17. -- 5--2.8V
  18. -- 6--3.0V
  19. -- 7--3.3V
  20. -- 电压域与控制的GPIO的对应关系如下:
  21. -- pmd.LDO_VMMC:GPIO8、GPIO9、GPIO10、GPIO11、GPIO12、GPIO13
  22. -- pmd.LDO_VLCD:GPIO14、GPIO15、GPIO16、GPIO17、GPIO18
  23. -- pmd.LDO_VCAM:GPIO19、GPIO20、GPIO21、GPIO22、GPIO23、GPIO24
  24. pmd.ldoset(7,pmd.LDO_VMMC)
  25. pmd.ldoset(7,pmd.LDO_VLCD)
  26. pmd.ldoset(7,pmd.LDO_VCAM)
  27. motor_en = pins.setup(pio.P0_8,0)
  28. -- dir:far or near:以载玻片为参考点;载玻片在步进电机端;
  29. -- 注:motor_dir(1) -- 1:near; 0:far
  30. motor_dir = pins.setup(pio.P0_11,0)
  31. motor_mv = pins.setup(pio.P0_12,0)
  32. -- 电机上下限位;
  33. limit_up = pins.setup(pio.P0_2)
  34. limit_down = pins.setup(pio.P0_3)
  35. light_led = pins.setup(pio.P0_31,0)
  36. hk_alarm_in = pins.setup(pio.P0_30,0)
  37. -- 蓝色led:做拍照指示:
  38. led = pins.setup(pio.P0_10,0)
  39. -- 海康相机拍照:
  40. function hk_takephoto()
  41. log.warn("hk_takephoto is running...")
  42. hk_alarm_in(1)
  43. led(1)
  44. sys.wait(1100)
  45. hk_alarm_in(0)
  46. led(0)
  47. -- sys.wait(1000)
  48. -- hmi.write("sysTest.switchPic.val=0")
  49. end
  50. -- 步进电机方向运行标志位:
  51. up_step_flag = 0
  52. down_step_flag = 0
  53. -- 步进电机,停止命令标志位:
  54. stop_step = 0
  55. -- 步进电机复位,到最顶端:
  56. function motor_reset()
  57. log.warn("~~~~~~~~~~motor_reset")
  58. -- 电机向上运行;直到达到上限位;
  59. motor_en(1)
  60. motor_dir(0)
  61. if up_step_flag == 1 then
  62. log.error("warn:step motor is stepping to up!!!")
  63. return
  64. end
  65. if down_step_flag == 1 then
  66. log.error("error:stepping to down will stop!!!")
  67. stop_step = 1
  68. end
  69. up_step_flag = 1
  70. while limit_up() == 1 do
  71. -- log.warn("limit_up",limit_up())
  72. motor_mv(1)
  73. sys.wait(1)
  74. motor_mv(0)
  75. sys.wait(1)
  76. if stop_step == 1 then
  77. stop_step = 0
  78. log.error("attention:step up breaking!!!")
  79. -- hmi.write("sysTest.switchUp.val=0")
  80. break
  81. end
  82. end
  83. up_step_flag = 0
  84. log.error("up_step_flag = 0!!!")
  85. -- hmi.write("sysTest.switchUp.val=0")
  86. -- 后期评估是否要脱机;
  87. motor_en(0)
  88. end
  89. -- 步进电机向下运动到下限位:
  90. function motor_down()
  91. log.warn("~~~~~~~~~~motor_down")
  92. -- 电机向下运行;直到达到上限位;
  93. motor_en(1)
  94. motor_dir(1)
  95. if down_step_flag == 1 then
  96. log.error("warn:step motor is stepping to down!!!")
  97. return
  98. end
  99. if up_step_flag == 1 then
  100. log.error("error:stepping to up will stop!!!")
  101. stop_step = 1
  102. end
  103. down_step_flag = 1
  104. while limit_down() == 1 do
  105. -- log.warn("limit_down",limit_down())
  106. motor_mv(1)
  107. sys.wait(1)
  108. motor_mv(0)
  109. sys.wait(1)
  110. if stop_step == 1 then
  111. stop_step = 0
  112. log.error("attention:step down breaking!!!")
  113. -- hmi.write("sysTest.switchDown.val=0")
  114. break
  115. end
  116. end
  117. down_step_flag = 0
  118. log.error("down_step_flag = 0!!!")
  119. -- hmi.write("sysTest.switchDown.val=0")
  120. -- 后期评估是否要脱机;
  121. motor_en(0)
  122. end
  123. -- 步进电机对焦拍照:
  124. -- 流程:先向下运行到下限位;然后倒序向上逐渐拍照;
  125. photo_num,step = 0, 0
  126. photo_flag = 0
  127. function autotakepic()
  128. -- photo_flag = 0
  129. log.warn("testAutopic is running!!!")
  130. light_led(1)--打开补光灯
  131. -- 注意,如果此时电机已经在最下端,则需要延时一下补光灯,来让相机对焦;
  132. sys.wait(5000)
  133. -- 电机向下运动:
  134. motor_down()
  135. log.warn("motor_down is ok!!!")
  136. hk_takephoto()
  137. -- 到最低端,3s后开始向上拍照;
  138. sys.wait(5000)
  139. motor_en(1)
  140. motor_dir(0)
  141. haikang.step = 0
  142. haikang.photo_num = 0
  143. while limit_up() == 1 do
  144. step = step + 1
  145. motor_mv(1)
  146. sys.wait(1)
  147. motor_mv(0)
  148. sys.wait(1)
  149. -- 拍照的脉冲间隔;
  150. -- if step >= 1000 then
  151. -- photo_num = photo_num + 1
  152. -- sys.wait(1500)
  153. -- log.warn("=========================take pic!!!")
  154. -- hk_takephoto()
  155. -- step = 0
  156. -- end
  157. end
  158. step = 0
  159. hk_takephoto()
  160. log.error("photo_num is:",photo_num)
  161. log.error("step num is:",step)
  162. light_led(0)--关闭补光灯
  163. -- photo_flag = 1
  164. end
  165. function autotakepic2()
  166. local photo_step
  167. photo_flag = 0
  168. log.warn("testAutopic2 is running!!!")
  169. light_led(1)--打开补光灯
  170. -- 注意,如果此时电机已经在最下端,则需要延时一下补光灯,来让相机对焦;
  171. sys.wait(5000)
  172. -- 电机向下运动:
  173. motor_down()
  174. log.warn("motor_down is ok!!!")
  175. hk_takephoto()
  176. -- 到最低端,3s后开始向上拍照;
  177. sys.wait(5000)
  178. motor_en(1)
  179. motor_dir(0)
  180. haikang.step = 0
  181. haikang.photo_num = 0
  182. photo_step = nvm.get("photo_step") or 50
  183. log.warn("+++++++++++++++++++++++++++photo_step:",photo_step)
  184. while limit_up() == 1 do
  185. step = step + 1
  186. motor_mv(1)
  187. sys.wait(1)
  188. motor_mv(0)
  189. sys.wait(1)
  190. -- 拍照的脉冲间隔;
  191. -- if step >= 5 then
  192. if step%photo_step == 0 then
  193. -- sys.wait(1000)
  194. photo_num = photo_num + 1
  195. sys.wait(2000)
  196. log.warn("=========================take pic!!!")
  197. hk_takephoto()
  198. end
  199. end
  200. log.error("photo_num is:",photo_num)
  201. log.error("step num is:",step)
  202. light_led(0)--关闭补光灯
  203. sys.wait(10000)
  204. photo_flag = 1
  205. haikang.http_chose_photo_task()
  206. end
  207. function test_takephoto()
  208. log.warn("test_takephoto is running...")
  209. audio.play('/ldata/takephoto.mp3')
  210. light_led(1)--打开补光灯
  211. sys.wait(15*1000)
  212. hk_takephoto()
  213. light_led(0)--关闭补光灯
  214. sys.wait(10000)
  215. -- photo_flag = 1
  216. haikang.http_chose_photo_task()
  217. end
  218. function http_chose_photo()
  219. -- http触发计算清晰度;
  220. -- local url = "http://yfzhwlw.com/test"
  221. -- local url = "http://yfznscd.com/bzy_mqtt_photo"
  222. -- local url = "http://yfznscd.com/spore_count"
  223. local url = "http://120.27.222.26/bzy_mqtt_photo"
  224. -- local url = "http://39.104.94.153/bzy_mqtt_photo"
  225. local param = {
  226. imei="",
  227. step = 0,
  228. photo_num = 0
  229. }
  230. while not socket.isReady() do sys.wait(2000) end
  231. param.imei = misc.getimei()-- 唯一ID
  232. param.step = haikang.step
  233. param.photo_num = haikang.photo_num
  234. log.error("#################### type param is:",type(param))
  235. local code, head, body = http.request("POST", url, 10000,nil,param)
  236. -- local code, head, body = http.request("POST", url, 60000,nil,param)
  237. log.error("#################### http code is:",code)
  238. log.error("#################### http body is:",body)
  239. return code
  240. end
  241. function http_chose_photo_task()
  242. sys.taskInit(function ()
  243. -- 重试次数
  244. local RETRY = 3
  245. local cnt = 1
  246. for cnt = 1, RETRY do
  247. local res = haikang.http_chose_photo()
  248. log.error("---------http_chose_photo:",type(res),res)
  249. if res == "200" then
  250. log.warn("haikang.http_chose_photo res 200!")
  251. audio.play('/ldata/alarm.mp3')
  252. -- haikang.step = 0
  253. -- haikang.photo_num = 0
  254. break
  255. else
  256. log.error("haikang.http_chose_photo res:",res)
  257. sys.wait(3000)
  258. end
  259. end
  260. -- haikang.step = 0
  261. -- haikang.photo_num = 0
  262. end)
  263. end