diff --git a/examples/plotter/__init__.py b/examples/plotter/__init__.py index 273f42b..b4dfe1b 100644 --- a/examples/plotter/__init__.py +++ b/examples/plotter/__init__.py @@ -24,15 +24,15 @@ class Plotter(MoveHub): self.is_tool_down = False def _reset_caret(self): - self.motor_A.timed(0.2, self.base_speed) + self.motor_A.timed(0.5, 0.4) self.color_distance_sensor.subscribe(self._on_distance, mode=ColorDistanceSensor.COLOR_DISTANCE_FLOAT, - granularity=5) + granularity=1) try: - self.motor_A.constant(-self.base_speed) + self.motor_A.constant(-0.4) count = 0 max_tries = 50 - while not self._marker_color and count < max_tries: - time.sleep(5.0 / self.base_speed / max_tries) + while self._marker_color != COLOR_RED and count < max_tries: + time.sleep(7.0 / max_tries) count += 1 logging.info("Centering tries: %s, color #%s", count, COLORS[self._marker_color] if self._marker_color else None) @@ -42,7 +42,7 @@ class Plotter(MoveHub): self.motor_A.stop() self.color_distance_sensor.unsubscribe(self._on_distance) - self.motor_A.timed(self.field_width, self.base_speed) + self.motor_A.timed(0.925 / 0.4, 0.5) def _on_distance(self, color, distance): self._marker_color = None @@ -94,7 +94,7 @@ class Plotter(MoveHub): length, speed_a, speed_b = self._calc_motor(movx, movy) - self.motor_AB.timed(length * 4.0, -speed_a * self.base_speed / 4.0, -speed_b * self.base_speed / 4.0) + self.motor_AB.timed(length, -speed_a * self.base_speed, -speed_b * self.base_speed) # time.sleep(0.5) @@ -165,3 +165,20 @@ class Plotter(MoveHub): self.motor_AB.constant(spa, spb) logging.info("Motor speeds: %.3f / %.3f", spa, spb) time.sleep(dur) + + def rectangle(self, width, height, solid=False): + self.line(width, 0) + self.line(0, height) + self.line(-width, 0) + self.line(0, -height) + + if solid: + max_step = 0.1 + rounds = int(math.ceil(height / max_step)) + step = height / rounds + flip = 1 + self.line(0, step) # luft + for r in range(1, rounds + 3): + self.line(0, step) + self.line(width * flip, 0) + flip = -flip diff --git a/examples/plotter/try.py b/examples/plotter/try.py index f9f0106..df577ac 100644 --- a/examples/plotter/try.py +++ b/examples/plotter/try.py @@ -125,6 +125,33 @@ def lego(): plotter.line(0, -t) +def square_spiral(): + rounds = 7 + step = FIELD_WIDTH / 4.0 / rounds + for r in range(1, rounds): + plotter.line(step * r * 4, 0) + plotter.line(0, step * (r * 4 + 1)) + plotter.line(-step * (r * 4 + 2), 0) + plotter.line(0, -step * (r * 4 + 3)) + + +def christmas_tree(): + t = FIELD_WIDTH / 5 + plotter.line(t, t) + plotter.line(-t * 0.5, 0) + plotter.line(t, t) + plotter.line(-t * 0.5, 0) + plotter.line(t, t) + + plotter.line(-t * 3.5, 0) + + plotter.line(t, -t) + plotter.line(-t * 0.5, 0) + plotter.line(t, -t) + plotter.line(-t * 0.5, 0) + plotter.line(t, -t) + + if __name__ == '__main__': logging.basicConfig(level=logging.INFO) @@ -134,7 +161,7 @@ if __name__ == '__main__': logging.warning("Failed to use debug server: %s", traceback.format_exc()) conn = BLEConnection().connect() - plotter = LaserPlotter(conn, 0.4) + plotter = LaserPlotter(conn, 0.15) FIELD_WIDTH = plotter.field_width try: @@ -149,7 +176,10 @@ if __name__ == '__main__': # romb() # circles() # plotter.spiral(4, 0.02) - lego() + # plotter.rectangle(FIELD_WIDTH / 5.0, FIELD_WIDTH / 5.0, solid=True) + # lego() + # square_spiral() + christmas_tree() pass finally: plotter.finalize()