From 6f4f1c4a3ec50f88643e5ae9f7f3b34cf828fe32 Mon Sep 17 00:00:00 2001 From: shrkey Date: Sat, 2 Apr 2016 18:17:14 +0100 Subject: [PATCH] Updating library --- dwescape/dwescapeHAT.py | 51 +++++++++++++++++++++++++++++++++++------ 1 file changed, 44 insertions(+), 7 deletions(-) diff --git a/dwescape/dwescapeHAT.py b/dwescape/dwescapeHAT.py index 117a441..19c3fd3 100644 --- a/dwescape/dwescapeHAT.py +++ b/dwescape/dwescapeHAT.py @@ -3,17 +3,23 @@ import RPi.GPIO as GPIO from Adafruit_PWM_Servo_Driver import PWM import time +import math class dw_PWM: def __init__(self, controller, num, freq): + + _SERVO_MIN_MS = 1.250 #ms + _SERVO_MAX_MS = 1.750 #ms + self.speed = 0 self.MC = controller self.cnum = num self.pin = 0 self.freq = freq - self.cycle = 1/freq - self.tick = self.cycle / 4096 + + self.servo_min = math.trunc( ( _SERVO_MIN_MS * 4096 ) / (1000.0 / self.freq ) - 1 ) + self.servo_max = math.trunc( ( _SERVO_MAX_MS * 4096 ) / (1000.0 / self.freq ) - 1 ) if (num == 0): self.pin = 9 @@ -57,6 +63,12 @@ class dw_PWM: if(value == 0): self.off() + def setPWMmS(self, length_ms): + self.setPWM( math.round( length_ms * 4096 ) / ( 1000 / self.freq ) ) + + def setPWMuS(self, length_us): + self.setPWM( math.round( length_ms * 4096 ) / ( 1000000 / self.freq ) ) + def run(self, command, speed = 0): if not self.MC: return @@ -64,7 +76,7 @@ class dw_PWM: class dw_PWMCONTROL: - def __init__(self, addr = 0x61, freq = 60): + def __init__(self, addr = 0x61, freq = 100): self._i2caddr = addr # default addr on HAT self._frequency = freq # default @60Hz PWM freq # self.steppers = [ Adafruit_StepperMotor(self, 1), Adafruit_StepperMotor(self, 2) ] @@ -85,6 +97,16 @@ class dw_PWMCONTROL: if (value == 1): self._pwm.setPWM(pin, 4096, 0) + def setAllPin(self, value): + if (pin < 0) or (pin > 15): + raise NameError('PWM pin must be between 0 and 15 inclusive') + if (value != 0) and (value != 1): + raise NameError('Pin value must be 0 or 1!') + if (value == 0): + self._pwm.setAllPWM(0, 4096) + if (value == 1): + self._pwm.setAllPWM(4096, 0) + def getESC(self, num): if (num < 1) or (num > 6): raise NameError('ESC must be between 1 and 6 inclusive') @@ -95,8 +117,23 @@ class dw_PWMCONTROL: raise NameError('Servo must be between 1 and 6 inclusive') return self.servo[num-1] + def setAllPWM(self, value): + if(value > 0): + self._pwm.setAllPWM(0, value) + if(value == 0): + self.allOff() + + def setAllPWMmS(self, value): + if(value > 0): + self._pwm.setAllPWM(0, value) + if(value == 0): + self.allOff() + + def setAllPWMuS(self, value): + if(value > 0): + self._pwm.setAllPWM(0, value) + if(value == 0): + self.allOff() + def allOff(self): - for y in range(6): - self.esc[y].off() - for y in range(6): - self.servo[y].off() + this.setAllPin( 0 );