예제 #1
0
class Servo:
    def __init__(self, pin, min_us=750, max_us=2250, actuation_range=180):
        self.min_us = min_us
        self.max_us = max_us
        self.actuation_range = actuation_range
        self.servoPin = MPythonPin(pin, PinMode.PWM)

    def write_us(self, us):
        if us < self.min_us or us > self.max_us:
            raise ValueError("us out of range")
        duty = round(us / 20000 * 1023)
        self.servoPin.write_analog(duty, 50)

    def write_angle(self, angle):
        if angle < 0 or angle > self.actuation_range:
            raise ValueError("Angle out of range")
        us_range = self.max_us - self.min_us
        us = self.min_us + round(angle * us_range / self.actuation_range)
        self.write_us(us)
예제 #2
0
class MicroBitPin:
    IN = 1
    OUT = 2
    PWM = 3
    ANALOG = 4

    def __init__(self, id):
        self.id = id
        self.current_mode = None
        self.mpython_pin = None

    def __change_pin_mode(self, pinmode):
        if self.current_mode is not pinmode:
            self.mpython_pin = MPythonPin(self.id, mode=pinmode)
            if pinmode == MicroBitPin.ANALOG:
                self.mpython_pin.adc.width(ADC.WIDTH_10BIT)
            self.current_mode = pinmode

    def read_digital(self):
        self.__change_pin_mode(MicroBitPin.IN)
        return self.mpython_pin.read_digital()

    def write_digital(self, value):
        self.__change_pin_mode(MicroBitPin.OUT)
        self.mpython_pin.write_digital(value)

    def read_analog(self):
        self.__change_pin_mode(MicroBitPin.ANALOG)
        return self.mpython_pin.read_analog()

    def write_analog(self, value):
        self.__change_pin_mode(MicroBitPin.PWM)
        self.mpython_pin.write_analog(value)

    def set_analog_period(period):
        #TODO
        pass

    def set_analog_period_microseconds(period):
        #TODO
        pass