Library for using the TLC5940 as a servo controller.

Dependencies:   FastPWM

Dependents:   TLC5940ServoTest

Revision:
5:56daa8c0697d
Parent:
2:1d2251574d35
Child:
6:b001282e967b
--- a/TLC5940Servo.cpp	Tue Oct 21 06:14:58 2014 +0000
+++ b/TLC5940Servo.cpp	Tue Oct 21 06:26:25 2014 +0000
@@ -87,14 +87,17 @@
     write(0.5);
 }
 
-// used source code, but converted pwm pulse to 12 bit value
-// assuming 20ms period, divide to get percentage and multiply to get value
 void TLC5940Servo::Servo::write(float percent) {
     float offset = _range * 2.0 * (percent - 0.5);
     _pw = (int)(4095 - ((0.0015 + clamp(offset, -_range, _range))/0.02 * 4096.0));
     _p = clamp(percent, 0.0, 1.0);
 }
 
+void TLC5940Servo::Servo::position(float degrees) {
+    float offset = _range * (degrees / _degrees);
+    _pw = (int)(4095 - ((0.0015 + clamp(offset, -_range, _range))/0.02 * 4096.0));
+}
+
 void TLC5940Servo::Servo::calibrate(float range, float degrees) {
     _range = range;
     _degrees = degrees;
@@ -113,6 +116,11 @@
     return *this;
 }
 
+TLC5940Servo::Servo& TLC5940Servo::Servo::operator= (TLC5940Servo::Servo& rhs) {
+    write(rhs.read());
+    return *this;
+}
+
 TLC5940Servo::Servo::operator float() {
     return read();
 }