changeset 3:d34833e387e6

fix servo
author Radomir Dopieralski <dev@sheep.art.pl>
date Sat, 09 Jan 2016 18:29:01 +0100
parents cd99e83db2dc
children 953f8703d044
files .hgignore servo.py servoblaster
diffstat 3 files changed, 74 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/.hgignore	Thu Jan 07 22:57:13 2016 +0100
+++ b/.hgignore	Sat Jan 09 18:29:01 2016 +0100
@@ -3,3 +3,4 @@
 .*.swp
 *.DS_Store
 doc/_build
+*.pyc
--- a/servo.py	Thu Jan 07 22:57:13 2016 +0100
+++ b/servo.py	Sat Jan 09 18:29:01 2016 +0100
@@ -13,9 +13,9 @@
 
 
 class Servos(object):
-    min_pos = 600
-    max_pos = 2400
     unit = 4 # us
+    min_pos = 145 * unit
+    max_pos = 645 * unit
     max_servos = 12
     pos_range = 180
 
@@ -31,11 +31,15 @@
         degrees += trim
         if reverse:
             degrees = self.pos_range - degrees
-        position = self.min_pos + (degrees * self.pos_range /
-                                   (self.max_pos - self.min_pos))
+        position = self.min_pos + (
+            degrees * (self.max_pos - self.min_pos) / self.pos_range)
+        print("position = {}".format(position))
         position = min(self.max_pos, max(self.min_pos, position))
-        output = position / self.unit
+        print("position = {}".format(position))
+        output = int(position / self.unit)
+        print("output = {}".format(output))
         self.device.write("{}={}\n".format(servo, output))
+        self.device.flush()
 
     def update(self):
         pass
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/servoblaster	Sat Jan 09 18:29:01 2016 +0100
@@ -0,0 +1,64 @@
+#!/bin/sh
+### BEGIN INIT INFO
+# Provides:          servoblaster
+# Required-Start:    hostname $local_fs
+# Required-Stop:
+# Should-Start:
+# Default-Start:     2 3 4 5
+# Default-Stop:      0 1 6
+# Short-Description: Start/stop servod.
+# Description:       This script starts/stops servod.
+### END INIT INFO
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+. /lib/init/vars.sh
+
+OPTS="--idle-timeout=2000 --p1pins=7,11,12,13,15,16,18,19,21,22,23,24 --step-size=4us --min=145 --max=645"
+
+STATUSFILE="/tmp/servoblaster-status"
+
+if [ $( id -u ) != 0 ]; then
+	echo "ERROR: Must be run as root"
+	exit 1
+fi
+
+case "$1" in
+  start)
+	/usr/local/sbin/servod $OPTS >/dev/null
+	;;
+  restart|reload|force-reload)
+	killall servod
+	/usr/local/sbin/servod $OPTS >/dev/null
+	;;
+  stop)
+	killall servod
+	;;
+  status)
+	if [ ! -e /dev/servoblaster ]; then
+		echo "ERROR: /dev/servoblaster does not exist"
+		exit 2
+	fi
+	rm -f $STATUSFILE
+	echo "status $STATUSFILE" > /dev/servoblaster
+	sleep 0.2
+	if [ ! -e $STATUSFILE ]; then
+		echo "ERROR: servod not responding"
+		exit 3
+	elif grep -q "^OK" $STATUSFILE; then
+		echo "OK"
+		exit 0
+	elif grep "^ERROR:" $STATUSFILE; then
+		exit 4
+	else
+		echo "ERROR: No status from servod"
+		exit 5
+	fi
+	;;
+  *)
+	echo "Usage: servoblaster [start|stop|status]" >&2
+	exit 6
+	;;
+esac
+
+exit 0
+