changeset 18:368819a07c24

Get rid of properties from servo, use normal methods
author Radomir Dopieralski <sheep-devel@sheep.art.pl>
date Wed, 25 Jun 2014 16:30:58 +0200
parents 39f631544ede
children 441acc81edca
files maestro.py
diffstat 1 files changed, 20 insertions(+), 26 deletions(-) [+]
line wrap: on
line diff
--- a/maestro.py	Wed Jun 25 16:21:19 2014 +0200
+++ b/maestro.py	Wed Jun 25 16:30:58 2014 +0200
@@ -1,3 +1,6 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+
 """
 A simple library for talking to the Pololu Maestro RC servo controllers.
 """
@@ -60,8 +63,8 @@
         self._write_byte(servo)
         self._write_word(accel)
 
-    def get_target(self, servo):
-        """Read the current target position of a servo."""
+    def get_position(self, servo):
+        """Read the current position of a servo."""
         self._write_command(0x90)
         self._write_byte(servo)
         return self._read_word()
@@ -82,21 +85,13 @@
         self.index = index
         self.reverse = reverse
         self.max_degrees = max_degrees
-        self._angle = 0
-        self._speed = 0
-        self._accel = 0
         self.width = self.max_position - self.min_position
         if self.center is None:
             self.center = self.min_position + self.width / 2
         else:
             self.center = center
 
-    @property
-    def angle(self):
-        return self._angle
-
-    @angle.setter
-    def angle(self, degrees):
+    def move_degrees(self, degrees):
         self._angle = degrees
         position = (self.width * degrees) / self.max_degrees
         if self.reverse:
@@ -105,21 +100,20 @@
         target = min(self.max_position, max(self.min_position, target))
         self.maestro.set_target(self.index, target)
 
-    @property
-    def speed(self):
-        return self._speed
-
-    @speed.setter
-    def speed(self, degrees_per_second):
-        self._speed = degrees_per_second
-        speed = self.max_degrees / (self.width * degrees_per_second)
+    def set_speed(self, degrees_per_milisecond):
+        speed = (self.width * degrees_per_milisecond) / self.max_degrees
         self.maestro.set_speed(self.index, speed)
 
-    @property
-    def accel(self):
-        return self._accel
+    def set_accel(self, accel):
+        self.maestro.set_accel(self.index, accel)
 
-    @accel.setter
-    def accel(self, accel):
-        self._accel = accel
-        self.maestro.set_accel(self.index, accel)
+    def get_degrees(self):
+        target = self.get_position(self.index)
+        position = target - self.center
+        if self.reverse:
+            position = -position
+        return (self.max_degrees * position) / self.width
+
+    def stop(self):
+        target = self.get_position(self.index)
+        self.maestro.set_target(self.index, target)