OtherSet.py 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242
  1. import threading
  2. import settings
  3. from collections import defaultdict
  4. import time
  5. from .McuDebug import McuDebug
  6. class OtherSet():
  7. def __init__(self, mcu):
  8. super().__init__()
  9. self.mcu = mcu
  10. self.get_value_flag = False
  11. self.last_value = defaultdict(float)
  12. is_debug = True if settings.IS_DEBUG == "true" else False
  13. self.mcu_debug = McuDebug(mcu, is_debug=is_debug, is_deviation=False)
  14. # self.ampy_run = None
  15. # 自动获取数据
  16. # QTimer.singleShot(500, self.get_data_from_mcu)
  17. def get_data_from_mcu(self, *args):
  18. self.get()
  19. def init(self):
  20. self.ui.is_auto_send_base_info.setMinimum(0)
  21. self.ui.is_auto_send_base_info.setMaximum(10000)
  22. self.ui.is_move_retry.setMinimum(0)
  23. self.ui.is_move_retry.setMaximum(10000)
  24. self.ui.is_data_response.setMinimum(0)
  25. self.ui.is_data_response.setMaximum(10000)
  26. self.ui.low_speed.setMinimum(0)
  27. self.ui.low_speed.setMaximum(10000)
  28. self.ui.is_test.setMinimum(0)
  29. self.ui.is_test.setMaximum(10000)
  30. self.ui.to_init_mode.setMinimum(0)
  31. self.ui.to_init_mode.setMaximum(10000)
  32. self.ui.turntable_move_to_init_mode.setMinimum(0)
  33. self.ui.turntable_move_to_init_mode.setMaximum(10000)
  34. self.ui.led_count.setMinimum(0)
  35. self.ui.led_count.setMaximum(10000)
  36. self.ui.turntable_steering_angle_ratio.setMinimum(0)
  37. self.ui.turntable_steering_angle_ratio.setMaximum(10000)
  38. self.ui.is_manual_check.setMinimum(0)
  39. self.ui.is_manual_check.setMaximum(10000)
  40. self.ui.camera_steering_angle_ratio.setMinimum(0)
  41. self.ui.camera_steering_angle_ratio.setMaximum(100000)
  42. self.ui.is_auto_motor_to_disable.setMinimum(0)
  43. self.ui.is_auto_motor_to_disable.setMaximum(10000)
  44. self.ui.diff_dir.setMinimum(0)
  45. self.ui.diff_dir.setMaximum(10000)
  46. self.ui.is_auto_send_pos_info.setMinimum(0)
  47. self.ui.is_auto_send_pos_info.setMaximum(10000)
  48. self.ui.is_dog.setMinimum(0)
  49. self.ui.is_dog.setMaximum(10000)
  50. self.ui.has_been_set_motor_config.setMinimum(0)
  51. self.ui.has_been_set_motor_config.setMaximum(10000)
  52. # 相机舵机
  53. self.ui.camera_degree.setSingleStep(0.1)
  54. self.ui.camera_degree.setMinimum(-90)
  55. self.ui.camera_degree.setMaximum(90)
  56. self.ui.camera_degree.valueChanged.connect(
  57. lambda x: self.change_value(x, "相机舵机")
  58. )
  59. self.ui.set.clicked.connect(self.set)
  60. self.ui.get.clicked.connect(self.get)
  61. self.ui.init_mcu.clicked.connect(self.init_mcu)
  62. self.ui.pushButton.clicked.connect(self.check_and_upload)
  63. self.ui.pushButton_2.clicked.connect(self.stop_mcu)
  64. # 设定相机舵机偏移量
  65. self.ui.set_camera_degree.clicked.connect(
  66. lambda *args: self.set_deviation("相机舵机")
  67. )
  68. def check_and_upload(self, *args):
  69. try:
  70. ampy_class = settings.PLUGINS_DICT["ampy_scribe"]["AMPY插件"]
  71. except:
  72. return
  73. self.s = threading.Thread(
  74. target=ampy_class(top_windows=self.windows, windows=self).run, args=()
  75. )
  76. self.s.start()
  77. def stop_mcu(self, *args):
  78. self.mcu.stop_mcu()
  79. def send_log(self, text):
  80. if self.mcu:
  81. self.mcu.send_log(text)
  82. # 写入文件测试
  83. def init_mcu(self, *args):
  84. self.mcu.to_init_device_origin_point(device_name="mcu", is_force=True)
  85. def change_value(self, value, name):
  86. value = round(value, 2)
  87. if self.last_value[name] - 1 <= value <= self.last_value[name] + 1:
  88. if name == "相机电机":
  89. self.mcu_debug.camera_high_motor(value=value)
  90. if name == "相机舵机":
  91. self.mcu_debug.camera_steering(value=value)
  92. if name == "转盘舵机":
  93. self.mcu_debug.turntable_steering(value=value)
  94. if name == "转盘前后电机":
  95. self.mcu_debug.turntable_position_motor(value=value)
  96. if name == "翻板舵机中位":
  97. self.mcu_debug.overturn_steering(value=value)
  98. if name == "翻板舵机高位":
  99. self.mcu_debug.overturn_steering(value=value)
  100. if name == "翻板舵机上升速度":
  101. pass
  102. print(value, name)
  103. self.last_value[name] = value
  104. def set_deviation(self, name, camera_steering_deviation):
  105. if name == "相机舵机":
  106. # 设定相机舵机偏移量
  107. # camera_steering_deviation = self.ui.camera_degree.value()
  108. device_name = "camera_steering"
  109. self.mcu.set_deviation(
  110. device_name=device_name, _type=0, deviation=camera_steering_deviation
  111. )
  112. # self.ui.camera_degree.setValue(0.0)
  113. def setMcuInfo(self, data):
  114. self.mcu.msg_type = "set_other_mcu_info"
  115. if not self.get_value_flag:
  116. self.mcu.sendSocketMessage(
  117. code=1, msg="请先获取其他mcu配置信息", device_status=0, data=None
  118. )
  119. self.mcu.msg_type = "mcu"
  120. return
  121. # is_auto_send_base_info = data.get("is_auto_send_base_info")
  122. # is_move_retry = data.get("is_move_retry")
  123. # is_data_response = data.get("is_data_response")
  124. # low_speed = data.get("low_speed")
  125. # is_test = data.get("is_test")
  126. # to_init_mode = data.get("to_init_mode")
  127. # turntable_move_to_init_mode = data.get("turntable_move_to_init_mode")
  128. # led_count = data.get("led_count")
  129. # turntable_steering_angle_ratio = data.get("turntable_steering_angle_ratio")
  130. # is_manual_check = data.get("is_manual_check")
  131. # camera_steering_angle_ratio = data.get("camera_steering_angle_ratio")
  132. # is_auto_motor_to_disable = data.get("is_auto_motor_to_disable")
  133. # diff_dir = data.get("diff_dir")
  134. # is_auto_send_pos_info = data.get("is_auto_send_pos_info")
  135. # is_dog = data.get("is_dog")
  136. # has_been_set_motor_config = data.get("has_been_set_motor_config")
  137. # data = {
  138. # "is_auto_send_base_info": is_auto_send_base_info,
  139. # "is_move_retry": is_move_retry,
  140. # "is_data_response": is_data_response,
  141. # "low_speed": low_speed,
  142. # "is_test": is_test,
  143. # "to_init_mode": to_init_mode,
  144. # "turntable_move_to_init_mode": turntable_move_to_init_mode,
  145. # "led_count": led_count,
  146. # "turntable_steering_angle_ratio": turntable_steering_angle_ratio,
  147. # "is_manual_check": is_manual_check,
  148. # "camera_steering_angle_ratio": camera_steering_angle_ratio,
  149. # "is_auto_motor_to_disable": is_auto_motor_to_disable,
  150. # "diff_dir": diff_dir,
  151. # "is_auto_send_pos_info": is_auto_send_pos_info,
  152. # "is_dog": is_dog,
  153. # "has_been_set_motor_config": has_been_set_motor_config,
  154. # }
  155. self.mcu.set_to_mcu_other_info(data)
  156. self.mcu.sendSocketMessage(code=0, msg="已完成设置", device_status=2, data=None)
  157. print("已完成设置")
  158. self.mcu.msg_type = "mcu"
  159. def getMcuInfo(self, *args):
  160. self.mcu.get_other_info()
  161. _s = time.time()
  162. last_num = self.mcu.last_mcu_other_info_data["num"]
  163. print("_s", _s)
  164. while 1:
  165. time.sleep(0.1)
  166. if time.time() - _s > 2:
  167. return False
  168. print(
  169. "last_mcu_other_info_data num",
  170. self.mcu.last_mcu_other_info_data["num"],
  171. )
  172. if last_num < self.mcu.last_mcu_other_info_data["num"]:
  173. data = self.mcu.last_mcu_other_info_data["data"]
  174. print("获取中断", data)
  175. break
  176. # if self.mcu.last_mcu_other_info_data["time"] - _s > 0:
  177. # data = self.mcu.last_mcu_other_info_data["data"]
  178. # break
  179. print("获取成功")
  180. is_auto_send_base_info = data["is_auto_send_base_info"]
  181. is_move_retry = data["is_move_retry"]
  182. is_data_response = data["is_data_response"]
  183. low_speed = data["low_speed"]
  184. is_test = data["is_test"]
  185. to_init_mode = data["to_init_mode"]
  186. turntable_move_to_init_mode = data["turntable_move_to_init_mode"]
  187. led_count = data["led_count"]
  188. turntable_steering_angle_ratio = data["turntable_steering_angle_ratio"]
  189. is_manual_check = data["is_manual_check"]
  190. camera_steering_angle_ratio = data["camera_steering_angle_ratio"]
  191. diff_dir = data["diff_dir"]
  192. is_auto_send_pos_info = data["is_auto_send_pos_info"]
  193. is_dog = data["is_dog"]
  194. has_been_set_motor_config = data["has_been_set_motor_config"]
  195. is_auto_motor_to_disable = data["is_auto_motor_to_disable"]
  196. if is_auto_motor_to_disable is None:
  197. is_auto_motor_to_disable = False
  198. dataSend = {
  199. "is_auto_send_base_info": is_auto_send_base_info,
  200. "is_move_retry": is_move_retry,
  201. "is_data_response": is_data_response,
  202. "low_speed": low_speed,
  203. "is_test": is_test,
  204. "to_init_mode": to_init_mode,
  205. "turntable_move_to_init_mode": turntable_move_to_init_mode,
  206. "led_count": led_count,
  207. "turntable_steering_angle_ratio": turntable_steering_angle_ratio,
  208. "is_manual_check": is_manual_check,
  209. "camera_steering_angle_ratio": camera_steering_angle_ratio,
  210. "is_auto_motor_to_disable": is_auto_motor_to_disable,
  211. "diff_dir": diff_dir,
  212. "is_auto_send_pos_info": is_auto_send_pos_info,
  213. "is_dog": is_dog,
  214. "has_been_set_motor_config": has_been_set_motor_config,
  215. }
  216. self.get_value_flag = True
  217. self.mcu.msg_type = "get_other_mcu_info"
  218. self.mcu.sendSocketMessage(
  219. code=0, msg="获取mcu其他配置信息", device_status=2, data=dataSend
  220. )
  221. self.mcu.msg_type = "mcu"
  222. def __del__(self):
  223. self.state = 2
  224. self.t = None