Library is coded to control servo This library is part of my project which is built on FRDM-KL25Z and motor shield l293D v1

Files at this revision

API Documentation at this revision

Comitter:
vtqNhi
Date:
Sun Sep 24 18:41:24 2017 +0000
Commit message:
This library is created to control servo motor by send pulsewidth to pwm pin.;

Changed in this revision

ServoMotorControl.cpp Show annotated file Show diff for this revision Revisions of this file
ServoMotorControl.h Show annotated file Show diff for this revision Revisions of this file
diff -r 000000000000 -r 22a971e060ed ServoMotorControl.cpp
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ServoMotorControl.cpp	Sun Sep 24 18:41:24 2017 +0000
@@ -0,0 +1,65 @@
+#include "mbed.h"
+#include "ServoMotorControl.h"
+
+static float clamp(float value, float min, float max) {
+    if(value < min) {
+        return min;
+    } else if(value > max) {
+        return max;
+    } else {
+        return value;
+    }
+}
+
+
+Servo::Servo(PinName pwm) : _pwm(pwm)
+{
+    _pwm = 0;
+}
+
+void Servo::turn2Angle(int degree)
+{
+    float angle2value;
+    switch (degree){
+    case 0: angle2value = 1; break;
+    case 15: angle2value = 1.25; break;
+    case 30: angle2value = 1.5; break;
+    case 45: angle2value = 1.75; break;
+    case 60: angle2value = 2; break;
+    case 75: angle2value = 2.25; break;
+    case 90: angle2value = 2.5; break;
+    case 105: angle2value = 2.75; break;
+    case 120: angle2value = 3; break;
+    case 135: angle2value = 3.25; break;
+    case 150: angle2value = 3.5; break;
+    case 165: angle2value = 3.75; break;
+    case 180: angle2value = 4; break;
+    default: angle2value = 1; break;}
+    turn2pulse(angle2value);
+    
+}
+
+void Servo::turn2pulse(float value)
+{
+    //0     1
+    //30    1.5
+    //60    2
+    //90    2.5
+    //120   3
+    //150   3.5
+    //180   4
+    if (value < 1)
+    {
+        value = 1;
+    }
+    else if (value > 4)
+    {
+        value = 4;
+    }
+    value = value / 1500;
+    _pwm.pulsewidth(value);
+}
+float Servo::positionRead()
+{
+    return _position;
+}
\ No newline at end of file
diff -r 000000000000 -r 22a971e060ed ServoMotorControl.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ServoMotorControl.h	Sun Sep 24 18:41:24 2017 +0000
@@ -0,0 +1,18 @@
+#ifndef MBED_SERVO_H
+#define MBED_SERVO_H
+
+#include "mbed.h"
+
+class Servo
+{
+public:
+    Servo(PinName pwm);
+    void turn2Angle(int degree);
+    void turn2pulse(float value);
+    float positionRead();
+private:
+    PwmOut _pwm;
+    float _position;
+};
+
+#endif
\ No newline at end of file