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>
___
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>