39 lines
1.0 KiB
Python
39 lines
1.0 KiB
Python
"""Helpers for building moving mirrors."""
|
|
|
|
from objects.board import Board
|
|
|
|
class Motor:
|
|
"""Model a type of servo motor."""
|
|
|
|
OFFSET = 0 # In degrees a constant to be added
|
|
SCALE = 1 # Scaling
|
|
|
|
def __init__(self, board: Board, angle=0):
|
|
self.board: Board = board
|
|
self.id: int = Board.count
|
|
Board.count += 1
|
|
|
|
self.angle = angle
|
|
self.offset = Motor.OFFSET # Fine grained controls over every motor
|
|
self.coverage = Board.COVER
|
|
self.scale = Motor.SCALE
|
|
|
|
# Initialization
|
|
self.set()
|
|
|
|
# Update the motor position on hardware
|
|
def set(self):
|
|
self.board.kit.servo[self.id].angle = self.angle * self.scale + self.offset
|
|
|
|
def set_angle(self, angle):
|
|
self.angle = min(self.coverage, max(0, angle)) # Double check bad
|
|
self.set()
|
|
|
|
def __str__(self):
|
|
return f"Motor {self.id} is set at {self.angle} degrees."
|
|
|
|
def inc(self, inc):
|
|
self.angle += inc
|
|
self.angle = min(max(self.angle, 0), Board.COVER) # Clip
|
|
self.set()
|