2 votes

Besoin de convertir strint en int rapidement python

J'ai un programme qui est censé prendre les lectures de position du joystick à partir d'un arduino (via une liaison série), et les traduire en mouvements de souris sur mon ordinateur.

Il n'y a qu'un seul problème...
La conversion des chaînes de caractères en nombres entiers est beaucoup trop lente et l'enregistrement des mouvements prend une éternité.
J'ai besoin d'un moyen plus rapide de convertir une chaîne de caractères en une valeur entière, ou d'un moyen d'ignorer complètement la conversion.

Voici mon code actuel :

import serial
import pyautogui
import time

ser = serial.Serial('COM3', 9600, timeout=1)
while True:
    time.sleep(0.0001)
    ser_bytes = ser.readline()
    decoded_bytes = ser_bytes[0:len(ser_bytes)-2].decode("utf-8")
    pos = decoded_bytes.split(':')
    xpos = int(pos[0])
    ypos = int(pos[1])
    print("x:", xpos, " y:", ypos)
    pyautogui.move(xpos, ypos)

Note : La sortie de l'arduino a 3 valeurs : 0:0:0 Premier nombre : x Deuxième nombre : y Troisième chiffre : bouton du joystick

1voto

Dennis Points 832

Peut-être qu'une solution de ce type fonctionnerait ? De cette façon, vous pouvez lire plus d'une ligne d'entrée à chaque fois que vous appelez move() . Certaines lignes d'entrée seront ignorées, mais cela semble nécessaire si vous recevez des données plus rapidement que vous ne pouvez les utiliser.

import serial
import pyautogui
import time

ser = serial.Serial('COM3', 9600, timeout=1)
while True:
    time_to_move = time.time() + 0.001
    while True:
        ser_bytes = ser.readline()
        if time.time() >= time_to_move:
            break
    x_bytes, y_bytes = ser_bytes[:-2].split(b':')
    x, y = int(x_bytes), int(y_bytes)
    pyautogui.move(x, y)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X