class CuriosityRov3r(IRBeaconRemoteControlledTank):
    def __init__(
            self,
            left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C,
            medium_motor_port: str = OUTPUT_A,
            touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3,
            ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1):
        super().__init__(
            left_motor_port=left_motor_port, right_motor_port=right_motor_port,
            ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel)
            
        self.medium_motor = MediumMotor(address=medium_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.ir_sensor = InfraredSensor(address=ir_sensor_port)
        self.ir_beacon_channel = ir_beacon_channel

        self.dis = Display()
        self.noise = Sound()

    
    def spin_fan(self, speed: float = 100):
        if self.color_sensor.reflected_light_intensity > 20:
            self.medium_motor.on(
                speed=speed,
                brake=False,
                block=False)

        else:
            self.medium_motor.off(brake=True)
            

    def say_when_touched(self):
        if self.touch_sensor.is_pressed:
            self.dis.image_filename(
                filename='/home/robot/image/Angry.bmp',
                clear_screen=True)
            self.dis.update()

            self.noise.play_file(
                wav_file='/home/robot/sound/No.wav',
                volume=100,
                play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

            self.medium_motor.on_for_seconds(
                speed=-50,
                seconds=3,
                brake=True,
                block=True)


    def main(self, speed: float = 100):
        while True:
            self.drive_once_by_ir_beacon(speed=speed)

            self.say_when_touched()

            self.spin_fan(speed=speed)
Esempio n. 2
0
class Ev3rstorm(IRBeaconRemoteControlledTank):
    def __init__(
            self,
            left_foot_motor_port: str = OUTPUT_B, right_foot_motor_port: str = OUTPUT_C,
            bazooka_blast_motor_port: str = OUTPUT_A,
            touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3,
            ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1):
        super().__init__(
            left_motor_port=left_foot_motor_port, right_motor_port=right_foot_motor_port, motor_class=LargeMotor,
            ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel)

        self.bazooka_blast_motor = MediumMotor(address=bazooka_blast_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.screen = Display()
        self.speaker = Sound()


    def blast_bazooka_if_touched(self):
        if self.touch_sensor.is_pressed:
            if self.color_sensor.ambient_light_intensity < 5:   # 15 not dark enough
                self.speaker.play_file(
                    wav_file='/home/robot/sound/Up.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.bazooka_blast_motor.on_for_rotations(
                    speed=100,
                    rotations=-3,
                    brake=True,
                    block=True)

            else:
                self.speaker.play_file(
                    wav_file='/home/robot/sound/Down.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.bazooka_blast_motor.on_for_rotations(
                    speed=100,
                    rotations=3,
                    brake=True,
                    block=True)

            self.touch_sensor.wait_for_released()
 
    
    def main(self, driving_speed: float = 100):
        self.screen.image_filename(
            filename='/home/robot/image/Target.bmp',
            clear_screen=True)
        self.screen.update()
    
        while True:
            self.drive_once_by_ir_beacon(speed=driving_speed)
            
            self.blast_bazooka_if_touched()
class Ev3rstorm(RemoteControlledTank):
    def __init__(self,
                 left_foot_motor_port: str = OUTPUT_B,
                 right_foot_motor_port: str = OUTPUT_C,
                 bazooka_blast_motor_port: str = OUTPUT_A,
                 touch_sensor_port: str = INPUT_1,
                 color_sensor_port: str = INPUT_3,
                 ir_beacon_channel: int = 1):
        super().__init__(left_motor_port=left_foot_motor_port,
                         right_motor_port=right_foot_motor_port,
                         polarity=Motor.POLARITY_NORMAL,
                         speed=1000,
                         channel=ir_beacon_channel)

        self.bazooka_blast_motor = MediumMotor(
            address=bazooka_blast_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.screen = Display()
        self.speaker = Sound()

    def blast_bazooka_whenever_touched(self):
        while True:
            if self.touch_sensor.is_pressed:
                if self.color_sensor.ambient_light_intensity < 5:  # 15 not dark enough
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Up.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                              rotations=-3,
                                                              brake=True,
                                                              block=True)

                else:
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Down.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                              rotations=3,
                                                              brake=True,
                                                              block=True)

                self.touch_sensor.wait_for_released()

    def main(self):
        self.screen.image_filename(filename='/home/robot/image/Target.bmp',
                                   clear_screen=True)
        self.screen.update()

        Thread(target=self.blast_bazooka_whenever_touched, daemon=True).start()

        super().main()  # RemoteControlledTank.main()
Esempio n. 4
0
class Ev3rstorm:
    def __init__(self,
                 left_foot_motor_port: str = OUTPUT_B,
                 right_foot_motor_port: str = OUTPUT_C,
                 bazooka_blast_motor_port: str = OUTPUT_A,
                 touch_sensor_port: str = INPUT_1,
                 color_sensor_port: str = INPUT_3,
                 ir_sensor_port: str = INPUT_4,
                 ir_beacon_channel: int = 1):
        self.tank_driver = MoveTank(left_motor_port=left_foot_motor_port,
                                    right_motor_port=right_foot_motor_port,
                                    motor_class=LargeMotor)

        self.bazooka_blast_motor = MediumMotor(
            address=bazooka_blast_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.ir_sensor = InfraredSensor(address=ir_sensor_port)
        self.ir_beacon_channel = ir_beacon_channel

        self.leds = Leds()
        self.speaker = Sound()
        self.screen = Display()

    def drive_once_by_ir_beacon(self, speed: float = 100):
        # forward
        if self.ir_sensor.top_left(
                channel=self.ir_beacon_channel) and self.ir_sensor.top_right(
                    channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=speed, right_speed=speed)

        # backward
        elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel
                                        ) and self.ir_sensor.bottom_right(
                                            channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=-speed, right_speed=-speed)

        # turn left on the spot
        elif self.ir_sensor.top_left(channel=self.ir_beacon_channel
                                     ) and self.ir_sensor.bottom_right(
                                         channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=-speed, right_speed=speed)

        # turn right on the spot
        elif self.ir_sensor.top_right(
                channel=self.ir_beacon_channel) and self.ir_sensor.bottom_left(
                    channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=speed, right_speed=-speed)

        # turn left forward
        elif self.ir_sensor.top_left(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=0, right_speed=speed)

        # turn right forward
        elif self.ir_sensor.top_right(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=speed, right_speed=0)

        # turn left backward
        elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=0, right_speed=-speed)

        # turn right backward
        elif self.ir_sensor.bottom_right(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=-speed, right_speed=0)

        # otherwise stop
        else:
            self.tank_driver.off(brake=False)

    def dance_if_ir_beacon_pressed(self):
        while self.ir_sensor.beacon(channel=self.ir_beacon_channel):
            self.tank_driver.on_for_seconds(left_speed=randint(-100, 100),
                                            right_speed=randint(-100, 100),
                                            seconds=1,
                                            brake=False,
                                            block=True)

    def detect_object_by_ir_sensor(self):
        if self.ir_sensor.proximity < 25:
            self.leds.animate_police_lights(color1=Leds.ORANGE,
                                            color2=Leds.RED,
                                            group1=Leds.LEFT,
                                            group2=Leds.RIGHT,
                                            sleeptime=0.5,
                                            duration=5,
                                            block=False)

            self.speaker.play_file(wav_file='/home/robot/sound/Object.wav',
                                   volume=100,
                                   play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

            self.speaker.play_file(wav_file='/home/robot/sound/Detected.wav',
                                   volume=100,
                                   play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

            self.speaker.play_file(
                wav_file='/home/robot/sound/Error alarm.wav',
                volume=100,
                play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

        else:
            self.leds.all_off()

    def blast_bazooka_if_touched(self):
        if self.touch_sensor.is_pressed:
            if self.color_sensor.ambient_light_intensity < 5:  # 15 not dark enough
                self.speaker.play_file(wav_file='/home/robot/sound/Up.wav',
                                       volume=100,
                                       play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                          rotations=-3,
                                                          brake=True,
                                                          block=True)

                self.speaker.play_file(
                    wav_file='/home/robot/sound/Laughing 1.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

            else:
                self.speaker.play_file(wav_file='/home/robot/sound/Down.wav',
                                       volume=100,
                                       play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                          rotations=3,
                                                          brake=True,
                                                          block=True)

                self.speaker.play_file(
                    wav_file='/home/robot/sound/Laughing 2.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

            self.touch_sensor.wait_for_released()

    def main(self, driving_speed: float = 100):
        self.screen.image_filename(filename='/home/robot/image/Target.bmp',
                                   clear_screen=True)
        self.screen.update()

        while True:
            self.drive_once_by_ir_beacon(speed=driving_speed)

            self.dance_if_ir_beacon_pressed()

            # DON'T use IR Sensor in 2 different modes in the same program / loop
            # - https://github.com/pybricks/support/issues/62
            # - https://github.com/ev3dev/ev3dev/issues/1401
            # self.detect_object_by_ir_sensor()

            self.blast_bazooka_if_touched()
Esempio n. 5
0
#!/usr/bin/env python3
# (Display not yet working in MicroPython as of 2020)

from ev3dev2.motor import LargeMotor, OUTPUT_B, OUTPUT_C, MoveSteering, MoveTank
from ev3dev2.display import Display

TANK_DRIVER = MoveTank(left_motor_port=OUTPUT_B,
                       right_motor_port=OUTPUT_C,
                       motor_class=LargeMotor)
STEER_DRIVER = MoveSteering(left_motor_port=OUTPUT_B,
                            right_motor_port=OUTPUT_C,
                            motor_class=LargeMotor)

SCREEN = Display()

SCREEN.image_filename(filename='/home/robot/image/Neutral.bmp',
                      clear_screen=True)
SCREEN.update()

TANK_DRIVER.on_for_rotations(left_speed=75,
                             right_speed=75,
                             rotations=5,
                             brake=True,
                             block=True)

SCREEN.image_filename(filename='/home/robot/image/Middle left.bmp',
                      clear_screen=True)
SCREEN.update()

STEER_DRIVER.on_for_rotations(steering=50,
                              speed=75,
                              rotations=5,
Esempio n. 6
0
#!/usr/bin/env python3
# (MicroPython does not yet support Display as of 2020)

from ev3dev2.motor import LargeMotor, MediumMotor, MoveTank, OUTPUT_B, OUTPUT_C, OUTPUT_A
from ev3dev2.display import Display
from ev3dev2.sound import Sound

MEDIUM_MOTOR = MediumMotor(address=OUTPUT_A)
TANK_DRIVER = MoveTank(left_motor_port=OUTPUT_B,
                       right_motor_port=OUTPUT_C,
                       motor_class=LargeMotor)

SCREEN = Display()
SPEAKER = Sound()

SCREEN.image_filename(filename='/home/robot/image/Pinch left.bmp',
                      clear_screen=True)
SCREEN.update()

TANK_DRIVER.on_for_rotations(left_speed=75,
                             right_speed=75,
                             rotations=2,
                             brake=True,
                             block=True)

MEDIUM_MOTOR.on_for_rotations(speed=75, rotations=3, brake=True, block=True)

TANK_DRIVER.on_for_rotations(left_speed=-75,
                             right_speed=-75,
                             rotations=2,
                             brake=True,
                             block=True)
class Rov3r(IRBeaconRemoteControlledTank):
    def __init__(
            self,
            left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C,
            gear_motor_port: str = OUTPUT_A,
            touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3,
            ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1):
        super().__init__(
            left_motor_port=left_motor_port, right_motor_port=right_motor_port,
            ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel)

        self.gear_motor = MediumMotor(address=gear_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.ir_sensor = InfraredSensor(address=ir_sensor_port)
        self.ir_beacon_channel = ir_beacon_channel

        self.speaker = Sound()
        self.dis = Display(desc='Display')


    def spin_gears(self, speed: float = 100):
        while True:
            if self.ir_sensor.beacon(channel=self.ir_beacon_channel):
                self.gear_motor.on(
                    speed=speed,
                    block=False,
                    brake=False)

            else:
                self.gear_motor.off(brake=True)


    def change_screen_when_touched(self):
        while True:
            if self.touch_sensor.is_pressed:
                self.dis.image_filename(
                    filename='/home/robot/image/Angry.bmp',
                    clear_screen=True)
                self.dis.update()

            else:
                self.dis.image_filename(
                    filename='/home/robot/image/Fire.bmp',
                    clear_screen=True)
                self.dis.update()


    def make_noise_when_seeing_black(self):
        while True:
            if self.color_sensor.color == ColorSensor.COLOR_BLACK:
                self.speaker.play_file(
                    wav_file='/home/robot/sound/Ouch.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)


    def main(self):
        self.speaker.play_file(
            wav_file='/home/robot/sound/Yes.wav',
            volume=100,
            play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

        Thread(target=self.make_noise_when_seeing_black,
               daemon=True).start()    

        Thread(target=self.spin_gears,
               daemon=True).start()    

        Thread(target=self.change_screen_when_touched,
               daemon=True).start()

        self.keep_driving_by_ir_beacon(speed=100)
Esempio n. 8
0
#!/usr/bin/env python3
# (Display not yet working in MicroPython as of 2020)


from ev3dev2.display import Display
from ev3dev2.led import Leds

from time import sleep


SCREEN = Display()
LEDS = Leds()


SCREEN.image_filename(
    filename='/home/robot/image/Hurt.bmp',
    clear_screen=True)
SCREEN.update()

sleep(0.5)

SCREEN.image_filename(
    filename='/home/robot/image/Neutral.bmp',
    clear_screen=True)
SCREEN.update()

LEDS.animate_flash(
    color=Leds.RED,
    groups=(Leds.LEFT, Leds.RIGHT),
    sleeptime=0.5,
    duration=5,
class Sweep3r(IRBeaconRemoteControlledTank):
    def __init__(
            self,
            left_foot_motor_port: str = OUTPUT_B, right_foot_motor_port: str = OUTPUT_C,
            medium_motor_port: str = OUTPUT_A,
            touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3,
            ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1):
        super().__init__(
            left_motor_port=left_foot_motor_port, right_motor_port=right_foot_motor_port,
            ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel)

        self.medium_motor = MediumMotor(address=medium_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.ir_sensor = InfraredSensor(address=ir_sensor_port)
        self.ir_beacon_channel = ir_beacon_channel

        self.screen = Display()
        self.speaker = Sound()


    def drill(self, speed: float = 100):
        while True:
            if self.ir_sensor.beacon(channel=self.ir_beacon_channel):
                self.medium_motor.on_for_rotations(
                    speed=speed,
                    rotations=2,
                    block=True,
                    brake=True)


    def move_when_touched(self):
        while True:    
            if self.touch_sensor.is_pressed:
                self.tank_driver.on_for_seconds(
                    left_speed=100,
                    right_speed=-100,
                    seconds=2,
                    brake=True,
                    block=True)


    def move_when_see_smothing(self):
        while True:
            if self.color_sensor.reflected_light_intensity > 30:
                self.tank_driver.on_for_seconds(
                    left_speed=-100,
                    right_speed=100,
                    seconds=2,
                    brake=True,
                    block=True)

        
    def main(self, speed: float = 100):
        self.screen.image_filename(
            filename='/home/robot/image/Neutral.bmp',
            clear_screen=True)
        self.screen.update()

        Process(target=self.move_when_touched,
                daemon=True).start() 

        Process(target=self.move_when_see_smothing,
                daemon=True).start()

        Process(target=self.drill,
                daemon=True).start()
       
        self.keep_driving_by_ir_beacon(speed=speed)
Esempio n. 10
0
class Ev3rstorm:
    def __init__(self,
                 left_foot_motor_port: str = OUTPUT_B,
                 right_foot_motor_port: str = OUTPUT_C,
                 bazooka_blast_motor_port: str = OUTPUT_A,
                 touch_sensor_port: str = INPUT_1,
                 color_sensor_port: str = INPUT_3,
                 ir_sensor_port: str = INPUT_4,
                 ir_beacon_channel: int = 1):
        self.tank_driver = MoveTank(left_motor_port=left_foot_motor_port,
                                    right_motor_port=right_foot_motor_port,
                                    motor_class=LargeMotor)

        self.bazooka_blast_motor = MediumMotor(
            address=bazooka_blast_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.ir_sensor = InfraredSensor(address=ir_sensor_port)
        self.ir_beacon_channel = ir_beacon_channel

        self.screen = Display()
        self.speaker = Sound()

    def drive_once_by_ir_beacon(self, speed: float = 100):
        # forward
        if self.ir_sensor.top_left(
                channel=self.ir_beacon_channel) and self.ir_sensor.top_right(
                    channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=speed, right_speed=speed)

        # backward
        elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel
                                        ) and self.ir_sensor.bottom_right(
                                            channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=-speed, right_speed=-speed)

        # turn left on the spot
        elif self.ir_sensor.top_left(channel=self.ir_beacon_channel
                                     ) and self.ir_sensor.bottom_right(
                                         channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=-speed, right_speed=speed)

        # turn right on the spot
        elif self.ir_sensor.top_right(
                channel=self.ir_beacon_channel) and self.ir_sensor.bottom_left(
                    channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=speed, right_speed=-speed)

        # turn left forward
        elif self.ir_sensor.top_left(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=0, right_speed=speed)

        # turn right forward
        elif self.ir_sensor.top_right(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=speed, right_speed=0)

        # turn left backward
        elif self.ir_sensor.bottom_left(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=0, right_speed=-speed)

        # turn right backward
        elif self.ir_sensor.bottom_right(channel=self.ir_beacon_channel):
            self.tank_driver.on(left_speed=-speed, right_speed=0)

        # otherwise stop
        else:
            self.tank_driver.off(brake=False)

    def keep_driving_by_ir_beacon(self, speed: int = 100):
        while True:
            self.drive_once_by_ir_beacon(speed=speed)

    def blast_bazooka_whenever_touched(self):
        while True:
            if self.touch_sensor.is_pressed:
                if self.color_sensor.ambient_light_intensity < 5:  # 15 not dark enough
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Up.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                              rotations=-3,
                                                              brake=True,
                                                              block=True)

                else:
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Down.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                              rotations=3,
                                                              brake=True,
                                                              block=True)

                self.touch_sensor.wait_for_released()

    def main(self, driving_speed: float = 100):
        self.screen.image_filename(filename='/home/robot/image/Target.bmp',
                                   clear_screen=True)
        self.screen.update()

        Thread(target=self.blast_bazooka_whenever_touched, daemon=True).start()

        self.keep_driving_by_ir_beacon(speed=driving_speed)
class Spik3r:
    def __init__(self,
                 sting_motor_port: str = OUTPUT_D,
                 go_motor_port: str = OUTPUT_B,
                 claw_motor_port: str = OUTPUT_A,
                 touch_sensor_port: str = INPUT_1,
                 color_sensor_port: str = INPUT_3,
                 ir_sensor_port: str = INPUT_4,
                 ir_beacon_channel: int = 1):
        self.sting_motor = LargeMotor(address=sting_motor_port)
        self.go_motor = LargeMotor(address=go_motor_port)
        self.claw_motor = MediumMotor(address=claw_motor_port)

        self.ir_sensor = InfraredSensor(address=ir_sensor_port)
        self.ir_beacon_channel = ir_beacon_channel

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.dis = Display()
        self.speaker = Sound()

    def sting_by_ir_beacon(self):
        while True:
            if self.ir_sensor.beacon(channel=self.ir_beacon_channel):
                self.sting_motor.on_for_degrees(speed=-75,
                                                degrees=220,
                                                brake=True,
                                                block=False)

                self.speaker.play_file(wav_file='/home/robot/sound/Blip 1.wav',
                                       volume=100,
                                       play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.sting_motor.on_for_seconds(speed=-100,
                                                seconds=1,
                                                brake=True,
                                                block=True)

                self.sting_motor.on_for_seconds(speed=100,
                                                seconds=1,
                                                brake=True,
                                                block=True)

            while self.ir_sensor.beacon(channel=self.ir_beacon_channel):
                pass

    def be_noisy_to_people(self):
        while True:
            if self.color_sensor.reflected_light_intensity > 30:
                for i in range(4):
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Blip 2.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

    def pinch_if_touched(self):
        while True:
            if self.touch_sensor.is_pressed:
                self.claw_motor.on_for_seconds(speed=50,
                                               seconds=1,
                                               brake=True,
                                               block=True)

                self.claw_motor.on_for_seconds(speed=-50,
                                               seconds=0.3,
                                               brake=True,
                                               block=True)

    def keep_driving_by_ir_beacon(self):
        while True:
            if self.ir_sensor.top_left(channel=self.ir_beacon_channel) and \
                    self.ir_sensor.top_right(channel=self.ir_beacon_channel):
                self.go_motor.on(speed=91, block=False, brake=False)

            elif self.ir_sensor.top_right(channel=self.ir_beacon_channel):
                self.go_motor.on(speed=-100, brake=False, block=False)

            else:
                self.go_motor.off(brake=True)

    def main(self):
        self.dis.image_filename(filename='/home/robot/image/Evil.bmp',
                                clear_screen=True)
        self.dis.update()

        # FIXME: .sting_by_ir_beacon stops responding after a while
        Process(target=self.be_noisy_to_people, daemon=True).start()

        Process(target=self.sting_by_ir_beacon, daemon=True).start()

        Process(target=self.pinch_if_touched, daemon=True).start()

        self.keep_driving_by_ir_beacon()
from ev3dev2.display import Display
from ev3dev2.led import Leds
from ev3dev2.sound import Sound

STEER_DRIVER = MoveSteering(left_motor_port=OUTPUT_B,
                            right_motor_port=OUTPUT_C,
                            motor_class=LargeMotor)

TOUCH_SENSOR = TouchSensor(address=INPUT_1)

LEDS = Leds()
SPEAKER = Sound()
SCREEN = Display()

while True:
    SCREEN.image_filename(filename='/home/robot/image/ZZZ.bmp',
                          clear_screen=True)
    SCREEN.update()

    LEDS.set_color(group=Leds.LEFT, color=Leds.ORANGE, pct=1)

    LEDS.set_color(group=Leds.RIGHT, color=Leds.ORANGE, pct=1)

    # TODO: parallel process/thread
    while not TOUCH_SENSOR.is_pressed:
        SPEAKER.play_file(wav_file='/home/robot/sound/Snoring.wav',
                          volume=100,
                          play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

    SCREEN.image_filename(filename='/home/robot/image/Winking.bmp',
                          clear_screen=True)
    SCREEN.update()
                       right_motor_port=OUTPUT_C,
                       motor_class=LargeMotor)
STEER_DRIVER = MoveSteering(left_motor_port=OUTPUT_B,
                            right_motor_port=OUTPUT_C,
                            motor_class=LargeMotor)

IR_SENSOR = InfraredSensor(address=INPUT_4)

SCREEN = Display()
SPEAKER = Sound()

MEDIUM_MOTOR.on_for_seconds(speed=-20, seconds=1, block=True, brake=True)

while True:
    if IR_SENSOR.proximity < 25:
        SCREEN.image_filename(filename='/home/robot/image/Pinch right.bmp',
                              clear_screen=True)
        SCREEN.update()

        STEER_DRIVER.on_for_degrees(steering=-100,
                                    speed=75,
                                    degrees=1000,
                                    brake=True,
                                    block=True)

        SCREEN.image_filename(filename='/home/robot/image/Angry.bmp',
                              clear_screen=True)
        SCREEN.update()

        MEDIUM_MOTOR.on_for_seconds(seconds=0.3,
                                    speed=100,
                                    block=True,
Esempio n. 14
0
class Ev3rstorm(IRBeaconRemoteControlledTank):
    def __init__(self,
                 left_foot_motor_port: str = OUTPUT_B,
                 right_foot_motor_port: str = OUTPUT_C,
                 bazooka_blast_motor_port: str = OUTPUT_A,
                 touch_sensor_port: str = INPUT_1,
                 color_sensor_port: str = INPUT_3,
                 ir_sensor_port: str = INPUT_4,
                 ir_beacon_channel: int = 1):
        super().__init__(left_motor_port=left_foot_motor_port,
                         right_motor_port=right_foot_motor_port,
                         motor_class=LargeMotor,
                         ir_sensor_port=ir_sensor_port,
                         ir_beacon_channel=ir_beacon_channel)

        self.bazooka_blast_motor = MediumMotor(
            address=bazooka_blast_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.leds = Leds()
        self.speaker = Sound()
        self.screen = Display()

    def dance_whenever_ir_beacon_pressed(self):
        while True:
            while self.ir_sensor.beacon(
                    channel=self.tank_drive_ir_beacon_channel):
                self.tank_driver.on_for_seconds(left_speed=randint(-100, 100),
                                                right_speed=randint(-100, 100),
                                                seconds=1,
                                                brake=False,
                                                block=True)

    def keep_detecting_objects_by_ir_sensor(self):
        while True:
            if self.ir_sensor.proximity < 25:
                self.leds.animate_police_lights(color1=Leds.ORANGE,
                                                color2=Leds.RED,
                                                group1=Leds.LEFT,
                                                group2=Leds.RIGHT,
                                                sleeptime=0.5,
                                                duration=5,
                                                block=False)

                self.speaker.play_file(wav_file='/home/robot/sound/Object.wav',
                                       volume=100,
                                       play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.speaker.play_file(
                    wav_file='/home/robot/sound/Detected.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.speaker.play_file(
                    wav_file='/home/robot/sound/Error alarm.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

            else:
                self.leds.all_off()

    def blast_bazooka_whenever_touched(self):
        while True:
            if self.touch_sensor.is_pressed:
                if self.color_sensor.ambient_light_intensity < 5:  # 15 not dark enough
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Up.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                              rotations=-3,
                                                              brake=True,
                                                              block=True)

                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Laughing 1.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                else:
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Down.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(speed=100,
                                                              rotations=3,
                                                              brake=True,
                                                              block=True)

                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Laughing 2.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.touch_sensor.wait_for_released()

    def main(self, driving_speed: float = 100):
        self.screen.image_filename(filename='/home/robot/image/Target.bmp',
                                   clear_screen=True)
        self.screen.update()

        Process(target=self.dance_whenever_ir_beacon_pressed,
                daemon=True).start()

        # DON'T use IR Sensor in 2 different modes in the same program / loop
        # - https://github.com/pybricks/support/issues/62
        # - https://github.com/ev3dev/ev3dev/issues/1401
        # Process(target=self.keep_detecting_objects_by_ir_sensor,
        #         daemon=True).start()

        Process(target=self.blast_bazooka_whenever_touched,
                daemon=True).start()

        self.keep_driving_by_ir_beacon(speed=driving_speed)
class Ev3rstorm(IRBeaconRemoteControlledTank):
    def __init__(
            self,
            left_foot_motor_port: str = OUTPUT_B, right_foot_motor_port: str = OUTPUT_C,
            bazooka_blast_motor_port: str = OUTPUT_A,
            touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3,
            ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1):
        super().__init__(
            left_motor_port=left_foot_motor_port, right_motor_port=right_foot_motor_port, motor_class=LargeMotor,
            ir_sensor_port=ir_sensor_port, ir_beacon_channel=ir_beacon_channel)

        self.bazooka_blast_motor = MediumMotor(address=bazooka_blast_motor_port)

        self.touch_sensor = TouchSensor(address=touch_sensor_port)
        self.color_sensor = ColorSensor(address=color_sensor_port)

        self.leds = Leds()
        self.speaker = Sound()
        self.screen = Display()

    
    def dance_whenever_ir_beacon_pressed(self):
        while True:
            while self.ir_sensor.beacon(channel=self.tank_drive_ir_beacon_channel):
                self.tank_driver.on_for_seconds(
                    left_speed=randint(-100, 100),
                    right_speed=randint(-100, 100),
                    seconds=1,
                    brake=False,
                    block=True)
                    

    def keep_detecting_objects_by_ir_sensor(self):
        while True:
            if self.ir_sensor.proximity < 25: 
                self.leds.animate_police_lights(
                    color1=Leds.ORANGE,
                    color2=Leds.RED,
                    group1=Leds.LEFT,
                    group2=Leds.RIGHT,
                    sleeptime=0.5,
                    duration=5,
                    block=False)
                
                self.speaker.play_file(
                    wav_file='/home/robot/sound/Object.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.speaker.play_file(                                  
                    wav_file='/home/robot/sound/Detected.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.speaker.play_file(
                    wav_file='/home/robot/sound/Error alarm.wav',
                    volume=100,
                    play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

            else:
                self.leds.all_off()


    def blast_bazooka_whenever_touched(self):
        while True:
            if self.touch_sensor.is_pressed:
                if self.color_sensor.ambient_light_intensity < 5:   # 15 not dark enough
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Up.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(
                        speed=100,
                        rotations=-3,
                        brake=True,
                        block=True)

                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Laughing 1.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                else:
                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Down.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                    self.bazooka_blast_motor.on_for_rotations(
                        speed=100,
                        rotations=3,
                        brake=True,
                        block=True)

                    self.speaker.play_file(
                        wav_file='/home/robot/sound/Laughing 2.wav',
                        volume=100,
                        play_type=Sound.PLAY_WAIT_FOR_COMPLETE)

                self.touch_sensor.wait_for_released()
        
    
    def main(self, driving_speed: float = 100):
        self.screen.image_filename(
            filename='/home/robot/image/Target.bmp',
            clear_screen=True)
        self.screen.update()

        # FIXME
        # Traceback (most recent call last):
        # File "/usr/lib/python3.5/threading.py", line 914, in _bootstrap_inner
        #   self.run()
        # File "/usr/lib/python3.5/threading.py", line 862, in run
        #   self._target(*self._args, **self._kwargs)
        # File "/home/robot/Ev3rstorm/Ev3rstorm-Super.EV3Dev2.Python3.Threading.py", line 170, in dance_whenever_ir_beacon_pressed
        #   while self.ir_sensor.beacon(channel=self.ir_beacon_channel):
        # File "/usr/lib/python3/dist-packages/ev3dev2/sensor/lego.py", line 909, in beacon
        #   return 'beacon' in self.buttons_pressed(channel)
        # File "/usr/lib/python3/dist-packages/ev3dev2/sensor/lego.py", line 919, in buttons_pressed
        #   return self._BUTTON_VALUES.get(self.value(channel), [])
        # File "/usr/lib/python3/dist-packages/ev3dev2/sensor/__init__.py", line 203, in value
        #   self._value[n], value = self.get_attr_int(self._value[n], 'value' + str(n))
        # File "/usr/lib/python3/dist-packages/ev3dev2/__init__.py", line 307, in get_attr_int
        #   return attribute, int(value)
        # ValueError: invalid literal for int() with base 10: ''
        Thread(target=self.dance_whenever_ir_beacon_pressed,
               daemon=True).start()

        # DON'T use IR Sensor in 2 different modes in the same program / loop
        # - https://github.com/pybricks/support/issues/62
        # - https://github.com/ev3dev/ev3dev/issues/1401
        # Thread(target=self.keep_detecting_objects_by_ir_sensor,
        #        daemon=True).start()

        Thread(target=self.blast_bazooka_whenever_touched,
               daemon=True).start()

        self.keep_driving_by_ir_beacon(speed=driving_speed)