Проблемы при передача данных по COM порту

Всем привет! Решил написать программку которая передаёт координаты мышки через com порт на внешнею плату, к которой в свою очередь подключена мышка. Всё бы ничего, НО мой основной код передаёт те же данные что и проверочный, однако в случае основного кода, курсор мышки по итогу оказывается в положении нуля, то есть в левом нижнем углу экрана, в случае проверочного кода, курсор перемещается в соответствии с переданными ему на плату и потом в мыш координатами. И я в замешательстве, потому что оба кода предают одни и те же правильные данные. Но в случае с проверочным кодом всё хорошо а в случае с моим нет.

Мой код:

global Cy2
global Cx2

def com_write ():
    ser = serial.Serial("COM7", 9600)
    while True:
        if keyboard.is_pressed('shift'):

            continue

        coordinates = f"{int(Cx2)},{int(Cy2)}\n"
        ser.write(coordinates.encode())
        ser.close()
        break

def process_screen():
    global Cy2
    global Cx2

    with mss.mss() as sct:
        monitor = {"top": 430, "left": 630, "width": 660, "height": 430}

        while True:
            last_time = time.time()

            img = np.array(sct.grab(monitor))[:, :, :3]
            predict = model(img, conf=0.50)

            for r in predict:
                boxes = r.boxes
                for box in boxes:
                    x1, y1, width, height = box.xyxy[0]

                    x1, y1, width, height = int(x1), int(y1), int(width), int(height)
                    Cx = (x1 + width) / 2
                    Cy = (y1 + height) / 2
                    Cy2 = Cy - -400
                    Cx2 = Cx - -630

                    if Cx2 != 0 and Cy2 != 0:
                        com_write()

                    break


            print(f"fps: {1 / (time.time() - last_time)}")

process_screen()  

Проверочный код:

def com_write():
    while True:
        if keyboard.is_pressed('shift'):
            continue
        ser = serial.Serial("COM7", 9600)

       
        random_x = random.randint(0, 1920)
        random_y = random.randint(0, 1080)

        coordinates = f"{random_x},{random_y}\n"
        encoded_coordinates = coordinates.encode()
        ser.write(coordinates.encode())
        ser.close()
        print(f"Sent: {coordinates}, Encoded: {encoded_coordinates}")
        
        time.sleep(1)



com_write()

Данные поступающие с моего кода в порт введите сюда описание изображения

Данные поступающие с проверочного кода в порт введите сюда описание изображения

Как видим они одинаковые. Я пробовал вынести открытие порта из функции(com_write ()) (в основную функцию (process_screen()) за цикл for, так же пробовал подавать в порт координаты идущие от размера всего экрана а не только части

Например:

monitor = {"top":0, "left":0, "width":1920, "height":1080} 

А не:

monitor = {"top": 430, "left": 630, "width": 660, "height": 430} 

Так же была попытка передавать "сырые" координаты сразу из переменных x1, y1, но это так же не помогло.

Добавление проверки:

if Cx2 != 0 and Cy2 != 0:
    com_write()

Не сработало.

Использование задержки при передаче в порт не помогло. В чём ещё может быть проблема я уже теперь вообще без понятия :(

P.S.

Запись с двумя минусами:

Cy2 = Cy - -400
Cx2 = Cx - -630

В моём случае является приемлемой поскольку решает кое какую ошибку...


Ответы (0 шт):