def __init__(self, brick='NXT'): r'''Creates a new Alpha Rex controller. brick Either an nxt.brick.Brick object, or an NXT brick's name as a string. If omitted, a Brick named 'NXT' is looked up. ''' if isinstance(brick, basestring): brick = find_one_brick(name=brick) self.brick = brick self.leftMotor = Motor(brick, PORT_B) self.rightMotor = Motor(brick, PORT_C) self.motors = [self.leftMotor, self.rightMotor] self.touch = Touch(brick, PORT_3) #self.sound = Sound(brick, PORT_2) #self.light = Light(brick, PORT_3) self.ultrasonic = Ultrasonic(brick, PORT_4)
# coding=utf-8 # Больше информации и пример работы: http://mic-dm.blogspot.com/2012/07/blog-post.html. from time import sleep import nxt from nxt.locator import find_one_brick from nxt.sensor.generic import Touch # Определяем кирпич, мотор и кнопку: brick = find_one_brick() motor = nxt.Motor(brick, nxt.PORT_B) sensor = Touch(brick, nxt.PORT_1) # "Мотор запаркован" у нас будет означать, что # кочерга мотора находится в нижнем положении: is_parked = False while True: if sensor.is_pressed(): # Если кнопка нажата, ждем недолго и крутим мотор, # чтобы освободить кнопку: sleep(1) motor.turn(-20, 40, False) is_parked = False elif not is_parked: # Если кнопка отжата, но мотор не запаркован, # паркуем: motor.turn(20, 40, False) is_parked = True sleep(0.1)
class Robot(object): r'''A high-level controller for the Alpha Rex model. This class implements methods for the most obvious actions performable by Alpha Rex, such as walk, wave its arms, and retrieve sensor samples. Additionally, it also allows direct access to the robot's components through public attributes. ''' def __init__(self, brick='NXT'): r'''Creates a new Alpha Rex controller. brick Either an nxt.brick.Brick object, or an NXT brick's name as a string. If omitted, a Brick named 'NXT' is looked up. ''' if isinstance(brick, basestring): brick = find_one_brick(name=brick) self.brick = brick self.leftMotor = Motor(brick, PORT_B) self.rightMotor = Motor(brick, PORT_C) self.motors = [self.leftMotor, self.rightMotor] self.touch = Touch(brick, PORT_3) #self.sound = Sound(brick, PORT_2) #self.light = Light(brick, PORT_3) self.ultrasonic = Ultrasonic(brick, PORT_4) def WarningNoise(self): self.brick.play_tone_and_wait(FREQ_E, 100) self.brick.play_tone_and_wait(FREQ_D, 100) self.brick.play_tone_and_wait(FREQ_C, 100) def OkNoise(self): self.brick.play_tone_and_wait(FREQ_C, 100) self.brick.play_tone_and_wait(FREQ_D, 100) self.brick.play_tone_and_wait(FREQ_E, 100) def StartWalk(self, power): for motor in self.motors: motor.run(power=power) def StopWalk(self): for motor in self.motors: motor.idle() def walk(self, secs, power=FORTH): self.StartWalk(power) sleep(secs) self.StopWalk() def IsButtonPressed(self): r'''Reads the Touch sensor's output. ''' return self.touch.get_sample() def turn(self, direction, degrees): if (direction == RobotMode.Left): self.leftMotor.turn(-100, degrees) self.rightMotor.turn(100, degrees) else: self.rightMotor.turn(-100, degrees) self.leftMotor.turn(100, degrees) def getDistanceFromObstacle(self): return self.ultrasonic.get_sample()