diff options
author | Agustin Zubiaga <aguz@sugarlabs.org> | 2012-06-16 19:51:59 (GMT) |
---|---|---|
committer | Agustin Zubiaga <aguz@sugarlabs.org> | 2012-06-16 19:51:59 (GMT) |
commit | ba2d0af727c1fdc2f9cfd52a413b213b39be5bdf (patch) | |
tree | 2a722aa48952499b5c3e16e5bf66e0fddc16daf7 | |
parent | 3eda4eed006dd4df7ae7ca8656bd9f0d2e2efc53 (diff) |
Cargando nuevamente LegoJAM.py
-rw-r--r-- | LegoJAM.py | 189 |
1 files changed, 189 insertions, 0 deletions
diff --git a/LegoJAM.py b/LegoJAM.py new file mode 100644 index 0000000..be1ac9a --- /dev/null +++ b/LegoJAM.py @@ -0,0 +1,189 @@ +#!/usr/bin/python +# -*- coding: utf-8 -*- + +import os +import gtk +import sys +import gobject + +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 + + battery_status = gtk.Label( + 'Estado de la bateria: %s' % self.robot.get_battery_level()) + vbox.pack_end(battery_status) + self.robot.connect('battery-level-changed', + lambda w, l: battery_status.set_text(l)) + + 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(): + + __gsignals__ = {'battery-label-changed': (gobject.SIGNAL_RUN_LAST, + gobject.TYPE_NONE, + int)} + + def __init__(self, robot): + self.motorA = None + self.motorB = None + self.motorC = None + self.funciones = [] + self.set_up(robot) + + gobject.timout_add(1000, self._update_battery_level) + + 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() + + def _update_battery_level(self): + self.emit('battery-level-changed', self.robot.get_battery_level()) + + +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)''' |