Project

General

Profile

proyectov1.py

pattricio medina, 09/27/2024 11:26 PM

Download (6.41 KB)

 
1
import tkinter as tk
2

    
3
# Velocidades
4
VELOCIDAD_LENTA = 100
5
VELOCIDAD_NORMAL =  250
6
VELOCIDAD_RAPIDA = 400
7

    
8
# Cambiar el color del botón cuando se selecciona
9
def seleccionar_boton(boton):
10
    boton.config(bg="gray")
11

    
12
# Restaurar el color original del botón
13
def deseleccionar_boton(boton):
14
    boton.config(bg="white")
15

    
16
# Llevar la cuenta del botón de velocidad actual
17
boton_velocidad_actual = None  
18
velocidad_actual = VELOCIDAD_NORMAL  
19

    
20
# Cambiar la velocidad
21
def cambiar_velocidad(velocidad, boton):
22
    global boton_velocidad_actual, velocidad_actual
23

    
24
    if boton_velocidad_actual:
25
        deseleccionar_boton(boton_velocidad_actual)  
26

    
27
    seleccionar_boton(boton)  
28
    boton_velocidad_actual = boton 
29
    velocidad_actual = velocidad  
30
    print(f"Velocidad seleccionada: {velocidad}")
31

    
32
# Funciones de movimiento
33
def mover_adelante(event=None):
34
    print(f"Mover adelante a velocidad {velocidad_actual}")
35
    presionar_boton(boton_adelante)
36

    
37
def mover_atras(event=None):
38
    print(f"Mover atrás a velocidad {velocidad_actual}")
39
    presionar_boton(boton_atras)
40

    
41
def girar_izquierda(event=None):
42
    print(f"Girar izquierda a velocidad {velocidad_actual}")
43
    presionar_boton(boton_izquierda)
44

    
45
def girar_derecha(event=None):
46
    print(f"Girar derecha a velocidad {velocidad_actual}")
47
    presionar_boton(boton_derecha)
48

    
49
# Funciones para el agarre y soltar
50
def accion_agarre(event=None):
51
    print("Acción de agarre")
52
    presionar_boton(boton_agarre)
53

    
54
def accion_soltar(event=None):
55
    print("Acción de soltar")
56
    presionar_boton(boton_soltar)
57

    
58
# Funciones para oscurecer y restaurar el color de los botones
59
def presionar_boton(boton):
60
    boton.config(bg="gray")
61

    
62
def soltar_boton(boton):
63
    boton.config(bg="white")
64

    
65
# Funciones para soltar teclas (restaurar color)
66
def detener_adelante(event=None):
67
    soltar_boton(boton_adelante)
68

    
69
def detener_atras(event=None):
70
    soltar_boton(boton_atras)
71

    
72
def detener_izquierda(event=None):
73
    soltar_boton(boton_izquierda)
74

    
75
def detener_derecha(event=None):
76
    soltar_boton(boton_derecha)
77

    
78
def detener_agarre(event=None):
79
    soltar_boton(boton_agarre)
80

    
81
def detener_soltar(event=None):
82
    soltar_boton(boton_soltar)
83

    
84
# Funciones para cambiar la velocidad con teclas
85
def cambiar_velocidad_lenta(event=None):
86
    cambiar_velocidad(VELOCIDAD_LENTA, boton_velocidad_lenta)
87

    
88
def cambiar_velocidad_normal(event=None):
89
    cambiar_velocidad(VELOCIDAD_NORMAL, boton_velocidad_normal)
90

    
91
def cambiar_velocidad_rapida(event=None):
92
    cambiar_velocidad(VELOCIDAD_RAPIDA, boton_velocidad_rapida)
93

    
94

    
95
"""VENTANA PRINCIPAL"""
96

    
97
ventana = tk.Tk()
98
ventana.title("Control del Robot EV3")
99
ventana.config(bg="gray10")
100
ventana.geometry("1025x750")
101

    
102
# Botones de conexión
103
boton_conectar = tk.Button(ventana, text="Conectar", width=12, height=2, bg="SpringGreen2", relief="solid", bd=5, font=("Arial", 15, "bold"))
104
boton_desconectar = tk.Button(ventana, text="Desconectar", width=12, height=2, bg="brown2", relief="solid", bd=5, font=("Arial", 15, "bold"))
105
boton_manual = tk.Button(ventana, text="Manual", width=12, height=2, bg="lemon chiffon", relief="solid", bd=5, font=("Arial", 15, "bold"))
106

    
107
# Botones de movimiento
108
boton_adelante = tk.Button(ventana, text="", width=6, height=2, bg="white", bd=5, font=("Arial", 30))
109
boton_atras = tk.Button(ventana, text="", width=6, height=2, bg="white", bd=5, font=("Arial", 30))
110
boton_izquierda = tk.Button(ventana, text="", width=6, height=2, bg="white", bd=5, font=("Helvetica", 30, "bold"))
111
boton_derecha = tk.Button(ventana, text="", width=6, height=2, bg="white", bd=5, font=("Helvetica", 30, "bold"))
112
boton_agarre = tk.Button(ventana, text="X", width=6, height=2, bg="white", bd=5, font=("Helvetica", 30))  
113
boton_soltar = tk.Button(ventana, text="O", width=6, height=2, bg="white", bd=5, font=("Helvetica", 30))  
114

    
115
# Botones de las velocidades con teclas asignadas
116
boton_velocidad_rapida = tk.Button(ventana, text="Rápido(3)", width=7, height=2, bg="white", relief="groove", bd=5, font=("Arial", 25, "bold"))
117
boton_velocidad_normal = tk.Button(ventana, text="Normal(2)", width=7, height=2, bg="white", relief="groove", bd=5, font=("Arial", 25, "bold"))
118
boton_velocidad_lenta = tk.Button(ventana, text="Lento(1)", width=7, height=2, bg="white", relief="groove", bd=5, font=("Arial", 25, "bold"))
119

    
120
# Textos
121
etiqueta_velocidades = tk.Label(ventana, text="Velocidades", font=("Arial", 18))
122
etiqueta_ip = tk.Label(ventana, text="ip: ", font=("Arial", 18), bg="snow")
123
etiqueta_estado = tk.Label(ventana, text="Estado: ", font=("Arial", 18), bg="snow")
124
separador2 = tk.Label(ventana, text="", font=("", 12), bg="gray10")
125

    
126
"""POSICIONES"""
127

    
128
# Botones de conexión
129
boton_conectar.grid(row=0, column=0, padx=10, pady=10)
130
boton_desconectar.grid(row=0, column=1, padx=10, pady=10)
131
boton_manual.grid(row=0, column=5, padx=10, pady=10)
132
etiqueta_estado.grid(row=0, column=2, padx=10, pady=10)
133

    
134
# Botones de movimiento
135
etiqueta_ip.grid(row=1, column=0, padx=0, pady=10)
136
boton_adelante.grid(row=2, column=1, padx=10, pady=10)
137
boton_atras.grid(row=4, column=1, padx=10, pady=10)
138
boton_izquierda.grid(row=3, column=0, padx=10, pady=10)
139
boton_derecha.grid(row=3, column=2, padx=10, pady=10)
140
boton_agarre.grid(row=2, column=0, padx=10, pady=10) 
141
boton_soltar.grid(row=2, column=2, padx=10, pady=10) 
142

    
143
# Botones de velocidades
144
etiqueta_velocidades.grid(row=1, column=5, padx=10, pady=10)
145
separador2.grid(row=3, column=4, padx=150, pady=10)
146
boton_velocidad_rapida.grid(row=2, column=5, padx=10, pady=10)
147
boton_velocidad_normal.grid(row=3, column=5, padx=10, pady=10)
148
boton_velocidad_lenta.grid(row=4, column=5, padx=10, pady=10)
149

    
150
"""ASIGNACIONES"""
151

    
152
# Teclas para velocidades
153
ventana.bind('1', cambiar_velocidad_lenta)
154
ventana.bind('2', cambiar_velocidad_normal)
155
ventana.bind('3', cambiar_velocidad_rapida)
156

    
157
# Teclas para movimientos
158
ventana.bind('<w>', mover_adelante)
159
ventana.bind('<KeyRelease-w>', detener_adelante)
160
ventana.bind('<s>', mover_atras)
161
ventana.bind('<KeyRelease-s>', detener_atras)
162
ventana.bind('<a>', girar_izquierda)
163
ventana.bind('<KeyRelease-a>', detener_izquierda)
164
ventana.bind('<d>', girar_derecha)
165
ventana.bind('<KeyRelease-d>', detener_derecha)
166

    
167
# Teclas para agarre y soltar
168
ventana.bind('<e>', accion_agarre)
169
ventana.bind('<KeyRelease-e>', detener_agarre)
170
ventana.bind('<q>', accion_soltar)
171
ventana.bind('<KeyRelease-q>', detener_soltar)
172

    
173
# Abrir interfaz gráfica
174
ventana.mainloop()
175