From da2f8364b61b99e99638f401dbfc6f7d6691c347 Mon Sep 17 00:00:00 2001 From: Vinh Luong Date: Fri, 21 Aug 2020 20:32:07 -0700 Subject: [PATCH 01/10] add SPIK3R README --- robots/SPIK3R/README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 robots/SPIK3R/README.md diff --git a/robots/SPIK3R/README.md b/robots/SPIK3R/README.md new file mode 100644 index 0000000..a71134e --- /dev/null +++ b/robots/SPIK3R/README.md @@ -0,0 +1,12 @@ +# SPIK3R + +> This six-legged creature doesn’t just look like a scorpion, it also acts like one. It turns sharply, snaps with it’s crushing claw, and it’s lightning tail is ready to fire at anyone or anything that gets in its way. + +Control SPIK3R as follows: + +- Make SPIK3R move straight forward by pressing the IR Remote Control's two Up buttons at the same time +- Make SPIK3R turn right by pressing the IR Remote Control's Right Up button +- Make SPIK3R sting by pressing the IR Remote Control's Beacon button +- Make SPIKER pinch by pressing the Touch Sensor (please do connect one to enable this) + +The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/blt7dca5180ea66ea5e/31313_SPIK3R_2016.pdf). From 4b4a8a65a5b5d8540358b31f6fd461e0cc0c2ffa Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Fri, 21 Aug 2020 22:01:08 -0700 Subject: [PATCH 02/10] add Spik3r program --- robots/SPIK3R/spik3r.py | 93 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) create mode 100644 robots/SPIK3R/spik3r.py diff --git a/robots/SPIK3R/spik3r.py b/robots/SPIK3R/spik3r.py new file mode 100644 index 0000000..f79651c --- /dev/null +++ b/robots/SPIK3R/spik3r.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 + + +from ev3dev.ev3 import ( + Motor, LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_D, + TouchSensor, InfraredSensor, RemoteControl, INPUT_1, INPUT_4, + Sound +) + + +class Spik3r: + def __init__( + self, + claw_motor_port: str = OUTPUT_A, + move_motor_port: str = OUTPUT_B, + sting_motor_port: str = OUTPUT_D, + touch_sensor_port: str = INPUT_1, + ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): + self.claw_motor = MediumMotor(address=claw_motor_port) + self.move_motor = LargeMotor(address=move_motor_port) + self.sting_motor = LargeMotor(address=sting_motor_port) + + self.remote_control = RemoteControl(sensor=InfraredSensor(address=ir_sensor_port), + channel=ir_beacon_channel) + + self.touch_sensor = TouchSensor(address=touch_sensor_port) + + self.speaker = Sound() + + + def snap_claw_if_touched(self): + if self.touch_sensor.is_pressed: + self.claw_motor.run_timed( + speed_sp=500, + time_sp=1000, + stop_action=Motor.STOP_ACTION_HOLD) + self.claw_motor.wait_while(Motor.STATE_RUNNING) + + self.claw_motor.run_timed( + speed_sp=-500, + time_sp=300, + stop_action=Motor.STOP_ACTION_HOLD) + self.claw_motor.wait_while(Motor.STATE_RUNNING) + + + def move_by_ir_beacon(self): + if self.remote_control.red_up and self.remote_control.blue_up: + self.move_motor.run_forever(speed_sp=1000) + + elif self.remote_control.blue_up: + self.move_motor.run_forever(speed_sp=-1000) + + else: + self.move_motor.stop(stop_action=Motor.STOP_ACTION_COAST) + + + def sting_by_ir_beacon(self): + if self.remote_control.beacon: + self.sting_motor.run_to_rel_pos( + speed_sp=750, + position=-220, + stop_action=Motor.STOP_ACTION_HOLD) + self.sting_motor.wait_while(Motor.STATE_RUNNING) + + self.speaker.play(wav_file='/home/robot/sound/Blip 3.wav').wait() + + self.sting_motor.run_timed( + speed_sp=-1000, + time_sp=1000, + stop_action=Motor.STOP_ACTION_HOLD) + self.sting_motor.wait_while(Motor.STATE_RUNNING) + + self.sting_motor.run_timed( + speed_sp=1000, + time_sp=1000, + stop_action=Motor.STOP_ACTION_HOLD) + self.sting_motor.wait_while(Motor.STATE_RUNNING) + + while self.remote_control.beacon: + pass + + + def main(self): + while True: + self.snap_claw_if_touched() + self.move_by_ir_beacon() + self.sting_by_ir_beacon() + + +if __name__ == '__main__': + SPIK3R = Spik3r() + + SPIK3R.main() From c5d31d0ba48eb0fa8f9e4ac442b4aacec31a79fb Mon Sep 17 00:00:00 2001 From: Vinh Luong Date: Sun, 23 Aug 2020 10:35:29 -0700 Subject: [PATCH 03/10] add SPIK3R sound file --- robots/SPIK3R/Blip 3.wav | Bin 0 -> 13292 bytes robots/SPIK3R/spik3r.py | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 robots/SPIK3R/Blip 3.wav diff --git a/robots/SPIK3R/Blip 3.wav b/robots/SPIK3R/Blip 3.wav new file mode 100644 index 0000000000000000000000000000000000000000..2678a34e697ca856b9963a7753a45d5c2a1d81a8 GIT binary patch literal 13292 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 Date: Sun, 23 Aug 2020 10:59:24 -0700 Subject: [PATCH 04/10] add Gripp3r program --- robots/GRIPP3R/Air release.wav | Bin 0 -> 17324 bytes robots/GRIPP3R/Airbrake.wav | Bin 0 -> 14444 bytes robots/GRIPP3R/gripp3r.py | 73 +++++++++++++++++++++++++++++++++ 3 files changed, 73 insertions(+) create mode 100644 robots/GRIPP3R/Air release.wav create mode 100644 robots/GRIPP3R/Airbrake.wav create mode 100644 robots/GRIPP3R/gripp3r.py diff --git a/robots/GRIPP3R/Air release.wav b/robots/GRIPP3R/Air release.wav new file mode 100644 index 0000000000000000000000000000000000000000..35e3e553e396d1138906b5afb6c02e98c1ccf71a GIT binary patch literal 17324 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 literal 0 HcmV?d00001 diff --git a/robots/GRIPP3R/gripp3r.py b/robots/GRIPP3R/gripp3r.py new file mode 100644 index 0000000..b56aef4 --- /dev/null +++ b/robots/GRIPP3R/gripp3r.py @@ -0,0 +1,73 @@ +#!/usr/bin/env python3 + + +from ev3dev.ev3 import ( + Motor, LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, + TouchSensor, InfraredSensor, RemoteControl, INPUT_1, INPUT_4, + Sound +) +from ev3dev.helper import RemoteControlledTank + +from multiprocessing import Process + + +class Gripp3r(RemoteControlledTank): + def __init__( + self, + grip_motor_port: str = OUTPUT_A, + left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, + touch_sensor_port: str = INPUT_1, + ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): + super().__init__( + left_motor=left_motor_port, right_motor=right_motor_port, + polarity='normal') + + self.grip_motor = MediumMotor(address=grip_motor_port) + + self.touch_sensor = TouchSensor(address=touch_sensor_port) + + self.speaker = Sound() + + + def grip_or_release_by_ir_beacon(self): + while True: + if self.remote.beacon: + if self.touch_sensor.is_pressed: + self.speaker.play(wav_file='Air release.wav') + + self.grip_motor.run_timed( + speed_sp=500, + time_sp=1000, + stop_action=Motor.STOP_ACTION_BRAKE) + self.grip_motor.wait_while(Motor.STATE_RUNNING) + + else: + self.speaker.play(wav_file='Airbrake.wav') + + self.grip_motor.run_forever(speed_sp=-500) + + while not self.touch_sensor.is_pressed: + pass + + self.grip_motor.stop(stop_action=Motor.STOP_ACTION_BRAKE) + + while self.remote.beacon: + pass + + + def main(self): + self.grip_motor.run_timed( + speed_sp=-500, + time_sp=1000, + stop_action=Motor.STOP_ACTION_BRAKE) + self.grip_motor.wait_while(Motor.STATE_RUNNING) + + Process(target=self.grip_or_release_by_ir_beacon, + daemon=True).start() + + super().main() + + +if __name__ == '__main__': + GRIPP3R = Gripp3r() + GRIPP3R.main() From 0b5967aa945f0dad5d52117a4c0911d47e905988 Mon Sep 17 00:00:00 2001 From: Vinh Luong Date: Mon, 31 Aug 2020 20:38:44 -0700 Subject: [PATCH 05/10] remove blank spaces in GRIPP3R & SPIK3R programs --- robots/GRIPP3R/gripp3r.py | 10 ++++------ robots/SPIK3R/spik3r.py | 13 +++++-------- 2 files changed, 9 insertions(+), 14 deletions(-) diff --git a/robots/GRIPP3R/gripp3r.py b/robots/GRIPP3R/gripp3r.py index b56aef4..ac34c98 100644 --- a/robots/GRIPP3R/gripp3r.py +++ b/robots/GRIPP3R/gripp3r.py @@ -2,8 +2,8 @@ from ev3dev.ev3 import ( - Motor, LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, - TouchSensor, InfraredSensor, RemoteControl, INPUT_1, INPUT_4, + Motor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, + TouchSensor, INPUT_1, INPUT_4, Sound ) from ev3dev.helper import RemoteControlledTank @@ -28,7 +28,6 @@ def __init__( self.speaker = Sound() - def grip_or_release_by_ir_beacon(self): while True: if self.remote.beacon: @@ -48,13 +47,12 @@ def grip_or_release_by_ir_beacon(self): while not self.touch_sensor.is_pressed: pass - + self.grip_motor.stop(stop_action=Motor.STOP_ACTION_BRAKE) while self.remote.beacon: pass - def main(self): self.grip_motor.run_timed( speed_sp=-500, @@ -66,7 +64,7 @@ def main(self): daemon=True).start() super().main() - + if __name__ == '__main__': GRIPP3R = Gripp3r() diff --git a/robots/SPIK3R/spik3r.py b/robots/SPIK3R/spik3r.py index 42afba6..3d87a43 100644 --- a/robots/SPIK3R/spik3r.py +++ b/robots/SPIK3R/spik3r.py @@ -1,7 +1,7 @@ #!/usr/bin/env python3 -from ev3dev.ev3 import ( +from ev3dev.ev3 import ( Motor, LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_D, TouchSensor, InfraredSensor, RemoteControl, INPUT_1, INPUT_4, Sound @@ -20,14 +20,15 @@ def __init__( self.move_motor = LargeMotor(address=move_motor_port) self.sting_motor = LargeMotor(address=sting_motor_port) - self.remote_control = RemoteControl(sensor=InfraredSensor(address=ir_sensor_port), - channel=ir_beacon_channel) + self.remote_control = \ + RemoteControl( + sensor=InfraredSensor(address=ir_sensor_port), + channel=ir_beacon_channel) self.touch_sensor = TouchSensor(address=touch_sensor_port) self.speaker = Sound() - def snap_claw_if_touched(self): if self.touch_sensor.is_pressed: self.claw_motor.run_timed( @@ -42,7 +43,6 @@ def snap_claw_if_touched(self): stop_action=Motor.STOP_ACTION_HOLD) self.claw_motor.wait_while(Motor.STATE_RUNNING) - def move_by_ir_beacon(self): if self.remote_control.red_up and self.remote_control.blue_up: self.move_motor.run_forever(speed_sp=1000) @@ -53,7 +53,6 @@ def move_by_ir_beacon(self): else: self.move_motor.stop(stop_action=Motor.STOP_ACTION_COAST) - def sting_by_ir_beacon(self): if self.remote_control.beacon: self.sting_motor.run_to_rel_pos( @@ -79,7 +78,6 @@ def sting_by_ir_beacon(self): while self.remote_control.beacon: pass - def main(self): while True: self.snap_claw_if_touched() @@ -89,5 +87,4 @@ def main(self): if __name__ == '__main__': SPIK3R = Spik3r() - SPIK3R.main() From 570982ce34b269aa73bc072e96d8a75251a117d3 Mon Sep 17 00:00:00 2001 From: Vinh Luong Date: Mon, 31 Aug 2020 20:39:23 -0700 Subject: [PATCH 06/10] add README for GRIPP3R --- robots/GRIPP3R/README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 robots/GRIPP3R/README.md diff --git a/robots/GRIPP3R/README.md b/robots/GRIPP3R/README.md new file mode 100644 index 0000000..5a8ebf1 --- /dev/null +++ b/robots/GRIPP3R/README.md @@ -0,0 +1,10 @@ +# GRIPP3R + +> The GRIPP3R robot is constructed for some heavy-duty lifting. It’s got the muscle to grab and drop a can of soda with its powerful grasping grippers. + +Control GRIPP3R as follows: + +- Make GRIPP3R drive around by the IR Remote Control's blue and red buttons +- Make GRIPP3R grip or release an object by pressing the IR Remote Control's Beacon button + +The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/blt3cf20feda579587c/31313_GRIPP3R_2016.pdf). From 5e90e6e4ec1c8850280aa52fb23f6d1c3e600bf8 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sat, 17 Oct 2020 14:22:12 -0700 Subject: [PATCH 07/10] add Dinor3x program :) --- robots/DINOR3X/README.md | 24 ++++ robots/DINOR3X/T-rex roar.wav | Bin 0 -> 31724 bytes robots/DINOR3X/dinor3x.py | 213 ++++++++++++++++++++++++++++++++++ 3 files changed, 237 insertions(+) create mode 100644 robots/DINOR3X/README.md create mode 100644 robots/DINOR3X/T-rex roar.wav create mode 100755 robots/DINOR3X/dinor3x.py diff --git a/robots/DINOR3X/README.md b/robots/DINOR3X/README.md new file mode 100644 index 0000000..6237870 --- /dev/null +++ b/robots/DINOR3X/README.md @@ -0,0 +1,24 @@ +# DINOR3X + +> Designed by Lasse Stenbæk Lauesen +> +> This charming robotic triceratops dinosaur is capable of walking and turning on all fours. + +The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/bltad10c02978864265/DINOR3X.pdf). + +Please add a Color Sensor to Dinor3x's back or tail. Control DINOR3X as follows: + +- Make DINOR3X roar by pressing the IR Remote Control's Beacon button + +- Make DINOR3X walk or turn according to instructions from the IR Beacon + - 2 top/up buttons together: walk forward + - 2 bottom/down buttons together: walk backward + - Top Left / Red Up: turn left on the spot + - Top Right / Blue Up: turn right on the spot + - Bottom Left / Red Down: stop + - Bottom Right / Blue Down: calibrate to make the legs straight + +- Make DINOR3X change its speed when detecting some colors + - Red: walk fast + - Green: walk normally + - White: walk slowly diff --git a/robots/DINOR3X/T-rex roar.wav b/robots/DINOR3X/T-rex roar.wav new file mode 100644 index 0000000000000000000000000000000000000000..5a0346a74945e199d1f1e995e016cda424b534a3 GIT binary patch literal 31724 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 QeAtCl56Q%SX|Ox>e^F8t`~Uy| literal 0 HcmV?d00001 diff --git a/robots/DINOR3X/dinor3x.py b/robots/DINOR3X/dinor3x.py new file mode 100755 index 0000000..2579c8a --- /dev/null +++ b/robots/DINOR3X/dinor3x.py @@ -0,0 +1,213 @@ +#!/usr/bin/env python3 + + +from ev3dev.ev3 import ( + Motor, LargeMotor, MediumMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, + TouchSensor, ColorSensor, InfraredSensor, RemoteControl, + INPUT_1, INPUT_3, INPUT_4, + Sound +) + + +class Dinor3x: + FAST_WALK_SPEED = 800 + NORMAL_WALK_SPEED = 400 + SLOW_WALK_SPEED = 200 + + def __init__( + self, + jaw_motor_port: str = OUTPUT_A, + left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, + touch_sensor_port: str = INPUT_1, color_sensor_port: str = INPUT_3, + ir_sensor_port: str = INPUT_4, ir_beacon_channel: int = 1): + self.jaw_motor = MediumMotor(address=jaw_motor_port) + + self.left_motor = LargeMotor(address=left_motor_port) + self.right_motor = LargeMotor(address=right_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.remote_control = RemoteControl(sensor=self.ir_sensor, + channel=ir_beacon_channel) + + self.speaker = Sound() + + self.roaring = False + self.walk_speed = self.NORMAL_WALK_SPEED + + def roar_by_ir_beacon(self): + """ + Dinor3x roars when the Beacon button is pressed + """ + if self.remote_control.beacon: + self.roaring = True + self.open_mouth() + self.roar() + + elif self.roaring: + self.roaring = False + self.close_mouth() + + def change_speed_by_color(self): + """ + Dinor3x changes its speed when detecting some colors + - Red: walk fast + - Green: walk normally + - White: walk slowly + """ + if self.color_sensor.color == ColorSensor.COLOR_RED: + self.speaker.speak(text='RUN!') + self.walk_speed = self.FAST_WALK_SPEED + self.walk(speed=self.walk_speed) + + elif self.color_sensor.color == ColorSensor.COLOR_GREEN: + self.speaker.speak(text='Normal') + self.walk_speed = self.NORMAL_WALK_SPEED + self.walk(speed=self.walk_speed) + + elif self.color_sensor.color == ColorSensor.COLOR_WHITE: + self.speaker.speak(text='slow...') + self.walk_speed = self.SLOW_WALK_SPEED + self.walk(speed=self.walk_speed) + + def walk_by_ir_beacon(self): + """ + Dinor3x walks or turns according to instructions from the IR Beacon + - 2 top/up buttons together: walk forward + - 2 bottom/down buttons together: walk backward + - Top Left / Red Up: turn left on the spot + - Top Right / Blue Up: turn right on the spot + - Bottom Left / Red Down: stop + - Bottom Right / Blue Down: calibrate to make the legs straight + """ + # forward + if self.remote_control.red_up and self.remote_control.blue_up: + self.walk(speed=self.walk_speed) + + # backward + elif self.remote_control.red_down and self.remote_control.blue_down: + self.walk(speed=-self.walk_speed) + + # turn left on the spot + elif self.remote_control.red_up: + self.turn(speed=self.walk_speed) + + # turn right on the spot + elif self.remote_control.blue_up: + self.turn(speed=-self.walk_speed) + + # stop + elif self.remote_control.red_down: + self.left_motor.stop(stop_action=Motor.STOP_ACTION_HOLD) + self.right_motor.stop(stop_action=Motor.STOP_ACTION_HOLD) + + # calibrate legs + elif self.remote_control.blue_down: + self.calibrate_legs() + + def calibrate_legs(self): + self.left_motor.run_forever(speed_sp=100) + self.right_motor.run_forever(speed_sp=200) + + while self.touch_sensor.is_pressed: + pass + + self.left_motor.stop(stop_action=Motor.STOP_ACTION_HOLD) + self.right_motor.stop(stop_action=Motor.STOP_ACTION_HOLD) + + self.left_motor.run_forever(speed_sp=400) + + while not self.touch_sensor.is_pressed: + pass + + self.left_motor.stop(stop_action=Motor.STOP_ACTION_HOLD) + + self.left_motor.run_to_rel_pos( + position_sp=-0.2 * 360, + speed_sp=500, + stop_action=Motor.STOP_ACTION_HOLD) + self.left_motor.wait_while(Motor.STATE_RUNNING) + + self.right_motor.run_forever(speed_sp=400) + + while not self.touch_sensor.is_pressed: + pass + + self.right_motor.stop(stop_action=Motor.STOP_ACTION_HOLD) + + self.right_motor.run_to_rel_pos( + position_sp=-0.2 * 360, + speed_sp=500, + stop_action=Motor.STOP_ACTION_HOLD) + self.right_motor.wait_while(Motor.STATE_RUNNING) + + self.left_motor.reset() + self.right_motor.reset() + + def walk(self, speed: float = 1000): + self.calibrate_legs() + + self.left_motor.run_forever(speed_sp=-speed) + self.right_motor.run_forever(speed_sp=-speed) + + def turn(self, speed: float = 1000): + self.calibrate_legs() + + if speed >= 0: + self.left_motor.run_to_rel_pos( + position_sp=180, + speed_sp=speed, + stop_action=Motor.STOP_ACTION_HOLD) + self.left_motor.wait_while(Motor.STATE_RUNNING) + + else: + self.right_motor.run_to_rel_pos( + position_sp=180, + speed_sp=-speed, + stop_action=Motor.STOP_ACTION_HOLD) + self.right_motor.wait_while(Motor.STATE_RUNNING) + + self.left_motor.run_forever(speed_sp=speed) + self.right_motor.run_forever(speed_sp=-speed) + + def close_mouth(self): + self.jaw_motor.run_timed( + speed_sp=-200, + time_sp=1000, + stop_action=Motor.STOP_ACTION_COAST) + + def open_mouth(self): + self.jaw_motor.run_timed( + speed_sp=200, + time_sp=1000, + stop_action=Motor.STOP_ACTION_COAST) + + def roar(self): + self.speaker.play(wav_file='/home/robot/sound/T-rex roar.wav') + + self.jaw_motor.run_timed( + speed_sp=-200, + time_sp=0.5 * 1000, + stop_action=Motor.STOP_ACTION_COAST) + self.jaw_motor.wait_while(Motor.STATE_RUNNING) + + self.jaw_motor.run_timed( + speed_sp=200, + time_sp=0.5 * 1000, + stop_action=Motor.STOP_ACTION_COAST) + self.jaw_motor.wait_while(Motor.STATE_RUNNING) + + def main(self): + self.close_mouth() + + while True: + self.roar_by_ir_beacon() + self.change_speed_by_color() + self.walk_by_ir_beacon() + + +if __name__ == '__main__': + DINOR3X = Dinor3x() + DINOR3X.main() From 3b0c45ff5a0a004f185998bb81285d6bc428d395 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Sat, 17 Oct 2020 15:06:30 -0700 Subject: [PATCH 08/10] add .GitIgnore --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..af57684 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +__pycache__/ +*.pyc + +# Visual Studio Code files +.vscode/ From 409c81c8b57725bc12dfb1c5e7eea4a9197f45d0 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Tue, 17 Nov 2020 23:29:08 -0800 Subject: [PATCH 09/10] add ev3dev1 Wack3m program --- robots/WACK3M/Boing.wav | Bin 0 -> 13292 bytes robots/WACK3M/Dizzy.bmp | Bin 0 -> 3136 bytes robots/WACK3M/EV3 icon.bmp | Bin 0 -> 3136 bytes robots/WACK3M/Fantastic.wav | Bin 0 -> 15020 bytes robots/WACK3M/Game over.wav | Bin 0 -> 14444 bytes robots/WACK3M/Go.wav | Bin 0 -> 9836 bytes robots/WACK3M/Good job.wav | Bin 0 -> 12140 bytes robots/WACK3M/Middle left.bmp | Bin 0 -> 3136 bytes robots/WACK3M/Middle right.bmp | Bin 0 -> 3136 bytes robots/WACK3M/Neutral.bmp | Bin 0 -> 3136 bytes robots/WACK3M/README.md | 9 ++ robots/WACK3M/Start.wav | Bin 0 -> 10412 bytes robots/WACK3M/Touch sensor.bmp | Bin 0 -> 3136 bytes robots/WACK3M/wack3m.py | 278 +++++++++++++++++++++++++++++++++ 14 files changed, 287 insertions(+) create mode 100644 robots/WACK3M/Boing.wav create mode 100644 robots/WACK3M/Dizzy.bmp create mode 100644 robots/WACK3M/EV3 icon.bmp create mode 100644 robots/WACK3M/Fantastic.wav create mode 100644 robots/WACK3M/Game over.wav create mode 100644 robots/WACK3M/Go.wav create mode 100644 robots/WACK3M/Good job.wav create mode 100644 robots/WACK3M/Middle left.bmp create mode 100644 robots/WACK3M/Middle right.bmp create mode 100644 robots/WACK3M/Neutral.bmp create mode 100644 robots/WACK3M/README.md create mode 100644 robots/WACK3M/Start.wav create mode 100644 robots/WACK3M/Touch sensor.bmp create mode 100644 robots/WACK3M/wack3m.py diff --git a/robots/WACK3M/Boing.wav b/robots/WACK3M/Boing.wav new file mode 100644 index 0000000000000000000000000000000000000000..f6588f910d3ac53704f7616970362a335792630a GIT binary patch literal 13292 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 E1NIGrj}Dz&lXxN#T;yAzg#CkH9 zPBb;?xcKlNa7}@W{iJZG{+ob7L{6(P@hV_ag=3YqN6t%CI98%d9Lod27j7Mb9Cct} z=7l#DsK^n%yo(&stP{7F0kg{fdbGYg@;rR>k^5${iI+C`QFzveVA`l(SGzItd^MIQc4pT_|8Y|FO1Rl{`8ILypO%T6>}sF*;15OO*7S+%z7Mt#ouaVA;6z{V zw_%g`sv2j$`!w@6r~LiQ&wq;-NB#4mN4pu;r{3@0rhXQy^>gayqc6<6G_GP*XEWcs zDUPcsOS6sR)k7b~wT#OaHe9!&qXvJRe`5{LKj|y)n?Av@4PhAAO1Q zIU+hFo%B^c`>WT?S)XXqVN?72uP{GSL?`kk|9^O1(EzDnCUF{Y`I~ci>6~BW2sstX zC#QL2Deo-iDGs9Kt{?JR)3W|gd2lIjF6G&!yu6ghf1UR+(1q^=)$j`r!|8X0vdlXk X1)B#p<-;P{?2{rWuW#=+YzDpqfhRjd literal 0 HcmV?d00001 diff --git a/robots/WACK3M/EV3 icon.bmp b/robots/WACK3M/EV3 icon.bmp new file mode 100644 index 0000000000000000000000000000000000000000..759dedb34167b570f65b69febe87ac64508860f1 GIT binary patch literal 3136 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 literal 0 HcmV?d00001 diff --git a/robots/WACK3M/Middle left.bmp b/robots/WACK3M/Middle left.bmp new file mode 100644 index 0000000000000000000000000000000000000000..e0f2624c79775c7ae9d486cb853941fb520aecae GIT binary patch literal 3136 zcmeH}&59H;5XaM-VLm`;R}e&mGAh_URGjw<6*OjVDr8<>oFV1cmX)W%LaDBiPa8>wmJHh*RchV&Q zHzJz4H_!hv0v1a|V{*-Le>mz>FMk+MGG6|OkPIaXEK>=l9rx?hkKE5PV!$OXV;3^4 zmh9+cl)qy6TKbi|_3=Pla?AHX$)XjV9Rp)rgbR5VqSFV)rp7QUDvj}>#Z9nTFc*Wy zbOCPUvCQ}#H`gPv^Vo`c1VpQQ*qS(=b!3{JEGLb5pSp_(`2x4umf65wNb+`Qjn2)k zz$*(I(lAAryVcMbo!dd@#uj)%4`LXzvES@oH+Lnw4*p=-(2_qRcPn1&XyTJSUsSzt z#5r0s-}8HBE!?y=&fMjmH{&vK$S?g6@JIANr`LOaO1ra(Z|UovKcunAymItI_#Ar9 ziEd|p($Q65Ki#E`FNxky+|y3@(%ZNtdYkzS{EX$BQyVXcK2IDUsc_6n<#TJlbVT2> z{0iS=!+O?_bzTiRH&uZfog)ubyIsTFAN={5{OO4Ozc|cmm*$oDna)(#J!5 z#s|XPisSj|5YO>xkbFR%oYVKC_`gaV>!Pg}=ZU($$dgh&l=4T-H|W>$a~;5yeC9kc zskO)7yJbBJNBmXJd7{ae_JQ?Gmq(uHdJ6l}b?*;l^gDz^$>n2utd^(dllt{F|@0)v|2$-9df51P%=iFiZtX_v8>2TFL&fY zM-5b-FUTioMosG1+R81-OO>tGx{kFV;FVf5t_9IbQ}pCD0Y=+lABI@~ig69GDbcLZ zE-`WGuP-mHbNlL}V}Uty-4nalKAOE+TibN_-~rCGc(V zw^4sCauYfJ)BCusMScYRr}!mbg?|1ccf)vor}3D%%!hfc*5~zkjZf2jXL3FGr+=CF zseBv!*}plDemjw$YySV3cy7IN>zmsTx&4#dZzi)pc@l;7;z4EO`1xxmjx%P%^|1RZ zKfrgI&i?Hj&YkmFo{1y5xRZ@jxww{#gQIa19vF?Y;G=OFd^C=OkH&rQ(R%{;=)Hox c!U-kPQsiwi-Br{;uh{Fv74&G6KQa&80Z~O1w*UYD literal 0 HcmV?d00001 diff --git a/robots/WACK3M/Neutral.bmp b/robots/WACK3M/Neutral.bmp new file mode 100644 index 0000000000000000000000000000000000000000..6b66b84a76b454067bad46fabcbe23da5c706703 GIT binary patch literal 3136 zcmds(Pis>_5WwgCu}MKp6GIC{NT7#G(o!Kg& z4Lun>0sUA)YJb^qj{qtVv8ZbAo(2J0ItI98G=v5p8hl{z*x+t~<;LYQ60&6Qrorn5 zuNZt+=ZkwfhaH2j14Oh%ICbqUuAj`*aU_2jv(CmLKq`MkNxC9t&_04dFiu#%=IS{# z5@+5I&~lvmZbF5+u_o*HrB^zpBLp?62hy76+)AYR8d`2z>4=ClLNtZ&82Sw8#N>1i z{VK#}nlXkNb&JF#&74un6rjSK24v}HRQSHkxQ(SXf)4n;0rQ+7No@q(py2eb<%0R$ zV?7b(BUi2DjYQ{Ajr>^fjK<5HKC#f?LxT^Z-1UVmvg5143B(2u48CmeC4)B&UN?Bf z;JZ3s+|xPi7<`?%?2Y#W?+y6@m|ux9DE#yI8uN`q<~QJB!GkPf-acY}XR=W6u$E`U z8wvC0SS@(mA17>olX%d=_XV%ww9TCT9QN@`!Rv?%%=d}MDSj{b3gQdqJkJ>Mtl+DN zADBNNUPT;de*W7?V|o2~#7V*LBYyi050LC!rD#mNomYrISfA&q@U;V-hsQdX`73t* zz)xr9^H%25A^Y=qHnXmevaYW1@zeA5z7yUfUd73+f^Xwz_RmU2JjTfr@atX0uj0=+ z=IM0C|EJ>rkhr#AL*m;0O57>uLE^4_e#Fnpc>{^N^7#abJLNq8lW_+u7r#FecV+J4 zuFPHBmH9gFqmzsFIqo!WecwJA`e1xl9~s=z2mL!Apw1!C^T^tPo_8qUP2F;T$x~qF zH7gJ5d9$PES?KC{8G4}R@tYLzF4xO+&-4DAeovshuih(QNZCvbjbzzUWs?IxfcJ*z ha3+mKtz7)a_qXz5ZNm3AP3Zon%I!qOe1H3E`3Y;x8=n9G literal 0 HcmV?d00001 diff --git a/robots/WACK3M/README.md b/robots/WACK3M/README.md new file mode 100644 index 0000000..73aabc9 --- /dev/null +++ b/robots/WACK3M/README.md @@ -0,0 +1,9 @@ +# WACK3M + +> Designed by Martyn Boogaarts +> +> This is an arcade-style game that tests your reaction speed. The robot pops up disks that you have to whack as quickly as possible using the wack-wheel hammer. Challenge your friends and see who wackedy-wacks the fastest! + +The build instructions may be found at the official LEGO MINDSTROMS site [here](https://www.lego.com/cdn/cs/set/assets/bltdb2f687cb4aa5b97/WACK3M.pdf) + +How to play: Press the Touch Sensor to start a game. Each game has ten rounds of whacking, and your average response time is measured. diff --git a/robots/WACK3M/Start.wav b/robots/WACK3M/Start.wav new file mode 100644 index 0000000000000000000000000000000000000000..6885eeb61fadfcc39cbf3d3fd158bf0fabdc51cc GIT binary patch literal 10412 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 literal 0 HcmV?d00001 diff --git a/robots/WACK3M/Touch sensor.bmp b/robots/WACK3M/Touch sensor.bmp new file mode 100644 index 0000000000000000000000000000000000000000..2c17757c033ee9438702676f6251c43e02d0dd06 GIT binary patch literal 3136 zcmeH}OKTHR6o79W`=r*OMMDx8snkbfL$IZiR+~~cF3hTqC@K`B8(01SwX;fHxD`bZ zML}>3B7&eB?MgSIE=0lASnz=&7P?6*cs=)?$vtNtS%~1Or<~l$H($@p+{fHZRVRCd zjtThO1^E!tg-pSpigj@Q(k4s|;6qB;Jp4Z`Tu}N6m-<_-Y9!TJevs;zhYw#= zM#Bf765~Ph;2-OlGHZ2$uJEB%84VwR%4qliR7S%Gppu8B77@mh=Ba18iSgi{T5>lK zggC2@#vkj(it^kE;&XBVzMx-ml6i5N_>3UG^qctX5#sq(;%7YKaUw&r7*Hy>eX223~jQgW=x`tJe&-KOwIPv1NLtDntf- zfjg*O^SnFvR_mU36}f#X@Ezx<)!5)T#{z#L;GS2Xlh2Kx3Hrb0IMq4%&iFgDE>!)x zl%I`X`DN-K25$T=m+EtWAb8$r{md=$L-*6Wj`@Wf$-a&ILd;LocnN+# zxir<`_rLKgaqf5ZYHqpEps(H$FqzQT9DU^0j5;e~{s^vL&G~-OH$*<)cShbP^Xx(5 z`Y70^h7Kh2VH`(&U0%O(mwe9KTinm?N%Wh$vXo02w7*H_rHN$Tu3ni5(LI;|0rlZH P#!e36yp8cr*q8qR;a1sb literal 0 HcmV?d00001 diff --git a/robots/WACK3M/wack3m.py b/robots/WACK3M/wack3m.py new file mode 100644 index 0000000..e787326 --- /dev/null +++ b/robots/WACK3M/wack3m.py @@ -0,0 +1,278 @@ +#!/usr/bin/env python3 + + +from ev3dev.ev3 import ( + Motor, MediumMotor, LargeMotor, OUTPUT_A, OUTPUT_B, OUTPUT_C, + TouchSensor, InfraredSensor, INPUT_1, INPUT_4, + Leds, Screen, Sound +) + +from PIL import Image +from random import randint, uniform +from time import sleep, time + + +class Wack3m: + N_WHACK_TIMES = 10 + + def __init__( + self, + left_motor_port: str = OUTPUT_B, right_motor_port: str = OUTPUT_C, + middle_motor_port: str = OUTPUT_A, + touch_sensor_port: str = INPUT_1, ir_sensor_port: str = INPUT_4): + self.left_motor = LargeMotor(address=left_motor_port) + self.right_motor = LargeMotor(address=right_motor_port) + self.middle_motor = MediumMotor(address=middle_motor_port) + + self.touch_sensor = TouchSensor(address=touch_sensor_port) + + self.ir_sensor = InfraredSensor(address=ir_sensor_port) + + self.leds = Leds() + self.screen = Screen() + self.speaker = Sound() + + def start_up(self): + self.leds.set_color( + group=Leds.LEFT, + color=Leds.RED, + pct=1) + self.leds.set_color( + group=Leds.RIGHT, + color=Leds.RED, + pct=1) + + self.screen.clear() + self.screen.draw.text( + xy=(5, 2), + text='WACK3M', + fill=None, + font=None, + anchor=None, + spacing=4, + align='left', + direction=None, + features=None, + language=None, + stroke_width=0, + stroke_fill=None) + self.screen.update() + + self.left_motor.run_timed( + speed_sp=-300, + time_sp=1000, + stop_action=Motor.STOP_ACTION_HOLD) + self.left_motor.wait_while(Motor.STATE_RUNNING) + + self.left_motor.reset() + + self.middle_motor.run_timed( + speed_sp=-50, + time_sp=2000, + stop_action=Motor.STOP_ACTION_HOLD) + self.middle_motor.wait_while(Motor.STATE_RUNNING) + + self.middle_motor.reset() + + self.right_motor.run_timed( + speed_sp=-300, + time_sp=1000, + stop_action=Motor.STOP_ACTION_HOLD) + self.right_motor.wait_while(Motor.STATE_RUNNING) + + self.right_motor.reset() + + def main(self): + self.start_up() + + while True: + self.speaker.play(wav_file='Start.wav').wait() + + self.screen.clear() + self.screen.image.paste(im=Image.open('Touch sensor.bmp')) + self.screen.update() + + self.leds.set_color( + group=Leds.LEFT, + color=Leds.ORANGE, + pct=1) + self.leds.set_color( + group=Leds.RIGHT, + color=Leds.ORANGE, + pct=1) + + while not self.touch_sensor.is_pressed: + pass + + self.speaker.play(wav_file='Go.wav').wait() + + self.leds.set_color( + group=Leds.LEFT, + color=Leds.GREEN, + pct=1) + self.leds.set_color( + group=Leds.RIGHT, + color=Leds.GREEN, + pct=1) + + total_response_time = 0 + + sleep(1) + + for _ in range(self.N_WHACK_TIMES): + self.leds.set_color( + group=Leds.LEFT, + color=Leds.GREEN, + pct=1) + self.leds.set_color( + group=Leds.RIGHT, + color=Leds.GREEN, + pct=1) + + self.screen.clear() + self.screen.image.paste(im=Image.open('EV3 icon.bmp')) + self.screen.update() + + sleep(uniform(0.1, 3)) + + which_motor = randint(1, 3) + + self.screen.clear() + + if which_motor == 1: + self.left_motor.run_to_rel_pos( + speed_sp=1000, + position_sp=60, + stop_action=Motor.STOP_ACTION_COAST) + start_time = time() + self.left_motor.wait_while(Motor.STATE_RUNNING) + + self.screen.image.paste(im=Image.open('Middle left.bmp')) + self.screen.update() + + self.left_motor.run_timed( + speed_sp=-400, + time_sp=500, + stop_action=Motor.STOP_ACTION_HOLD) + self.left_motor.wait_while(Motor.STATE_RUNNING) + + proximity = self.ir_sensor.proximity + while abs(self.ir_sensor.proximity - proximity) <= 2: + pass + + elif which_motor == 2: + self.middle_motor.run_to_rel_pos( + speed_sp=1000, + position_sp=170, + stop_action=Motor.STOP_ACTION_COAST) + start_time = time() + self.middle_motor.wait_while(Motor.STATE_RUNNING) + + self.screen.image.paste(im=Image.open('Neutral.bmp')) + self.screen.update() + + self.middle_motor.run_timed( + speed_sp=-400, + time_sp=400, + stop_action=Motor.STOP_ACTION_COAST) + self.middle_motor.wait_while(Motor.STATE_RUNNING) + + proximity = self.ir_sensor.proximity + while abs(self.ir_sensor.proximity - proximity) <= 3: + pass + + else: + self.right_motor.run_to_rel_pos( + speed_sp=1000, + position_sp=60, + stop_action=Motor.STOP_ACTION_COAST) + start_time = time() + self.right_motor.wait_while(Motor.STATE_RUNNING) + + self.screen.image.paste(im=Image.open('Middle right.bmp')) + self.screen.update() + + self.right_motor.run_timed( + speed_sp=-400, + time_sp=500, + stop_action=Motor.STOP_ACTION_HOLD) + self.right_motor.wait_while(Motor.STATE_RUNNING) + + proximity = self.ir_sensor.proximity + while abs(self.ir_sensor.proximity - proximity) <= 3: + pass + + response_time = time() - start_time + + self.screen.clear() + self.screen.image.paste(im=Image.open('Dizzy.bmp')) + self.screen.draw.text( + xy=(0, 11), + text='Reponse Time: {:.1f}s'.format(response_time), + fill=None, + font=None, + anchor=None, + spacing=4, + align='left', + direction=None, + features=None, + language=None, + stroke_width=0, + stroke_fill=None) + self.screen.update() + + self.leds.set_color( + group=Leds.LEFT, + color=Leds.RED, + pct=1) + self.leds.set_color( + group=Leds.RIGHT, + color=Leds.RED, + pct=1) + + self.speaker.play(wav_file='Boing.wav').wait() + + total_response_time += response_time + + average_response_time = total_response_time / self.N_WHACK_TIMES + + self.screen.clear() + self.screen.draw.text( + xy=(6, 3), + text='Average Response Time: {:.1f}s' + .format(average_response_time), + fill=None, + font=None, + anchor=None, + spacing=4, + align='left', + direction=None, + features=None, + language=None, + stroke_width=0, + stroke_fill=None) + self.screen.update() + + self.speaker.play( + wav_file='Fantastic.wav' + if average_response_time <= 1 + else 'Good job.wav').wait() + + self.speaker.play(wav_file='Game over.wav').wait() + + self.leds.set_color( + group=Leds.LEFT, + color=Leds.RED, + pct=1) + self.leds.set_color( + group=Leds.RIGHT, + color=Leds.RED, + pct=1) + + sleep(4) + + +if __name__ == '__main__': + WACK3M = Wack3m() + + WACK3M.main() From 41488ee444108a5c4d48267bfc5b4d5e508d79f4 Mon Sep 17 00:00:00 2001 From: Antoni Luong Pham Date: Thu, 19 Nov 2020 23:10:24 -0800 Subject: [PATCH 10/10] update Wack3m (EV3Dev1) program --- robots/WACK3M/{ => media}/Boing.wav | Bin robots/WACK3M/{ => media}/Dizzy.bmp | Bin robots/WACK3M/{ => media}/EV3 icon.bmp | Bin robots/WACK3M/{ => media}/Fantastic.wav | Bin robots/WACK3M/{ => media}/Game over.wav | Bin robots/WACK3M/{ => media}/Go.wav | Bin robots/WACK3M/{ => media}/Good job.wav | Bin robots/WACK3M/{ => media}/Middle left.bmp | Bin robots/WACK3M/{ => media}/Middle right.bmp | Bin robots/WACK3M/{ => media}/Neutral.bmp | Bin robots/WACK3M/{ => media}/Start.wav | Bin robots/WACK3M/{ => media}/Touch sensor.bmp | Bin robots/WACK3M/wack3m.py | 32 +++++++++++---------- 13 files changed, 17 insertions(+), 15 deletions(-) rename robots/WACK3M/{ => media}/Boing.wav (100%) rename robots/WACK3M/{ => media}/Dizzy.bmp (100%) rename robots/WACK3M/{ => media}/EV3 icon.bmp (100%) rename robots/WACK3M/{ => media}/Fantastic.wav (100%) rename robots/WACK3M/{ => media}/Game over.wav (100%) rename robots/WACK3M/{ => media}/Go.wav (100%) rename robots/WACK3M/{ => media}/Good job.wav (100%) rename robots/WACK3M/{ => media}/Middle left.bmp (100%) rename robots/WACK3M/{ => media}/Middle right.bmp (100%) rename robots/WACK3M/{ => media}/Neutral.bmp (100%) rename robots/WACK3M/{ => media}/Start.wav (100%) rename robots/WACK3M/{ => media}/Touch sensor.bmp (100%) diff --git a/robots/WACK3M/Boing.wav b/robots/WACK3M/media/Boing.wav similarity index 100% rename from robots/WACK3M/Boing.wav rename to robots/WACK3M/media/Boing.wav diff --git a/robots/WACK3M/Dizzy.bmp b/robots/WACK3M/media/Dizzy.bmp similarity index 100% rename from robots/WACK3M/Dizzy.bmp rename to robots/WACK3M/media/Dizzy.bmp diff --git a/robots/WACK3M/EV3 icon.bmp b/robots/WACK3M/media/EV3 icon.bmp similarity index 100% rename from robots/WACK3M/EV3 icon.bmp rename to robots/WACK3M/media/EV3 icon.bmp diff --git a/robots/WACK3M/Fantastic.wav b/robots/WACK3M/media/Fantastic.wav similarity index 100% rename from robots/WACK3M/Fantastic.wav rename to robots/WACK3M/media/Fantastic.wav diff --git a/robots/WACK3M/Game over.wav b/robots/WACK3M/media/Game over.wav similarity index 100% rename from robots/WACK3M/Game over.wav rename to robots/WACK3M/media/Game over.wav diff --git a/robots/WACK3M/Go.wav b/robots/WACK3M/media/Go.wav similarity index 100% rename from robots/WACK3M/Go.wav rename to robots/WACK3M/media/Go.wav diff --git a/robots/WACK3M/Good job.wav b/robots/WACK3M/media/Good job.wav similarity index 100% rename from robots/WACK3M/Good job.wav rename to robots/WACK3M/media/Good job.wav diff --git a/robots/WACK3M/Middle left.bmp b/robots/WACK3M/media/Middle left.bmp similarity index 100% rename from robots/WACK3M/Middle left.bmp rename to robots/WACK3M/media/Middle left.bmp diff --git a/robots/WACK3M/Middle right.bmp b/robots/WACK3M/media/Middle right.bmp similarity index 100% rename from robots/WACK3M/Middle right.bmp rename to robots/WACK3M/media/Middle right.bmp diff --git a/robots/WACK3M/Neutral.bmp b/robots/WACK3M/media/Neutral.bmp similarity index 100% rename from robots/WACK3M/Neutral.bmp rename to robots/WACK3M/media/Neutral.bmp diff --git a/robots/WACK3M/Start.wav b/robots/WACK3M/media/Start.wav similarity index 100% rename from robots/WACK3M/Start.wav rename to robots/WACK3M/media/Start.wav diff --git a/robots/WACK3M/Touch sensor.bmp b/robots/WACK3M/media/Touch sensor.bmp similarity index 100% rename from robots/WACK3M/Touch sensor.bmp rename to robots/WACK3M/media/Touch sensor.bmp diff --git a/robots/WACK3M/wack3m.py b/robots/WACK3M/wack3m.py index e787326..95fcb8d 100644 --- a/robots/WACK3M/wack3m.py +++ b/robots/WACK3M/wack3m.py @@ -86,10 +86,10 @@ def main(self): self.start_up() while True: - self.speaker.play(wav_file='Start.wav').wait() + self.speaker.play(wav_file='media/Start.wav').wait() self.screen.clear() - self.screen.image.paste(im=Image.open('Touch sensor.bmp')) + self.screen.image.paste(im=Image.open('media/Touch sensor.bmp')) self.screen.update() self.leds.set_color( @@ -104,7 +104,7 @@ def main(self): while not self.touch_sensor.is_pressed: pass - self.speaker.play(wav_file='Go.wav').wait() + self.speaker.play(wav_file='media/Go.wav').wait() self.leds.set_color( group=Leds.LEFT, @@ -130,7 +130,7 @@ def main(self): pct=1) self.screen.clear() - self.screen.image.paste(im=Image.open('EV3 icon.bmp')) + self.screen.image.paste(im=Image.open('media/EV3 icon.bmp')) self.screen.update() sleep(uniform(0.1, 3)) @@ -147,7 +147,8 @@ def main(self): start_time = time() self.left_motor.wait_while(Motor.STATE_RUNNING) - self.screen.image.paste(im=Image.open('Middle left.bmp')) + self.screen.image.paste( + im=Image.open('media/Middle left.bmp')) self.screen.update() self.left_motor.run_timed( @@ -157,7 +158,7 @@ def main(self): self.left_motor.wait_while(Motor.STATE_RUNNING) proximity = self.ir_sensor.proximity - while abs(self.ir_sensor.proximity - proximity) <= 2: + while abs(self.ir_sensor.proximity - proximity) <= 4: pass elif which_motor == 2: @@ -168,7 +169,7 @@ def main(self): start_time = time() self.middle_motor.wait_while(Motor.STATE_RUNNING) - self.screen.image.paste(im=Image.open('Neutral.bmp')) + self.screen.image.paste(im=Image.open('media/Neutral.bmp')) self.screen.update() self.middle_motor.run_timed( @@ -178,7 +179,7 @@ def main(self): self.middle_motor.wait_while(Motor.STATE_RUNNING) proximity = self.ir_sensor.proximity - while abs(self.ir_sensor.proximity - proximity) <= 3: + while abs(self.ir_sensor.proximity - proximity) <= 5: pass else: @@ -189,7 +190,8 @@ def main(self): start_time = time() self.right_motor.wait_while(Motor.STATE_RUNNING) - self.screen.image.paste(im=Image.open('Middle right.bmp')) + self.screen.image.paste( + im=Image.open('media/Middle right.bmp')) self.screen.update() self.right_motor.run_timed( @@ -199,13 +201,13 @@ def main(self): self.right_motor.wait_while(Motor.STATE_RUNNING) proximity = self.ir_sensor.proximity - while abs(self.ir_sensor.proximity - proximity) <= 3: + while abs(self.ir_sensor.proximity - proximity) <= 5: pass response_time = time() - start_time self.screen.clear() - self.screen.image.paste(im=Image.open('Dizzy.bmp')) + self.screen.image.paste(im=Image.open('media/Dizzy.bmp')) self.screen.draw.text( xy=(0, 11), text='Reponse Time: {:.1f}s'.format(response_time), @@ -230,7 +232,7 @@ def main(self): color=Leds.RED, pct=1) - self.speaker.play(wav_file='Boing.wav').wait() + self.speaker.play(wav_file='media/Boing.wav').wait() total_response_time += response_time @@ -254,11 +256,11 @@ def main(self): self.screen.update() self.speaker.play( - wav_file='Fantastic.wav' + wav_file='media/Fantastic.wav' if average_response_time <= 1 - else 'Good job.wav').wait() + else 'media/Good job.wav').wait() - self.speaker.play(wav_file='Game over.wav').wait() + self.speaker.play(wav_file='media/Game over.wav').wait() self.leds.set_color( group=Leds.LEFT,