Mercurial > tote0
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 +
