Compare commits

...

2 Commits

Author SHA1 Message Date
Administrator
f4a5a0a584 配置提交 2025-11-13 11:28:08 +08:00
ray
520b8818cd 修复键鼠冲突 2025-11-12 00:48:26 +08:00
2 changed files with 112 additions and 53 deletions

View File

@@ -4,31 +4,31 @@
"name": "服务器",
"serial_port": "COM17",
"serial_baudrate": 9600,
"camera_index": 2,
"camera_width": 1920,
"camera_height": 1080,
"move_velocity": 470,
"active": false
},
{
"name": "2号机",
"serial_port": "COM14",
"serial_baudrate": 9600,
"camera_index": 0,
"camera_width": 1920,
"camera_height": 1080,
"move_velocity": 420,
"active": false
},
{
"name": "3号机",
"serial_port": "COM18",
"serial_baudrate": 9600,
"camera_index": 1,
"camera_width": 1920,
"camera_height": 1080,
"move_velocity": 470,
"active": true
},
{
"name": "2号机",
"serial_port": "COM14",
"serial_baudrate": 9600,
"camera_index": 2,
"camera_width": 1920,
"camera_height": 1080,
"move_velocity": 360,
"active": false
},
{
"name": "3号机",
"serial_port": "COM16",
"serial_baudrate": 9600,
"camera_index": 0,
"camera_width": 1920,
"camera_height": 1080,
"move_velocity": 360,
"active": false
}
],
"display": {

View File

@@ -133,25 +133,76 @@ def run_automation_for_group(group_index):
best_point = p
return best_point
def safe_keyboard_send(data, max_retries=3):
"""安全的键盘发送函数,带重试机制"""
nonlocal keyboard
for attempt in range(max_retries):
try:
keyboard.send_data(data)
return True
except (serial.serialutil.SerialException, PermissionError, OSError) as e:
if attempt < max_retries - 1:
print(f"⚠️ 键盘发送失败 (尝试 {attempt + 1}/{max_retries}): {e}")
time.sleep(0.1 * (attempt + 1)) # 递增延迟
# 尝试重新初始化串口
try:
if serial.ser and serial.ser.is_open:
serial.ser.close()
time.sleep(0.2)
init_mouse_keyboard(group)
# 重新创建keyboard对象
keyboard = ch9329Comm.keyboard.DataComm()
except Exception as init_e:
print(f"⚠️ 重新初始化串口失败: {init_e}")
else:
print(f"❌ 键盘发送失败,已重试 {max_retries} 次: {e}")
raise
return False
def safe_keyboard_release(max_retries=3):
"""安全的键盘释放函数,带重试机制"""
nonlocal keyboard
for attempt in range(max_retries):
try:
keyboard.release()
return True
except (serial.serialutil.SerialException, PermissionError, OSError) as e:
if attempt < max_retries - 1:
time.sleep(0.1 * (attempt + 1))
# 尝试重新初始化串口
try:
if serial.ser and serial.ser.is_open:
serial.ser.close()
time.sleep(0.2)
init_mouse_keyboard(group)
keyboard = ch9329Comm.keyboard.DataComm()
except Exception as init_e:
print(f"⚠️ 重新初始化串口失败: {init_e}")
else:
print(f"⚠️ 键盘释放失败: {e}")
# 释放失败不算致命错误,继续执行
return False
return False
def move_randomly(rw, k):
k = k % 4
suiji_t = float(random.randint(10, 13) / 10)
if k == 0:
keyboard.send_data("66")
time.sleep(suiji_t)
keyboard.release()
if safe_keyboard_send("66"):
time.sleep(suiji_t)
safe_keyboard_release()
elif k == 1:
keyboard.send_data("88")
time.sleep(suiji_t)
keyboard.release()
if safe_keyboard_send("88"):
time.sleep(suiji_t)
safe_keyboard_release()
elif k == 2:
keyboard.send_data("44")
time.sleep(suiji_t)
keyboard.release()
if safe_keyboard_send("44"):
time.sleep(suiji_t)
safe_keyboard_release()
elif k == 3:
keyboard.send_data("22")
time.sleep(suiji_t)
keyboard.release()
if safe_keyboard_send("22"):
time.sleep(suiji_t)
safe_keyboard_release()
return k + 1
def move_to(rw, mb):
@@ -159,22 +210,22 @@ def run_automation_for_group(group_index):
nonlocal v
v = group['move_velocity']
if rw[0] >= mb[0]:
keyboard.send_data("44")
time.sleep(float(abs(rw[0] - mb[0]) / v))
keyboard.release()
if safe_keyboard_send("44"):
time.sleep(float(abs(rw[0] - mb[0]) / v))
safe_keyboard_release()
else:
keyboard.send_data("66")
time.sleep(float(abs(rw[0] - mb[0]) / v))
keyboard.release()
if safe_keyboard_send("66"):
time.sleep(float(abs(rw[0] - mb[0]) / v))
safe_keyboard_release()
if rw[1] >= mb[1]:
keyboard.send_data("88")
time.sleep(float(abs(rw[1] - mb[1]) / v))
keyboard.release()
if safe_keyboard_send("88"):
time.sleep(float(abs(rw[1] - mb[1]) / v))
safe_keyboard_release()
else:
keyboard.send_data("22")
time.sleep(float(abs(rw[1] - mb[1]) / v))
keyboard.release()
if safe_keyboard_send("22"):
time.sleep(float(abs(rw[1] - mb[1]) / v))
safe_keyboard_release()
# 主循环
print(f"🔄 配置组 {group['name']} 开始自动化循环...")
@@ -225,9 +276,9 @@ def run_automation_for_group(group_index):
elif detections['npc4'] is not None:
if sq(detections['npc4'], rw) < 50:
print(f"[{group['name']}] 离npc4很近 直接进入")
keyboard.send_data("DD")
time.sleep(0.15)
keyboard.release()
if safe_keyboard_send("DD"):
time.sleep(0.15)
safe_keyboard_release()
time.sleep(1)
im_opencv = get_image.get_frame()
if im_opencv and shizi.daoying(im_opencv[0]):
@@ -271,9 +322,9 @@ def run_automation_for_group(group_index):
if len(detections['daojv']) != 0:
move_to(rw, process_points(detections['daojv']))
for i in range(3 + len(detections['daojv'])):
keyboard.send_data("AA")
time.sleep(0.15)
keyboard.release()
if safe_keyboard_send("AA"):
time.sleep(0.15)
safe_keyboard_release()
continue
if shizi.tuichu(im_opencv[0]) and detections['next'] is None and len(detections['daojv']) == 0 and len(detections['gw']) == 0 and boss_pd:
print(f"[{group['name']}] 识别到可以退出挑战!!!!!!!!!!!!!!!!!!")
@@ -328,9 +379,9 @@ def run_automation_for_group(group_index):
panduan = True
move_to(rw, detections['next'])
for i in range(2):
keyboard.send_data("DD")
time.sleep(0.15)
keyboard.release()
if safe_keyboard_send("DD"):
time.sleep(0.15)
safe_keyboard_release()
continue
else:
k = move_randomly(rw, k)
@@ -347,6 +398,14 @@ def run_automation_for_group(group_index):
import traceback
traceback.print_exc()
time.sleep(1)
# 清理资源
try:
if serial.ser and serial.ser.is_open:
serial.ser.close()
print(f"✅ 配置组 {group['name']} 串口已关闭")
except Exception as e:
print(f"⚠️ 关闭串口时出错: {e}")
if __name__ == "__main__":
if len(sys.argv) > 1: