def main(self, speed: float = 1000): self.medium_motor.run_time( speed=-200, # deg/s time=1000, # ms then=Stop.HOLD, wait=True) run_parallel(self.keep_driving_by_ir_beacon, self.hammer_by_ir_beacon)
def main(self): self.screen.load_image(ImageFile.EVIL) run_parallel( self.be_noisy_to_people, self.sting_by_ir_beacon, self.pinch_if_touched, self.keep_driving_by_ir_beacon)
def main( self, driving_speed: float = 1000 # mm/s ): self.screen.load_image(ImageFile.TARGET) run_parallel(self.keep_driving_by_ir_beacon, self.blast_bazooka_whenever_touched)
def main(self, speed: float = 1000): self.grip_motor.run_time(speed=-500, time=1000, then=Stop.BRAKE, wait=True) run_parallel(self.grip_or_release_by_ir_beacon, self.keep_driving_by_ir_beacon)
def main( self, driving_speed: float = 1000 # mm/s ): self.screen.load_image(ImageFile.TARGET) run_parallel( self.keep_driving_by_ir_beacon, # FIXME: following thread seems to fail to run self.dance_whenever_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.keep_detecting_objects_by_ir_sensor, self.blast_bazooka_whenever_touched)
def main(self, speed: float = 1000): run_parallel( self.say_when_touched, self.spin_fan, self.keep_driving_by_ir_beacon)
TOUCH_SENSOR = TouchSensor(port=Port.S1) IR_SENSOR = InfraredSensor(port=Port.S4) MOTOR = Motor(port=Port.A) def touch_to_turn_motor_clockwise(): while True: if TOUCH_SENSOR.pressed(): MOTOR.run_time( speed=1000, # deg/s time=1000, # ms then=Stop.HOLD, wait=True) def press_any_ir_remote_button_to_turn_motor_counterclockwise(): while True: if IR_SENSOR.buttons(channel=1): MOTOR.run_time( speed=-1000, # deg/s time=1000, # ms then=Stop.HOLD, wait=True) run_parallel(touch_to_turn_motor_clockwise, press_any_ir_remote_button_to_turn_motor_counterclockwise) # observation: both threads run successfully WITH mutual blocking # i.e. 1 thread CANNOT interrupt/reverse the other thread's Motor movement mid-stream
def main(self): self.speaker.play_file(file=SoundFile.YES) run_parallel(self.scan_colors, self.make_noise_when_touched, self.throw_by_ir_beacon, self.keep_driving_by_ir_beacon)
#!/usr/bin/env pybricks-micropython from pybricks.experimental import run_parallel from dinor3x_pybricks import Dinor3x DINOR3X = Dinor3x() DINOR3X.calibrate_legs() DINOR3X.close_mouth() while True: # recalibrate legs so that the legs don't get too tired DINOR3X.calibrate_legs() DINOR3X.walk_until_blocked() # FIXME: TypeError: unsupported type for __hash__: 'bound_method' run_parallel(DINOR3X.roar, DINOR3X.run_away)
def main(self): run_parallel(self.keep_driving_by_ir_beacon, self.back_whenever_touched)
def main(self, speed: float = 1000): self.screen.load_image(ImageFile.PINCHED_MIDDLE) run_parallel(self.keep_driving_by_ir_beacon, self.move_when_touched, self.move_when_see_smothing, self.drill)
def task2(): wait(500) return "OK2" def task3(): # Unhandled Exception should interrupt all other tasks raise Exception("oops") def task4(): # Unhandled BaseException does not interrupt other tasks raise SystemExit result = run_parallel(task1, task2) print(repr(result[task1])) print(repr(result[task2])) try: run_parallel(task1, task2, task3) except RuntimeError as ex: print(ex.args[0]) # message print(repr(ex.args[1][task1])) # sometimes task2 finishes before being interrupted # print(repr(ex.args[1][task2])) print(repr(ex.args[1][task3])) result = run_parallel(task1, task2, task4) print(repr(result[task1])) print(repr(result[task2]))
#!/usr/bin/env pybricks-micropython from pybricks.ev3devices import TouchSensor, Motor from pybricks.parameters import Port, Stop from pybricks.experimental import run_parallel TOUCH_SENSOR = TouchSensor(port=Port.S1) MOTOR = Motor(port=Port.A) def motor_on_when_touched(): while True: if TOUCH_SENSOR.pressed(): MOTOR.run_time( speed=1000, # deg/s time=1000, # ms then=Stop.COAST, wait=True) def do_nothing(): while True: pass run_parallel(motor_on_when_touched, do_nothing)
#!/usr/bin/env pybricks-micropython from pybricks.hubs import EV3Brick from pybricks.parameters import Color from pybricks.tools import wait, StopWatch from pybricks.experimental import run_parallel # This program requires LEGO EV3 MicroPython v2.0 or higher. ev3 = EV3Brick() ev3.speaker.set_volume(30, 'PCM') watch = StopWatch() def task_screen(): idx = 0 while True: ev3.screen.load_image('pic/frame%d.png' % idx) curms = watch.time() nidx = int(curms * 15 / 1000) idx = nidx + 1 waitms = int(idx * 1000 / 15 - curms) wait(waitms) if idx >= 3284: break return def task_speaker(): ev3.speaker.play_file('BadApple.wav') return run_parallel(task_screen, task_speaker)
def main(self, speed: float = 1000): run_parallel( self.bite_by_ir_beacon, self.bite_if_touched, self.run_away_if_chased, self.keep_driving_by_ir_beacon)
def main(self): run_parallel(self.keep_driving_by_ir_beacon, self.grip_or_release_claw_by_ir_beacon)
def main(self, speed: float = 1000): run_parallel( self.spin_blade_by_ir_beacon, self.keep_driving_by_ir_beacon)
MEDIUM_MOTOR.run_time( speed=-100, time=1000, then=Stop.COAST, wait=True) sleep(1) def scare_people(): while True: if IR_SENSOR.distance() < 30: LARGE_MOTOR.run_time( speed=1000, time=1000, then=Stop.COAST, wait=True) else: LARGE_MOTOR.run_time( speed=-300, time=1000, then=Stop.COAST, wait=True) run_parallel( scare_people, rattle)
else: if time() % 3 < 1.5: DRIVE_BASE.drive( speed=100, # degrees per second turn_rate=-30 # degrees per second ) else: DRIVE_BASE.drive( speed=100, # degrees per second turn_rate=30 # degrees per second ) BRICK.screen.load_image(ImageFile.AWAKE) def laugh_whenever_touched(): while True: if TOUCH_SENSOR.pressed(): BRICK.speaker.play_file(file=SoundFile.LAUGHING_2) MEDIUM_MOTOR.run_angle( speed=1000, # degrees per second rotation_angle=6 * 360, # degrees then=Stop.HOLD, wait=True) run_parallel(run_away_whenever_dark, laugh_whenever_touched)
#!/usr/bin/env pybricks-micropython from pybricks.experimental import run_parallel from kraz3 import Kraz3 kraz3 = Kraz3() run_parallel(kraz3.keep_driving_by_ir_beacon, kraz3.kungfu_manoeuvre_whenever_touched_or_remote_controlled, kraz3.keep_reacting_to_colors)
def main(self): self.screen.load_image(ImageFile.PINCHED_MIDDLE) run_parallel(self.keep_driving_by_ir_beacon, self.blast_bazooka_by_ir_beacon)
#!/usr/bin/env pybricks-micropython from bobb3e import Bobb3e from pybricks.experimental import run_parallel bobb3e = Bobb3e() bobb3e.ev3_brick.screen.print('BOBB3E') run_parallel(bobb3e.drive_or_operate_forks_by_ir_beacon, bobb3e.sound_alarm_whenever_reversing)