Project

General

Profile

Programación e Implementación del sistema » History » Version 2

Version 1 (catalina ramirez, 10/16/2024 03:23 PM) → Version 2/4 (catalina ramirez, 11/11/2024 08:38 AM)

h1. Programación e Implementación del sistema

___

h2. +Funciones+

<pre>
from time import sleep

from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, SpeedPercent, MoveTank
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor.lego import TouchSensor
from ev3dev2.led import Leds
from time import sleep

from ev3dev2.motor import LargeMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, OUTPUT_D, SpeedPercent, MoveTank, MediumMotor
from ev3dev2.sensor import INPUT_1
from ev3dev2.sensor.lego import TouchSensor
from ev3dev2.led import Leds
from ev3dev2.sound import Sound

TANK_DRIVE = MoveTank(OUTPUT_A, OUTPUT_B)

MOTOR_IZQUIERDO = LargeMotor(OUTPUT_A)
MOTOR_DERECHO = LargeMotor(OUTPUT_B)
MOTOR_APRETAR_GARRA = MediumMotor(OUTPUT_C)
MOTOR_SUBIR_BAJAR = LargeMotor(OUTPUT_D)

# GARRA = LargeMotor(OUTPUT_C)
RAPIDO = SpeedPercent(100)
MEDIO = SpeedPercent(50)
LENTO = SpeedPercent(10)

def avanzar():
TANK_DRIVE.on_for_seconds(-50, -50, 1)

def retroceder():
TANK_DRIVE.on_for_seconds(50, 50, 1)

def girar_derecha():
TANK_DRIVE.on_for_seconds(-50, 50, 1)

def girar_izquierda():
TANK_DRIVE.on_for_seconds(50, -50, 1)


def hablar():
sound = Sound()
sound.speak("Hello")
</pre>

____

____

h2. +Servidor+

<pre>
import socket
import library as lib

HOST = ""
PORT = 8080

# Creación y setup de socket
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
print("Socket creado")
s.bind((HOST, PORT))
print("El socket se creo con puerto: " + str(PORT))
s.listen(4)
print("El socket esta escuchando...")

# Se espera la conexión con el cliente
client, addr = s.accept()
print("Se conecto a " + str(addr))

# Main loop
while True:
# Se recibe un byte y se decodifica
data = client.recv(16)
key = data.decode()

#Teclado
if key == 'w':
lib.avanzar()
elif key == 'a':
lib.girar_izquierda()
elif key == 's':
lib.retroceder()
elif key == 'd':
lib.girar_derecha()
elif key == 'space':
lib.hablar()
#Mando
elif key == "ARRIBA":
lib.avanzar()
elif key == "IZQUIERDA":
lib.girar_izquierda()
elif key == "DERECHA":
lib.girar_derecha()
elif key == "ABAJO":
lib.retroceder()

elif key == "EQUIS":
print(key)
elif key == "O":
print(key)
elif key == "CUADRADO":
print(key)
elif key == "TRIANGULO":
print(key)
#Salir
elif key == 'q':
print('q')
break

print("Cerrando client")
client.close()
print("Cerrando socket")
s.close()
</pre>

___

___

h2. +Interfaz Gráfica+

<pre>
import socket
import client
from tkinter import *
from tkinter import ttk
import multiprocessing

def mandar_input(socket_p, mensaje):

socket_p.sendall(mensaje)

return

def gui_process(queue):
def check_queue():
try:

# Verifica si hay algún mensaje en la cola y se ejecuta la funcion para mandarlo al servidor
message = queue.get_nowait()
mandar_input(socket, message.encode())

except multiprocessing.queues.Empty:
pass

ventana_principal.after(100, check_queue)

#Se crea el socket para conectarlo con el servidor y se guarda.
socket = client.retornar_socket()
print("Socket creado")

#Ventana Principal
ventana_principal = Tk()
ventana_principal.title("EV3.")
ventana_principal.config(bg="#FF5757")
ventana_principal.geometry("800x700")
ventana_principal.resizable(0, 0)

#Label
label_movimiento_ev3 = Label(ventana_principal, text="Movimiento EV3.")
label_movimiento_ev3.place(x=10, y= 10)

#Se manda las teclas del teclado si es que son presionadas
ventana_principal.bind("<Key>", lambda event: mandar_input(socket, event.keysym.encode()))

# Verificar la cola cada 100 ms
ventana_principal.after(100, check_queue)

# Ejecutar la ventana
ventana_principal.mainloop()

if __name__ == "__main__":

# Cola para la comunicación entre procesos
queue = multiprocessing.Queue()

# Crear el proceso de tkinter
gui_process(queue)
</pre>