diff options
-rwxr-xr-x | LegoJAM.py | 172 | ||||
-rw-r--r-- | TODO | 4 | ||||
-rw-r--r-- | interpreter.py | 77 |
3 files changed, 79 insertions, 174 deletions
diff --git a/LegoJAM.py b/LegoJAM.py deleted file mode 100755 index 1aeaa15..0000000 --- a/LegoJAM.py +++ /dev/null @@ -1,172 +0,0 @@ -#!/usr/bin/python -# -*- coding: utf-8 -*- - -import os -import gtk -import sys - -BASE = os.path.dirname(__file__) - -sys.path.append("nxt_plugin") - -# Import the API functions -# Importamos las funciones de la API -import nxt -from nxt import Motor - -from interface.window import Window - - -class LegoJAM(Window): - - def __init__(self): - super(LegoJAM, self).__init__() - self.set_title("LegoJAM") - #self.set_icon_from_file(os.path.join(BASE, "Iconos", "ceibal.png")) - - self.canvas = gtk.VBox() - self.set_canvas(self.canvas) - - self.connect("delete_event", self.delete_event) - - robots = list(nxt.locator.find_bricks()) - - liststore = gtk.ListStore(int, str) - treeview = gtk.TreeView(liststore) - column = gtk.TreeViewColumn('Robots') - cell = gtk.CellRendererText() - column.pack_start(cell) - column.set_attributes(cell, text=1) - treeview.append_column(column) - - self.canvas.pack_start(treeview, True, True, 0) - - num = 1 - for robot in robots: - try: - robot_str = '%s %s' % (robot.type, robot.host) - - except AttributeError: - robot_str = '%s %s' % (robot.type, num) - liststore.append([num, robot_str]) - num += 1 - - treeview.connect('row-activated', self.select_robot, robots) - - self.show_all() - - def select_robot(self, treeview, treepath, column, robots): - self.set_layout(robots[treepath[0] - 1]) - treeview.destroy() - - def set_layout(self, robot): - self.robot = Robot(robot) - store = gtk.ListStore(str, int) - combobox = gtk.ComboBox(store) - cell = gtk.CellRendererText() - combobox.pack_start(cell) - combobox.add_attribute(cell, 'text', 0) - self.canvas.pack_start(combobox, True, False) - combobox.show() - - num = 0 - for i in ['A', 'B', 'C']: - store.append(['Motor %s' % i, num]) - combobox.set_active(0) - - vbox = gtk.VBox() - run_button = gtk.Button("Encender") - run_button.show() - run_button.connect_object("clicked", self.run_motor, combobox) - vbox.pack_start(run_button) - stop_button = gtk.Button("Apagar") - stop_button.show() - stop_button.connect_object("clicked", self.stop_motor, combobox) - vbox.pack_start(stop_button) - vbox.show() - num += 1 - - self.canvas.pack_start(vbox, True, True) - self.show_all() - - def run_motor(self, combobox): - if combobox.get_active() == 0: - self.robot.run_motor("A") - elif combobox.get_active() == 1: - self.robot.run_motor("B") - elif combobox.get_active() == 2: - self.robot.run_motor("C") - - def stop_motor(self, combobox): - if combobox.get_active() == 0: - self.robot.stop_motor("A") - elif combobox.get_active() == 1: - self.robot.stop_motor("B") - elif combobox.get_active() == 2: - self.robot.stop_motor("C") - - def delete_event(self, widget, event): - self.salir() - return False - - def salir(self, widget=None): - sys.exit(0) - - -# robot.get_battery_level() -# robot.get_device_info() -# robot.get_current_program_name -# robot.get_firmware_version() -# robot.get_input_values() takes exactly 2 arguments (1 given) -# robot.get_output_state() takes exactly 2 arguments (1 given) - -class Robot(): - def __init__(self, robot): - self.motorA = None - self.motorB = None - self.motorC = None - self.funciones = [] - self.set_up(robot) - - def set_up(self, robot): - self.robot = robot.connect() - self.motorA = Mimotor("A", self.robot, nxt.PORT_A) - self.motorB = Mimotor("B", self.robot, nxt.PORT_B) - self.motorC = Mimotor("C", self.robot, nxt.PORT_C) - - def run_motor(self, motor): - if motor == "A": - self.motorA.run(power=127, regulated=False) - elif motor == "B": - self.motorB.run(power=127, regulated=False) - elif motor == "C": - self.motorC.run(power=127, regulated=False) - - def stop_motor(self, motor): - if motor == "A": - self.motorA.brake() - elif motor == "B": - self.motorB.brake() - elif motor == "C": - self.motorC.brake() - - -class Mimotor(Motor): - # motor._get_state() - def __init__(self, nombre, brick, port): - Motor.__init__(self, brick, port) - self.nombre = nombre - - #self.turn(power = 100, tacho_units = 360, emulate = True) - #self.turn( - #power = 100, - #tacho_units= 0, brake = True, timeout = 1, emulate = True) - #self.run(power = 100, regulated=False) - -if __name__ == "__main__": - LegoJAM() - gtk.main() - -''' -for x in range(5000): - ....: robot.play_tone_and_wait(x, 1000)''' @@ -1,8 +1,8 @@ New functions / Nuevas Funciones: - + Bugs / Bichos: Fixes / Mejoras: - + Use (usar) listview Ready / Listo: Pep8 (e)standard. diff --git a/interpreter.py b/interpreter.py new file mode 100644 index 0000000..34aba60 --- /dev/null +++ b/interpreter.py @@ -0,0 +1,77 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import sys +sys.path.append("nxt_plugin") + +# Import the API functions +# Importamos las funciones de la API +import nxt +from nxt import Motor + + +class Robot(): + def __init__(self): + self.nombre = 'Pancho' + self.motors = [] + self.funciones = [] + self.ready = False + + def setup(self): + try: + self.robot = nxt.locator.find_one_brick() + for funcion in dir(self.robot): + self.funciones.append(funcion) + print funcion + print self.robot.get_device_info() + except: + print "El Robot se Encuentra Desconectado o Apagado" + return False + self.motors.append([Motor(self.robot, nxt.PORT_A), 127]) + self.motors.append([Motor(self.robot, nxt.PORT_B), 127]) + self.motors.append([Motor(self.robot, nxt.PORT_C), 127]) + self.ready = True + return True + + def run_motor(self, motor): + self.motors[motor][0].run(power=self.motors[motor][1], regulated=False) + + def stop_motor(self, motor): + self.motors[motor][0].brake() + + #self.turn(power = 100, tacho_units = 360, emulate = True) + #self.turn( + #power = 100, + #tacho_units= 0, brake = True, timeout = 1, emulate = True) + #self.run(power = 100, regulated=False) + + +class NotLoadedError(Exception): + def __init__(self): + self.msg = "There is not a robot loaded" + +robot = Robot() + + +def parse_line(line): + if line == 'load' and not robot.ready: + robot.setup() + return + elif line == 'exit': + exit() + keywords = line.split() + if keywords[0] == 'motor': + if keywords[1] == 'run': + print keywords + robot.run_motor(int(keywords[2])) + elif keywords[1] == 'stop': + robot.stop_motor(int(keywords[2])) + elif keywords[1] == 'get': + print robot.motors[int(keywords[2])][1] + elif keywords[1] == 'set': + robot.motors[int(keywords[2])][1] = int(keywords[3]) + + +while True: + line = raw_input('> ') + parse_line(line) |