Example #1
0
    def _change_direction(self):
        # Check right side.
        ev3.unregisterEvent(self._is_close_to_object)
        ev3.set_led(ev3.LED_RED_PULSE)
        ev3.motor.lego.turn(self.configurator.drive, EV3Drive.TURN_RIGHT,
                            self.speed, self.speed,
                            self.configurator.get_left_motors(),
                            self.configurator.get_right_motors(), True)
        time.sleep(self.turn_time)
        self.configurator.drive.stop()
        if self._is_close_to_object():
            # Right side is not good, turn left
            ev3.motor.lego.turn(self.configurator.drive, EV3Drive.TURN_LEFT,
                                self.speed, self.speed,
                                self.configurator.get_left_motors(),
                                self.configurator.get_right_motors(), True)
            time.sleep(2 * self.turn_time)
            self.configurator.drive.stop()

        if self._is_close_to_object():
            # Left is not good, go back.
            ev3.motor.lego.turn(self.configurator.drive, EV3Drive.TURN_LEFT,
                                self.speed, self.speed,
                                self.configurator.get_left_motors(),
                                self.configurator.get_right_motors(), True)
            time.sleep(self.turn_time)
            self.configurator.drive.stop()
        self.configurator.drive.start(EV3Motor.MOVE_FORWARD, self.speed)
        ev3.set_led(ev3.LED_GREEN_PULSE)
        ev3.registerEvent(self._is_close_to_object, self._change_direction)
Example #2
0
File: demo.py Project: dtbinh/ev3
 def start(self):
     print "Starting 3"
     if not self.configurator.drive:
         print "No drive no fun. Quitting."
         return
     
     ev3.set_led(ev3.LED_ORANGE_PULSE)
     self._register_for_keys()
Example #3
0
    def start(self):
        print "Starting 3"
        if not self.configurator.drive:
            print "No drive no fun. Quitting."
            return

        ev3.set_led(ev3.LED_ORANGE_PULSE)
        self._register_for_keys()
Example #4
0
File: demo.py Project: dtbinh/ev3
 def setup(self):
     if not self._is_init:          
         self.drive = EV3Drive([ev3.MOTOR_B, ev3.MOTOR_C])
         self.canon = EV3Canon(ev3.MOTOR_A, 3)
         self.touch_sensor = EV3TouchSensor(ev3.SENSOR_1)
         self.color_sensor = EV3ColorSensor(ev3.SENSOR_3)
         self.ir_sensor = EV3IRSensor(ev3.SENSOR_4)
         self._is_init = True
     self.ir_sensor.set_proximity_mode()
     ev3.set_led(ev3.LED_GREEN_PULSE)
     self.color_sensor.set_reflect_mode()
Example #5
0
 def setup(self):
     if not self._is_init:
         self.drive = EV3Drive([ev3.MOTOR_B, ev3.MOTOR_C])
         self.canon = EV3Canon(ev3.MOTOR_A, 3)
         self.touch_sensor = EV3TouchSensor(ev3.SENSOR_1)
         self.color_sensor = EV3ColorSensor(ev3.SENSOR_3)
         self.ir_sensor = EV3IRSensor(ev3.SENSOR_4)
         self._is_init = True
     self.ir_sensor.set_proximity_mode()
     ev3.set_led(ev3.LED_GREEN_PULSE)
     self.color_sensor.set_reflect_mode()
Example #6
0
File: demo.py Project: dtbinh/ev3
 def _change_direction(self):
     # Check right side.
     ev3.unregisterEvent(self._is_close_to_object)
     ev3.set_led(ev3.LED_RED_PULSE)
     ev3.motor.lego.turn(self.configurator.drive,
                         EV3Drive.TURN_RIGHT,
                         self.speed,
                         self.speed,
                         self.configurator.get_left_motors(),
                         self.configurator.get_right_motors(),
                         True)
     time.sleep(self.turn_time)
     self.configurator.drive.stop()
     distance_right = self.configurator.ir_sensor.get_distance()
     if distance_right <= 73:
         # There is some object in sight. Check left. 
         ev3.motor.lego.turn(self.configurator.drive,
                             EV3Drive.TURN_LEFT,
                             self.speed,
                             self.speed,
                             self.configurator.get_left_motors(),
                             self.configurator.get_right_motors(),
                             True)
         time.sleep(2 * self.turn_time)
         self.configurator.drive.stop()
         distance_left = self.configurator.ir_sensor.get_distance()    
         if distance_left <= self.close_to_object_ir_threshold and distance_right <= self.close_to_object_ir_threshold:
             # Left is not good. Same right. Go back.
             ev3.motor.lego.turn(self.configurator.drive,
                                 EV3Drive.TURN_LEFT,
                                 self.speed,
                                 self.speed,
                                 self.configurator.get_left_motors(),
                                 self.configurator.get_right_motors(),
                                 True)
             time.sleep(self.turn_time)
             self.configurator.drive.stop()
         else:
             if distance_right >= distance_left: # Go right
                 ev3.motor.lego.turn(self.configurator.drive,
                                     EV3Drive.TURN_RIGHT,
                                     self.speed,
                                     self.speed,
                                     self.configurator.get_left_motors(),
                                     self.configurator.get_right_motors(),
                                     True)
                 time.sleep(2 * self.turn_time)
             # else go left
                 
     self.configurator.drive.start(EV3Motor.MOVE_FORWARD, self.speed)
     ev3.set_led(ev3.LED_GREEN_PULSE)
     ev3.registerEvent(self._is_close_to_object, self._change_direction)
Example #7
0
 def _arrow_key_pressed(self, key):
     time.sleep(0.75)  # prevents key events spam
     if key == self._KEY_DOWN and self._mode == self._WAIT_FOR_DIR:
         # Don't go backwards.
         return
     # No spam while handling an event, please.
     self._unregister_from_keys_no_recovery()
     if self._mode == self._WAIT_FOR_DIR:
         self._current_dir = self.key_to_dir(key)
         print "Go to {0}...".format(self._current_dir)
         self._current_time = 0
         self._mode = self._WAIT_FOR_TIME
         ev3.set_led(ev3.LED_RED_PULSE)
     elif key == self._KEY_DOWN:
         self._current_time = self._current_time + self._TIME_RESOLUTION
         print "... for {0} secs...".format(self._current_time)
     # Done. Carry on.
     self._register_for_keys_no_recovery()
Example #8
0
File: demo.py Project: dtbinh/ev3
 def _arrow_key_pressed(self, key):
     time.sleep(0.75) # prevents key events spam
     if key == self._KEY_DOWN and self._mode == self._WAIT_FOR_DIR:
         # Don't go backwards.
         return
     # No spam while handling an event, please.
     self._unregister_from_keys_no_recovery()
     if self._mode == self._WAIT_FOR_DIR:
         self._current_dir = self.key_to_dir(key)
         print "Go to {0}...".format(self._current_dir)
         self._current_time = 0
         self._mode = self._WAIT_FOR_TIME
         ev3.set_led(ev3.LED_RED_PULSE)
     elif key == self._KEY_DOWN:
         self._current_time = self._current_time + self._TIME_RESOLUTION
         print "... for {0} secs...".format(self._current_time)
     # Done. Carry on.
     self._register_for_keys_no_recovery()
Example #9
0
File: demo.py Project: dtbinh/ev3
 def _enter_key_pressed(self):
     time.sleep(0.75) # prevents key events spam (make a constant out of this!)
     if self._mode == self._STARTING:
         self._mode = self._WAIT_FOR_DIR
         return
         
     if self._mode == self._WAIT_FOR_TIME:
         # No spam while handling an event, please.
         self._unregister_from_keys_no_recovery()
         self._path.append([self._current_dir, self._current_time])
         self._current_dir = self._DIR_NONE
         self._current_time = 0
         self._mode = self._WAIT_FOR_DIR
         ev3.set_led(ev3.LED_ORANGE_PULSE)
         # Done. Carry on.
         self._register_for_keys_no_recovery()
     else:
         self._unregister_from_keys()
         self._go()
Example #10
0
    def _change_direction(self):
        # Check right side.
        ev3.unregisterEvent(self._is_close_to_object)
        ev3.set_led(ev3.LED_RED_PULSE)
        ev3.motor.lego.turn(self.configurator.drive, EV3Drive.TURN_RIGHT,
                            self.speed, self.speed,
                            self.configurator.get_left_motors(),
                            self.configurator.get_right_motors(), True)
        time.sleep(self.turn_time)
        self.configurator.drive.stop()
        distance_right = self.configurator.ir_sensor.get_distance()
        if distance_right <= 73:
            # There is some object in sight. Check left.
            ev3.motor.lego.turn(self.configurator.drive, EV3Drive.TURN_LEFT,
                                self.speed, self.speed,
                                self.configurator.get_left_motors(),
                                self.configurator.get_right_motors(), True)
            time.sleep(2 * self.turn_time)
            self.configurator.drive.stop()
            distance_left = self.configurator.ir_sensor.get_distance()
            if distance_left <= self.close_to_object_ir_threshold and distance_right <= self.close_to_object_ir_threshold:
                # Left is not good. Same right. Go back.
                ev3.motor.lego.turn(self.configurator.drive,
                                    EV3Drive.TURN_LEFT, self.speed, self.speed,
                                    self.configurator.get_left_motors(),
                                    self.configurator.get_right_motors(), True)
                time.sleep(self.turn_time)
                self.configurator.drive.stop()
            else:
                if distance_right >= distance_left:  # Go right
                    ev3.motor.lego.turn(self.configurator.drive,
                                        EV3Drive.TURN_RIGHT, self.speed,
                                        self.speed,
                                        self.configurator.get_left_motors(),
                                        self.configurator.get_right_motors(),
                                        True)
                    time.sleep(2 * self.turn_time)
                # else go left

        self.configurator.drive.start(EV3Motor.MOVE_FORWARD, self.speed)
        ev3.set_led(ev3.LED_GREEN_PULSE)
        ev3.registerEvent(self._is_close_to_object, self._change_direction)
Example #11
0
    def _enter_key_pressed(self):
        time.sleep(
            0.75)  # prevents key events spam (make a constant out of this!)
        if self._mode == self._STARTING:
            self._mode = self._WAIT_FOR_DIR
            return

        if self._mode == self._WAIT_FOR_TIME:
            # No spam while handling an event, please.
            self._unregister_from_keys_no_recovery()
            self._path.append([self._current_dir, self._current_time])
            self._current_dir = self._DIR_NONE
            self._current_time = 0
            self._mode = self._WAIT_FOR_DIR
            ev3.set_led(ev3.LED_ORANGE_PULSE)
            # Done. Carry on.
            self._register_for_keys_no_recovery()
        else:
            self._unregister_from_keys()
            self._go()
Example #12
0
File: demo.py Project: dtbinh/ev3
 def _change_direction(self):
     # Check right side.
     ev3.unregisterEvent(self._is_close_to_object)
     ev3.set_led(ev3.LED_RED_PULSE)
     ev3.motor.lego.turn(self.configurator.drive,
                         EV3Drive.TURN_RIGHT,
                         self.speed,
                         self.speed,
                         self.configurator.get_left_motors(),
                         self.configurator.get_right_motors(),
                         True)
     time.sleep(self.turn_time)
     self.configurator.drive.stop()
     if self._is_close_to_object():
         # Right side is not good, turn left 
         ev3.motor.lego.turn(self.configurator.drive,
                             EV3Drive.TURN_LEFT,
                             self.speed,
                             self.speed,
                             self.configurator.get_left_motors(),
                             self.configurator.get_right_motors(),
                             True)
         time.sleep(2 * self.turn_time)
         self.configurator.drive.stop()
         
     if self._is_close_to_object():
         # Left is not good, go back.
         ev3.motor.lego.turn(self.configurator.drive,
                             EV3Drive.TURN_LEFT,
                             self.speed,
                             self.speed,
                             self.configurator.get_left_motors(),
                             self.configurator.get_right_motors(),
                             True)
         time.sleep(self.turn_time)
         self.configurator.drive.stop()
     self.configurator.drive.start(EV3Motor.MOVE_FORWARD, self.speed)
     ev3.set_led(ev3.LED_GREEN_PULSE)
     ev3.registerEvent(self._is_close_to_object, self._change_direction)            
Example #13
0
File: demo.py Project: dtbinh/ev3
 def _go(self):
     ev3.set_led(ev3.LED_GREEN)
     ev3.registerEvent(self.configurator.touch_sensor.is_pressed, self.stop)
     ev3.registerEvent(self._is_close_to_object, self._next_step, True)
     self._next_step()
Example #14
0
File: demo.py Project: dtbinh/ev3
 def tear_down(self):
     ev3.set_led(ev3.LED_GREEN)
Example #15
0
 def tear_down(self):
     ev3.set_led(ev3.LED_GREEN)
Example #16
0
 def _go(self):
     ev3.set_led(ev3.LED_GREEN)
     ev3.registerEvent(self.configurator.touch_sensor.is_pressed, self.stop)
     ev3.registerEvent(self._is_close_to_object, self._next_step, True)
     self._next_step()
Example #17
0
File: demo.py Project: dtbinh/ev3
def get_driver(config):
    if len(sys.argv) < 2  or sys.argv[1] == "1":
        print "Variant 1"
        driver = ModifiedEV3RStormRobotDriver_1(config)
    elif sys.argv[1] == "2":
        print "Variant 2"
        driver = ModifiedEV3RStormRobotDriver_2(config)
    else:
        print "Variant 3"
        driver = ModifiedEV3RStormRobotDriver_3(config)
        
    return driver


if __name__ == "__main__":
    ev3.open_all_devices()

    robot = EV3Robot()
    
    robot.setup(get_driver(ModifiedEV3RStormRobotConfig()))
    
    ev3.registerEvent(ev3.is_enter_button_pressed, robot.start)

    print "Ready..."
    ev3.run()

    print "Done..."
    ev3.set_led(ev3.LED_BLACK)
    ev3.close_all_devices()
Example #18
0
def get_driver(config):
    if len(sys.argv) < 2 or sys.argv[1] == "1":
        print "Variant 1"
        driver = ModifiedEV3RStormRobotDriver_1(config)
    elif sys.argv[1] == "2":
        print "Variant 2"
        driver = ModifiedEV3RStormRobotDriver_2(config)
    else:
        print "Variant 3"
        driver = ModifiedEV3RStormRobotDriver_3(config)

    return driver


if __name__ == "__main__":
    ev3.open_all_devices()

    robot = EV3Robot()

    robot.setup(get_driver(ModifiedEV3RStormRobotConfig()))

    ev3.registerEvent(ev3.is_enter_button_pressed, robot.start)

    print "Ready..."
    ev3.run()

    print "Done..."
    ev3.set_led(ev3.LED_BLACK)
    ev3.close_all_devices()