-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmouse_old.py
105 lines (87 loc) · 3.54 KB
/
mouse_old.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
import RPi.GPIO as GPIO
import subprocess
import time
import os
# Definição dos pinos do joystick
X_PIN_LEFT = 26
X_PIN_RIGHT = 5
Y_PIN_TOP = 13
Y_PIN_BOTTOM = 6
# Configuração do modo de numeração dos pinos
GPIO.setmode(GPIO.BCM)
# Configuração dos pinos como entrada com resistores de pull-up internos
GPIO.setup(X_PIN_LEFT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(X_PIN_RIGHT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(Y_PIN_TOP, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(Y_PIN_BOTTOM, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Função para mover o cursor do mouse
def move_mouse(x, y):
try:
result = subprocess.run(["xdotool", "mousemove_relative", "--", str(x), str(y)], check=True)
return result.returncode
except subprocess.CalledProcessError as e:
print(f"Error moving mouse: {e}")
return -1
# Função para obter a posição atual do cursor
def get_cursor_position():
try:
if 'DISPLAY' not in os.environ or not os.environ['DISPLAY']:
raise EnvironmentError("DISPLAY environment variable is not set")
result = subprocess.run(["xdotool", "getmouselocation"], capture_output=True, text=True, check=True)
output = result.stdout
x_pos = y_pos = 0
for line in output.splitlines():
if 'x:' in line:
x_pos = int(line.split('x:')[1].split()[0])
if 'y:' in line:
y_pos = int(line.split('y:')[1].split()[0])
return x_pos, y_pos
except Exception as e:
print(f"Error getting cursor position: {e}")
return 0, 0
# Configurações de movimento e velocidade
acceleration = 0.55 # Aceleração
max_speed = 20 # Velocidade máxima
x_speed = 0 # Velocidade atual no eixo X
y_speed = 0 # Velocidade atual no eixo Y
try:
prev_x_pos, prev_y_pos = get_cursor_position()
while True:
# Leitura dos estados dos botões
left = GPIO.input(X_PIN_LEFT) == GPIO.LOW
right = GPIO.input(X_PIN_RIGHT) == GPIO.LOW
top = GPIO.input(Y_PIN_TOP) == GPIO.LOW
bottom = GPIO.input(Y_PIN_BOTTOM) == GPIO.LOW
# Atualiza a velocidade no eixo X
if left:
x_speed -= acceleration
elif right:
x_speed += acceleration
else:
x_speed *= 0.3 # Reduz a velocidade gradualmente
# Atualiza a velocidade no eixo Y
if top:
y_speed -= acceleration
elif bottom:
y_speed += acceleration
else:
y_speed *= 0.3 # Reduz a velocidade gradualmente
# Limita a velocidade máxima
x_speed = max(min(x_speed, max_speed), -max_speed)
y_speed = max(min(y_speed, max_speed), -max_speed)
# Move o cursor do mouse
move_mouse(int(x_speed), int(y_speed))
# Obtém a posição atual do cursor
new_x_pos, new_y_pos = get_cursor_position()
# Verifica se o cursor se moveu na direção errada
if (x_speed > 0 and new_x_pos < prev_x_pos) or (x_speed < 0 and new_x_pos > prev_x_pos):
x_speed = 0 # Impede o movimento no eixo X
if (y_speed > 0 and new_y_pos < prev_y_pos) or (y_speed < 0 and new_y_pos > prev_y_pos):
y_speed = 0 # Impede o movimento no eixo Y
# Atualiza a posição anterior do cursor
prev_x_pos, prev_y_pos = new_x_pos, new_y_pos
# Aguarda um curto período para ajustar a sensibilidade
time.sleep(0.02)
except KeyboardInterrupt:
# Limpa a configuração dos pinos GPIO ao encerrar o programa
GPIO.cleanup()