class Thrower(object): def __init__(self, output): self.motor = Motor(output) def throw(self): self.motor.on_to_position(SpeedPercent(100), 50) def reset(self): self.motor.on_to_position(SpeedPercent(20), 0, block=False)
class TouchyArm(object): def __init__(self, output, address): self.motor = Motor(output) self.sensor = TouchSensor(address) self.should_wink = False def put_down(self): self.motor.on_to_position(SpeedPercent(20), 90, block=True) def put_up(self): self.motor.on_to_position(SpeedPercent(20), 0, block=True) def reset(self): self.motor.on_to_position(SpeedPercent(20), 0) async def winking(self): self.should_wink = True while self.should_wink: self.motor.on_for_degrees(SpeedPercent(100), -20, block=True) self.motor.on_for_degrees(SpeedPercent(50), 20, block=True) await asyncio.sleep(random.uniform(0.5, 2)) self.motor.on_for_degrees(SpeedPercent(100), -20, block=True) self.motor.on_for_degrees(SpeedPercent(50), 20, block=True) await asyncio.sleep(random.uniform(2, 3)) def stop_winking(self): self.should_wink = False async def wait_until_pressed(self): while True: if self.sensor.is_pressed: break await asyncio.sleep(0.1)
#! /usr/bin/python3 from ev3dev2.motor import Motor, SpeedDPS, SpeedPercent from time import sleep import os os.system('setfont Lat15-TerminusBold14') hand = Motor('A') hand.position = 0 hand.on_to_position(0.05, 20 / 360 * hand.count_per_rot, block=False) while True: sleep(1) print('\r', hand.position / hand.count_per_rot * 360, end='')
class Hand(object): def __init__(self, turner, up_motor='B', hand_motor='A'): self.angle = turner.angle self.up = Motor(up_motor) self.hand = Motor(hand_motor) self.degrees = 21 self.up_bounds = -100 self.pwm_base = 0.1 self.color_org = 0 self.color_tgt = 0 self.up_org = 0 self.up_tgt = 0 def speed(self): up = self.up.position / self.up_bounds tgt = self.color_tgt * self.degrees if up > 0.7: tgt += 3 pos = self.hand.position / self.hand.count_per_rot * 360 if abs(pos - tgt) < 5: if abs(pos - tgt) < 1: return 0.01, tgt return 0.1, tgt * 1.1 else: return 5, tgt def push(self): vel, pos = self.speed() self.hand.on_to_position(vel, pos / 360 * self.hand.count_per_rot, block=False) def start(self): self.hand.position = 0 self.up.position = 0 self.angle.position = 0 self.wait() def wait(self): self.up.wait_until_not_moving() self.angle.wait_until_not_moving() self.hand.wait_until_not_moving() def goo(self): def fun(): while True: self.push() sleep(0.05) self.thread = Thread(target=fun) self.thread.start() def stop(self): self.thread._stop() def move(self, color, up, angle, lift=False): self.up_org = self.up_tgt self.up_tgt = up self.color_org = self.color_tgt self.color_tgt = color self.up.on_to_position(10, up * self.up_bounds, block=False) self.angle.on_to_position(10, angle / 360 * self.angle.count_per_rot, block=False) self.wait()