Ejemplo n.º 1
0
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)
Ejemplo n.º 2
0
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)
Ejemplo n.º 3
0
#! /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='')
Ejemplo n.º 4
0
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()