Programación e Implementación del sistema » History » Version 2
« Previous -
Version 2/4
(diff) -
Next » -
Current version
catalina ramirez, 11/11/2024 08:38 AM
Programación e Implementación del sistema¶
Funciones¶
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")
Servidor¶
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()
Interfaz Gráfica¶
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)