1
|
import socket
|
2
|
import tkinter as tk
|
3
|
from tkinter import ttk
|
4
|
from tkinter import messagebox
|
5
|
import tkinter.font as font
|
6
|
from tkinter import PhotoImage
|
7
|
import os
|
8
|
from tkinter import *
|
9
|
|
10
|
AVANZAR = 'avanzar'
|
11
|
RETROCEDER = 'retroceder'
|
12
|
CLOSE = 'close'
|
13
|
DERECHA='derecha'
|
14
|
IZQUIERDA='izquierda'
|
15
|
GOLPEAR='golpear'
|
16
|
ATRAS='atras'
|
17
|
ADELANTE='adelante'
|
18
|
DESCONECTAR='desconectar'
|
19
|
ANGULO_30='30°'
|
20
|
ANGULO_45='45°'
|
21
|
ANGULO_60='60°'
|
22
|
ANGULO_90='90°'
|
23
|
MOVER='mover'
|
24
|
|
25
|
def conectar(ventana):
|
26
|
try:
|
27
|
port=12345
|
28
|
host=direccion_ip.get()
|
29
|
global client
|
30
|
client = socket.socket()
|
31
|
client.connect((host, port))
|
32
|
print(client.recv(1024).decode())
|
33
|
estado_label.config(text="Estado: Conectado")
|
34
|
boton_conectar.config(state=tk.DISABLED)
|
35
|
ventana.destroy()
|
36
|
except socket.error:
|
37
|
estado_label.config(text="Estado: Fallo al conectar")
|
38
|
boton_conectar.config(state=tk.NORMAL)
|
39
|
ventana.destroy()
|
40
|
messagebox.showwarning("Conexión erronea","No se ha logrado al conexíon, verifique la IP")
|
41
|
|
42
|
def ventana_ip():
|
43
|
boton_conectar.config(state=tk.DISABLED)
|
44
|
ventana_2 = tk.Toplevel(ventana)
|
45
|
ventana_2.title("Conexión a servidor")
|
46
|
ventana_2.configure(bg="#ABDBD8")
|
47
|
ventana_2.geometry("150x120")
|
48
|
|
49
|
etiqueta_ip = tk.Label(ventana_2, fg=a,text="Ingresar dirección de IP:", bg="#567E8B")
|
50
|
etiqueta_ip.pack(pady=10)
|
51
|
|
52
|
global direccion_ip
|
53
|
direccion_ip= tk.Entry(ventana_2,bg=a)
|
54
|
direccion_ip.pack(pady=10)
|
55
|
estado_label.config(text="Estado: Conectando")
|
56
|
|
57
|
boton_ingresar = tk.Button(ventana_2, text="Ingresar",fg=a, command=lambda:conectar(ventana_2),bg="#567E8B")
|
58
|
boton_ingresar.pack(pady=10)
|
59
|
|
60
|
|
61
|
def avanzar():
|
62
|
client.send(AVANZAR.encode())
|
63
|
estado_label.config(text="Estado: Avanzando")
|
64
|
print("Avanzando")
|
65
|
def retroceder():
|
66
|
client.send(RETROCEDER.encode())
|
67
|
print("Retrocediendo")
|
68
|
estado_label.config(text="Estado: Retrocediendo")
|
69
|
def girar_der():
|
70
|
client.send(DERECHA.encode())
|
71
|
estado_label.config(text="Estado: Girando hacia la Derecha")
|
72
|
print("Girando derecha")
|
73
|
def girar_izq():
|
74
|
client.send(IZQUIERDA.encode())
|
75
|
estado_label.config(text="Estado: Girando hacia la Izquierda")
|
76
|
print("Girando izquierda")
|
77
|
def rotar_brazo_Atras():
|
78
|
client.send(ATRAS.encode())
|
79
|
estado_label.config(text="Estado: Ajustando brazo hacia Atras")
|
80
|
def rotar_brazo_Adelante():
|
81
|
client.send(ADELANTE.encode())
|
82
|
estado_label.config(text="Estado: Ajustando brazo hacia Adelante")
|
83
|
def angulo():
|
84
|
angulo_seleccinado=etiquetas_angulo.get()
|
85
|
if(angulo_seleccinado=="30°"):
|
86
|
etiquetas_angulo.set('')
|
87
|
client.send(ANGULO_30.encode())
|
88
|
estado_label.config(text="Estado: Inclinado angulo 30°")
|
89
|
elif(angulo_seleccinado=="45°"):
|
90
|
etiquetas_angulo.set('')
|
91
|
client.send(ANGULO_45.encode())
|
92
|
estado_label.config(text="Estado: Inclinado angulo 45°")
|
93
|
elif(angulo_seleccinado=="60°"):
|
94
|
etiquetas_angulo.set('')
|
95
|
client.send(ANGULO_60.encode())
|
96
|
estado_label.config(text="Estado: Inclinado angulo 60°")
|
97
|
elif(angulo_seleccinado=="90°"):
|
98
|
etiquetas_angulo.set('')
|
99
|
client.send(ANGULO_90.encode())
|
100
|
estado_label.config(text="Estado: Inclinado angulo 90°")
|
101
|
else:
|
102
|
estado_label.config(text="Estado: Angulo no encontrado")
|
103
|
|
104
|
def golpear():
|
105
|
client.send(GOLPEAR.encode())
|
106
|
estado_label.config(text="Estado: Golpeando")
|
107
|
def desconectar():
|
108
|
client.send(DESCONECTAR.encode())
|
109
|
estado_label.config(text="Estado: Desconectado")
|
110
|
client.close()
|
111
|
ventana.destroy()
|
112
|
def mover():
|
113
|
client.send(MOVER.encode())
|
114
|
estado_label.config(text="Estado: Realizando Movimientos")
|
115
|
|
116
|
ventana = tk.Tk()
|
117
|
ventana.title("Control de Robot con Palo de Golf")
|
118
|
ventana.config(bg="#ABDBD8")
|
119
|
a="white"
|
120
|
b="light goldenrod yellow"
|
121
|
buttonFont = font.Font(family='Helvetica', size=24, weight='bold')
|
122
|
buttonFontSec = font.Font(family='Helvetica', size=15, weight='bold')
|
123
|
boton_avanzar = tk.Button(ventana, text="^", command=avanzar, height=1, width=3, font=buttonFont,bg=a)
|
124
|
boton_retroceder = tk.Button(ventana, text="v", command=retroceder, height=1, width=3, font=buttonFont,bg=a)
|
125
|
boton_izquierda = tk.Button(ventana, text="<", command=girar_izq, height=1, width=3, font=buttonFont,bg=a)
|
126
|
boton_derecha = tk.Button(ventana, text=">", command=girar_der, height=1, width=3, font=buttonFont,bg=a)
|
127
|
|
128
|
imagen_abajo=PhotoImage(file="C:/Users/nombre/Desktop/abajo.png")
|
129
|
boton_rotar_atras = tk.Button(ventana,image=imagen_abajo, command=rotar_brazo_Atras, height=60, width=53, font=buttonFontSec,bg=a)
|
130
|
|
131
|
imagen_arriba=PhotoImage(file="C:/Users/nombre/Desktop/arriba.png")
|
132
|
boton_rotar_adelante = tk.Button(ventana,image=imagen_arriba, command=rotar_brazo_Adelante, height=60, width=53, font=buttonFontSec,bg=a)
|
133
|
|
134
|
imagen_golpe=PhotoImage(file="C:/Users/nombre/Desktop/golpe.png")
|
135
|
boton_golpear = tk.Button(ventana,image=imagen_golpe, command=golpear, height=60, width=53, font=buttonFontSec)
|
136
|
imagen_angulo=PhotoImage(file="C:/Users/nombre/Desktop/angulo.png")
|
137
|
boton_angulo= tk.Button(ventana, image=imagen_angulo, command=angulo, height=45 ,width=75,fg="white" ,font=buttonFontSec,bg="#567E8B")
|
138
|
|
139
|
imagen_apagar=PhotoImage(file="C:/Users/nombre/Desktop/apagar.png")
|
140
|
boton_apagar = tk.Button(ventana, image=imagen_apagar, command=desconectar, height=60, width=53, font=buttonFontSec,bg=a)
|
141
|
|
142
|
boton_conectar = tk.Button(ventana, text="Conectar", command=ventana_ip, height=1, width=8,fg="white" ,font=buttonFontSec,bg="#567E8B")
|
143
|
boton_conectar.grid(column=4, row=6, padx=10, pady=8, rowspan=1)
|
144
|
|
145
|
|
146
|
etiqueta_angulo = tk.Label(ventana, text="Seleccionar Ángulo", fg="white" , font=buttonFontSec,bg="#567E8B")
|
147
|
etiquetas_angulo = ttk.Combobox(ventana, values=["30°", "45°", "60°","90°"], font=buttonFontSec)
|
148
|
|
149
|
etiqueta_angulo.grid(column=3, row=0, padx=8, pady=8, columnspan=2, rowspan=1)
|
150
|
etiquetas_angulo.grid(column=3, row=1, padx=8, pady=8, columnspan=2, rowspan=1)
|
151
|
boton_angulo.grid(column=3, row=2, padx=8, pady=8, columnspan=2, rowspan=1)
|
152
|
|
153
|
|
154
|
imagen = PhotoImage(file="C:/Users/fabian/Desktop/KIKIS.png")
|
155
|
logo = tk.Button(ventana, image=imagen,command=mover, height=64, width=64, font=buttonFontSec,bg=a)
|
156
|
boton_rotar_adelante.grid(column=0, row=0, padx=8, pady=8)
|
157
|
boton_avanzar.grid(column=1, row=0, padx=8, pady=8)
|
158
|
boton_rotar_atras.grid(column=2, row=0, padx=8, pady=8)
|
159
|
|
160
|
boton_izquierda.grid(column=0, row=1, padx=8, pady=8)
|
161
|
logo.grid(column=1, row=1, padx=8, pady=8)
|
162
|
boton_derecha.grid(column=2, row=1, padx=8, pady=8)
|
163
|
|
164
|
boton_golpear.grid(column=0, row=2, padx=8, pady=8)
|
165
|
boton_retroceder.grid(column=1, row=2, padx=8, pady=8)
|
166
|
|
167
|
|
168
|
boton_apagar.grid(column=2, row=2, padx=8, pady=8)
|
169
|
estado_label = tk.Label(ventana, text="Estado: Desconectado", fg="white" , font=buttonFontSec,bg="#567E8B")
|
170
|
estado_label.grid(row=6, column=0, columnspan=4, pady=8)
|
171
|
ventana.mainloop()
|