Files
2026-05-21 18:21:08 +03:00

138 lines
5.3 KiB
Python

# import serial
# import pyvjoy
# import re
# import time
# import sys
# # ========== НАСТРОЙКИ ПОРТА ==========
# COM_PORT = 'COM7' # Ваш порт
# BAUD_RATE = 115200
# VJOY_DEVICE_ID = 1
# # ========== ИНВЕРСИЯ ОСЕЙ ==========
# INVERT_STEER = True # True = инвертировать направление руля
# INVERT_THROTTLE = True # True = при нажатии газа крестик идёт ВВЕРХ (исправляет "опускается вниз")
# INVERT_BRAKE = True # True = при нажатии тормоза ось Z растёт от 0, а не стоит в максимуме
# # ========== КАЛИБРОВКА ОСЕЙ ==========
# STEER_RAW_MIN = 462
# STEER_RAW_CENTER = 512
# STEER_RAW_MAX = 562
# # Значения, полученные вами в режиме отладки
# THROTTLE_RAW_MIN = 490 # Педаль отпущена
# THROTTLE_RAW_MAX = 650 # Педаль нажата
# BRAKE_RAW_MIN = 300 # Педаль отпущена
# BRAKE_RAW_MAX = 110 # Педаль нажата
# # ========== ФУНКЦИИ ==========
# def map_value(x, in_min, in_max, out_min, out_max):
# if in_min == in_max:
# return (out_min + out_max) // 2
# val = (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min
# return int(max(min(val, out_max), out_min))
# def calibrate_steer(raw):
# if raw <= STEER_RAW_CENTER:
# return map_value(raw, STEER_RAW_MIN, STEER_RAW_CENTER, -32768, 0)
# else:
# return map_value(raw, STEER_RAW_CENTER, STEER_RAW_MAX, 0, 32767)
# def calibrate_axis(raw, raw_min, raw_max, invert):
# val = map_value(raw, raw_min, raw_max, 0, 32767)
# if invert:
# val = 32767 - val
# return val
# def open_serial_port(port, baudrate, timeout=2, retries=3):
# for attempt in range(retries):
# try:
# ser = 0#serial.Serial(port, baudrate, timeout=timeout)
# print(f"✅ Подключено к {port} на скорости {baudrate}")
# return ser
# except serial.SerialException as e:
# print(f"⚠️ Попытка {attempt+1}/{retries}: не удалось открыть порт {port}")
# print(f" Ошибка: {e}")
# time.sleep(2)
# print("❌ Не удалось открыть порт.")
# sys.exit(1)
# DEBUG_MODE = False # Включите для отладки, чтобы увидеть сырые значения
# def main():
# ser = open_serial_port(COM_PORT, BAUD_RATE)
# time.sleep(2)
# try:
# joy = pyvjoy.VJoyDevice(VJOY_DEVICE_ID)
# print("🎮 Виртуальный джойстик vJoy инициализирован")
# except Exception as e:
# print(f"❌ Ошибка vJoy: {e}")
# sys.exit(1)
# print("🚀 Скрипт запущен. Ожидание данных...")
# if DEBUG_MODE:
# print("🔧 РЕЖИМ ОТЛАДКИ\n")
# else:
# print(" Нажмите Ctrl+C для выхода.\n")
# try:
# while True:
# line_bytes = ser.readline()
# if not line_bytes:
# continue
# line = line_bytes.decode('utf-8', errors='ignore').strip()
# if not line:
# continue
# match = re.search(r'STEER:(\d+)\s+THROTTLE:(\d+)\s+BRAKE:(\d+)', line)
# if not match:
# if DEBUG_MODE:
# print(f"[DEBUG] {line}")
# continue
# steer_raw = int(match.group(1))
# throttle_raw = int(match.group(2))
# brake_raw = int(match.group(3))
# if DEBUG_MODE:
# print(f"RAW: STEER={steer_raw:4d} | THROTTLE={throttle_raw:4d} | BRAKE={brake_raw:4d}")
# continue
# steer = calibrate_steer(steer_raw)
# throttle = calibrate_axis(throttle_raw, THROTTLE_RAW_MIN, THROTTLE_RAW_MAX, INVERT_THROTTLE)
# brake = calibrate_axis(brake_raw, BRAKE_RAW_MIN, BRAKE_RAW_MAX, INVERT_BRAKE)
# # Преобразуем steer из -32768..32767 в 0..32767 для vJoy
# steer_vjoy = map_value(steer, -32768, 32767, 0, 32767)
# # ИНВЕРСИЯ РУЛЯ
# if INVERT_STEER:
# steer_vjoy = 32767 - steer_vjoy
# joy.set_axis(pyvjoy.HID_USAGE_X, steer_vjoy)
# joy.set_axis(pyvjoy.HID_USAGE_Y, throttle)
# joy.set_axis(pyvjoy.HID_USAGE_Z, brake)
# except KeyboardInterrupt:
# print("\n🛑 Остановка пользователем.")
# except Exception as e:
# print(f"\n❌ Ошибка: {e}")
# finally:
# if 'ser' in locals() and ser.is_open:
# ser.close()
# print("🔌 Порт закрыт.")
# if 'joy' in locals():
# joy.set_axis(pyvjoy.HID_USAGE_X, 16384) # центр
# joy.set_axis(pyvjoy.HID_USAGE_Y, 0) # газ отпущен
# joy.set_axis(pyvjoy.HID_USAGE_Z, 0) # тормоз отпущен
# print("🎮 Джойстик сброшен.")
# sys.exit(0)
# if __name__ == "__main__":
# main()
from utils import devices
print(devices.list_com_ports()[0].name)