Auge y pinza bot (15 / 15 paso)

Paso 15: Listado de código para la aplicación de Python

#! / usr/bin/env python ## para Linux, BSD o Mac OSX puedes chmod + x en esta secuencia de comandos para hacer ejecutable # ### # Rover control app ## permite comandos simples de varios bytes. ## Escrito por Scott Beasley - 2015 # gratis para usar o modificar. Disfrutar. # ### import sys import importación serie tiempo de import Tkinter * importación de tkFont importación tkMessageBox # crear la ventana de la clase de aplicación de la aplicación (Frame): # hacer la ventana def createWidgets (self): self.connected = False self.message = CadenaVar () # hacer una pequeña fuente para la garra botones. helv6 = tkFont.Font (familia = 'Helvetica', tamaño = 6, peso = 'normal') self.frame = marco (self.master) self.frame.pack () self.f1 = self.l1 marco (self.frame) = Label (self.f1, texto = "Puerto de comunicación:") self.l1.pack (lado = izquierda) self.comm_entry = entrada (self.f1, bd = 5, nombre = "comm_entry") self.comm_entry.pack (lado = izquierda) self.connectButton = botón (self.f1, texto = "Conectar", comando = uno mismo. SerialConnect, nombre = "b_connect") self.connectButton.pack (lado = izquierda) self.disconnectButton = botón (self.f1, texto = "Desconectado", comando = a uno mismo. SerialDisconnect, nombre = "b_disconnect") self.disconnectButton.pack (lado = a la derecha) self.f1.grid (fila = 0, columna = 0) self.f2 = LabelFrame (self.frame, bd = 3, alivio = "surco", texto = "Ground Control") self.g_vert_fm = marco (self.f2) self.grip_vert = escala (self.g_vert_fm, from_ = 0, a = 180) # Bind Mouse botón 1 release para establecer el self.grip_vert.bind de posición de la pluma ('', del uno mismo. GripperY) self.grip_vert.grid (fila = 0, columnas = 0, rowspan = 4, pegajosa = W) self.master.bind ("", del uno mismo. GripperY) self.g_vert_fm.grid (fila = 0, columnas = 0, rowspan = 4, pegajosa = W) self.leftforwardButton = botón (self.f2, texto = "\\", comando = uno mismo. TurnLeft45, nombre = "b_left_forward") self.leftforwardButton.grid (fila = 0, columnas = 1) self.master.bind ("< un rel =" nofollow">", del uno mismo. Self.leftButton de TurnLeft45) = botón (self.f2, texto = "<", comando = a uno mismo. Izquierda, nombre = "b_left") self.leftButton.grid (fila = 1, columna = 1) self.master.bind ("< /a >< un rel =" nofollow">", del uno mismo. Self.rightforwardButton de izquierda) = botón (self.f2, texto = "por" comando = a uno mismo. TurnRight45, nombre = "b_right_forward") self.rightforwardButton.grid (fila = 0, columnas = 3) self.master.bind ("< /a >< un rel =" nofollow">", del uno mismo. Self.haltButton de TurnRight45) = botón (self.f2, texto = "detener
! ", comando = a uno mismo. Alto, nombre = "b_halt") self.haltButton.grid (fila = 1, columna = 2) self.master.bind ("< /a >< un rel =" nofollow">", del uno mismo. Self.rightButton de alto) = botón (self.f2, texto = ">", comando = a uno mismo. TurnRight, nombre = "b_right") self.rightButton.grid (fila = 1, columna = 3) self.master.bind ("< /a >< un rel =" nofollow">", del uno mismo. TurnRight) self.upButton = botón (self.f2, texto = "^", comando = a uno mismo. Adelante, nombre = "b_forward") self.upButton.grid (fila = 0, columna = 2) self.master.bind ("< /a >< un rel =" nofollow">", del uno mismo. Self.leftdownButton adelante) = botón (self.f2, texto = "por" comando = a uno mismo. TurnRight45, nombre = "b_left_down") self.leftdownButton.grid (row = 2, columna = 1) self.downButton = botón (self.f2, texto = "V", comando = a uno mismo. Inversa, nombre = "b_reverse") self.downButton.grid (row = 2, columna = 2) self.master.bind ("< /a >< un rel =" nofollow">", del uno mismo. Self.f2.grid de reversa) (fila = 1, columna = 0, pady = 25) self.rightdownButton = botón (self.f2, texto = "\\", comando = a uno mismo. TurnLeft45, nombre = "b_right_down") self.rightdownButton.grid (fila = 2, columna = 3) self.g_horz_fm = marco (self.f2) self.grip_horz = escala (self.g_horz_fm, from_ = 0, a = 180, Oriente = HORIZONTAL) # Bind en lanzamiento de botón 1 del ratón para fijar la pinza colocar self.grip_horz.bind ('< /a >< un rel = "nofollow" >', del uno mismo. GripperX) self.grip_horz.grid (fila = 0, columnas = 0, columnspan = 7, pegajoso = E) self.master.bind («< u >», yo. GripperX) self.g_horz_fm.grid (row = 4, columna = 0, columnspan = 7, pegajosa = E) self.master.bind ("< /u >< /a >< un rel =" nofollow">< u >, del uno mismo. GripperHome) self.f_spd_dist = self.l_speed marco (self.frame) = Label (self.f_spd_dist, texto = "velocidad:") self.l_speed.grid (fila = 0, columna = 0) self.speed_spin = despliega (self.f_spd_dist, valores = (1, 2, 3), anchura = 2, comando = a uno mismo. SetSpeed) self.speed_spin.grid (fila = 0, columna = 1) self.l_dist = etiqueta (self.f_spd_dist, texto = "distancia:") self.l_dist.grid (fila = 0, columnas = 3) self.dist_spin = despliega (self.f_spd_dist, valores = ('Corto', 'Medio', 'Continua'), ancho = 10, comando = uno mismo. SetDistance) self.dist_spin.grid (fila = 0, columna = 4) self.l_turns = Label (self.f_spd_dist, texto = "convierte:") self.l_turns.grid (fila = 0, columna = 5) self.turns_spin = despliega (self.f_spd_dist, valores = ('Duro', 'Suave'), ancho = 5, comando = a uno mismo. SetTurns) self.turns_spin.grid (fila = 0, columna = 6) self.f_spd_dist.grid (fila = 2, columna = 0) self.f3 = self.l2 marco (self.frame) = Label (self.f3, texto = "última acción:") self.l2.pack (lado = izquierda) self.l3 = Label (self.f3, texto = "", textvariable = self.message) self.l3.pack (lado = a la derecha) self.f3.grid (fila = 5, columna = 0, pady = 8) # establecer el estado del bot botones de control. Activar cuando se conecta, # deshabilitado de lo contrario. DEF CtrlButtonsState (self, bstate): self.leftforwardButton.config (estado = bstate) self.leftButton.config (estado = bstate) self.rightforwardButton.config (estado = bstate) self.rightButton.config (estado = bstate) self.upButton.config (estado = bstate) self.leftdownButton.config (estado = bstate) self.downButton.config (estado = bstate) self.rightdownButton.config (estado = bstate) self.haltButton.config (estado = bstate) self.disconnectButton.config (estado = bstate) self.grip_horz.config (estado = bstate) self.grip_vert.config (estado = bstate) # establecer el estado de la entrada de Puerto comm. Activar cuando no está conectado, # deshabilitado cuando está conectado el bot. DEF ConnCtrlsState (self, bstate): self.connectButton.config (estado = bstate) self.comm_entry.config (estado = bstate) # Conecte al puerto comm escribió en el campo de entrada de comm. DEF SerialConnect (self): tratar: # cambiar el baud velocidad 9600 aquí si es diferente entonces self.ser = serial. Serie (self.comm_entry.get (), 9600) excepto IOError: tkMessageBox.showerror ("Invalid comm port", "Puerto de comunicación no encontrado.") volver a uno mismo. ConnCtrlsState (desactivado) uno mismo. CtrlButtonsState (NORMAL) self.message.set ("SerialConnect") self.connected = True time.sleep (3) # detención un poco para la conexión a pasar # hacer algo después de conexión bot hablar. Si self.connected == True: self.setbotParms () # desconectar desde el bot (cerca del puerto de comunicación). DEF SerialDisconnect (self): tratar: # enviar un comando de interrupción en caso de que el bot está todavía avanzando. Self.send_cmd ('h', "Halt!") Time.Sleep (1) self.ser.close () excepto IOError: Imprimir "Podría no cerrar puerto.." self.message.set ("SerialDisconnect") uno mismo. ConnCtrlsState ser (NORMAL). CtrlButtonsState (desactivado) self.connected = False time.sleep (2) # un poco para la desconexión de la detención a pasar # enviar el comando para el open comm port # la variable de entrada acción es una tupla que permite multy parte comandos def send_cmd (self, acción, msg): si self.connected == True: de val en acción: self.ser.write (val) self.ser.flush () self.message.set (msg) # enviar el bot un comando de la vuelta a la izquierda. DEF izquierda (sí, evento = None): self.send_cmd («a», «izquierda») # enviar el bot un comando turn-izquierda-arriba. DEF TurnLeft45 (self, evento = None): self.send_cmd ('q', "Left45") # enviar el bot un comando de girar a la derecha. DEF TurnRight (sí, evento = None): self.send_cmd ('s', «Derecho») # enviar el bot un comando de la vuelta, derecha y arriba. DEF TurnRight45 (self, evento = None): self.send_cmd ('e', "Right45") # enviar el bot un comando hacia adelante. DEF adelante (sí, evento = None): self.send_cmd ('w', "Up") # enviar el bot un comando inverso. DEF inversa (sí, evento = None): self.send_cmd ('z', "Down") # enviar el bot un comando detener. DEF alto (sí, evento = None): self.send_cmd ('h', "Halt!") # Set la garra (X). DEF GripperX (sí, evento = None): # leer el control deslizante y envíe el valor al controlador de bot # Nota: 0 es completamente cerrada y 180 son todos el # de manera abierta este es un comando de múltiples byte. El comando + el servo sistema val # + un búfer comando clear (opcional) grp_change = ('> ', chr (self.grip_horz.get ()), chr (255)) self.send_cmd (grp_change, "Pinza X") self.boomchange = ninguna # establece la definición de pinza Y. GripperY (sí, evento = None): # leer el control deslizante y envíe el valor al controlador de bot # Nota: 0 es hacia arriba y 180 es hacia abajo # este es un comando de múltiples byte. El comando + el servo sistema val # + un búfer comando clear (opcional) grp_change = ('^ ', chr (self.grip_vert.get ()), chr (255)) self.send_cmd (grp_change, "Pinza Y") self.gripperchange = None # Coloque la pinza en la posición "home". DEF GripperHome (sí, evento = None): self.send_cmd ('c', chr (255), "Pinza Inicio") self.grip_vert.set self.grip_horz.set (90) (90) # configurar la velocidad de la rover. DEF SetSpeed (evento del uno mismo, = None): spd_str = self.speed_spin.get () if spd_str == "1": velocidad = 1 si spd_str == "2": velocidad = 2 si spd_str == "3": velocidad = 3 # envía un comando de múltiples byte para establecer la velocidad. Self.send_cmd (('v', chr (velocidad)), "Set Speed") # Set la distancia travled cuando un para o rev es expedido a # el rover. DEF SetDistance (sí, evento = None): dist = 1 dist_str = self.dist_spin.get () si dist_str == "Corto": dist = 1 si dist_str == "Medio": dist = 2 si dist_str == "Continua": dist = 3 # envía un comando de múltiples byte para definir la distancia. Self.send_cmd ((sería ', chr (dist)), "Establecer distancia") # definir el estilo de vuelta con giro. DEF SetTurns (evento del uno mismo, = None): gire a la = 1 turn_str = self.turns_spin.get () si turn_str == "Duro": gire = 1 si turn_str == "Suave": gire = 2 # envía un comando de múltiples byte para definir el estilo de la vuelta. Self.send_cmd ((' t ', chr (vuelta)), "Establecer turnos") def setbotParms (self): self. Detener () uno mismo. (GripperHome) uno mismo. SetSpeed () uno mismo. (SetDistance) uno mismo. SetTurns () def __init__ (self, maestro = None): Frame.__init__ (self, maestro) self.pack () self.createWidgets () uno mismo. CtrlButtonsState (desactivado) # Kick off el GUI (Tk) y tamaño y título de la ventana de la aplicación def principal (): raíz = Tk () root.geometry ("450 x 360") root.wm_title ("Rover Control Center (RCC)") app = aplicación (maestro = raíz) (app.mainloop) si __name__ == '__main__': principal () < /u >< /a >

Artículos Relacionados

Fix + reparación Nintendo Wii rompe energía Reset / Sync / botón (s)

Fix + reparación Nintendo Wii rompe energía Reset / Sync / botón (s)

ADVERTENCIA: Si no eres experto en soldadura le podría destruir tu Wii.  Si tu Wii está bajo garantía, envíe a Nintendo.  Si tu Wii está fuera de garantia, usted ha venido al lugar correcto.Entiendo que toma toda la responsabilidad si se rompe tu Wii
Trípode Ultimate DIY con el auge de la cámara

Trípode Ultimate DIY con el auge de la cámara

En este tutorial aprenderá a fabricar un trípode de webcam gratis de manos con un duradero y profesional buscando brazo de pluma telescópica y montaje de cámara universal. La varilla puede ser fácilmente extraída el trípode base, contraída a un tamañ
Botón en 3D impreso, bajo presupuesto y súper fácil!

Botón en 3D impreso, bajo presupuesto y súper fácil!

Para diferentes proyectos que necesitaba muchos botones baratos. Interruptores de tacto son baratos; pero no siempre útil puesto que pueden ser demasiado pequeños, que señalando las piernas etc. Por lo tanto decidí invertir algún tiempo en el diseño
Bote de basura manejable 2.0

Bote de basura manejable 2.0

Versión 1 de mi papelera manejable fue divertido, pero versión 2 tiene manija plegable y manejo. Todavía sin frenos...Paso 1: Herramientas y materialesPara hacer tu propia basura manejable puede usted va a necesitar,MaterialesBote de basuraScooter Ra
Corte occidental bricolaje botas

Corte occidental bricolaje botas

¿Quieres las botas que atraparán la atención de todos? En cinco horas puede crear su propio personalizado par de botas de vaquero de corte llevar junto al rodeo o para cualquier consigue al aire libre.MaterialesBotas de vaquero, señaló toeTienda de z
Aluminio bote pesca conversación y restauración

Aluminio bote pesca conversación y restauración

Epilog reto VI: he entré en esto en el reto de Epilog por favor voto en él si te gusta la construcción. Usar el láser para ayudarme con algunos proyectos muy interesantes como láser corta objetos de madera, señal luminosa led, azulejo grabado y mucho
Pinza para la ropa Piano para el iPad

Pinza para la ropa Piano para el iPad

Pantallas táctiles son grandes, pero cuando se trata de reproducir música en ellos, la falta de teclas físicas puede ser un lastre. Así que decidí reunir algunas cosas en casa y hacer un teclado de piano que engaña el iPad de pensamiento es tocada po
Perdió el bastidor de espuma - botón Play YouTube

Perdió el bastidor de espuma - botón Play YouTube

Hey todo el mundo! Últimamente he estado viendo muchos videos de aluminio fundido y quería seguir adelante y tratar de lanzar algo yo. Las posibilidades son infinitas con este material y literalmente puede hacer lo que quieras de aluminio sólido! En
Cómo hacer un carrusel de herramientas de un bote de pintura

Cómo hacer un carrusel de herramientas de un bote de pintura

Este proyecto fue inspirado al ver centros de maquinado Haas cambiar las herramientas. Es esencialmente un rotativa tablero de clavija de que montar en el techo o la parte inferior de un armario (que es lo que voy a mostrar cómo hacerlo). En este ins
Bota - cuero matraz

Bota - cuero matraz

Ver a piratas del Caribe muchas veces cuenta, animado por mis dos pequeños que sostienen el entusiasmo a pesar de la repetición, noté mantuvo superficie frasco de cuero de Gibbs. Ser de Español decente y dueño de varios bien hacer Botas de vino españ
Botas de cuero de enanos

Botas de cuero de enanos

Recuerdo una vez hace mucho tiempo, antes de que la abominación que es la trilogía del hobbit la horrible realidad. Cuando la primera película apenas había salido, y yo fui vencido por el ingenuo encanto de ser en la tierra media durante tres horas m
Cómo leer un vernier (pinza)

Cómo leer un vernier (pinza)

mirando un calibrador temprano, se dará cuenta de que un poco se ve como un tomahawk y tiene una escala abajo de su longitud. Más sobre la escala más adelante. En la parte inferior izquierda, la "lámina del destral de la" es las mordazas de la p
Controlador de MIDI botón Arcade

Controlador de MIDI botón Arcade

tener una interfaz de hardware para su música favorita / DJ / software de VJ realmente puede abrir puertas en tu creatividad. La forma más generalizada de control de hardware a su PC para este tipo de aplicaciones es un MIDI controlador.Un controlado
Grabar su propio mensaje en botón fácil de grapas

Grabar su propio mensaje en botón fácil de grapas

He visto un par otros web posts acerca de cómo modificar el botón fácil de grapas para reproducir su propio mensaje, pero ahora que ha cerrado Radio Shack, algunos de esos puestos ya no son válidos.Otro método requiere tener una batería de 9 voltios