Servo position controlled by potvalue

Dependencies:   Servo

Revision:
1:34cea73289c4
Parent:
0:fe46ce7f03d3
Child:
3:640691434e7e
--- a/main.cpp	Mon Oct 02 12:56:23 2017 +0000
+++ b/main.cpp	Thu Oct 12 14:33:50 2017 +0000
@@ -4,31 +4,63 @@
 */ 
 
 #include <mbed.h>
-//#include <Servo.h> either one can be used, but not both at the same time
-#include <VarSpeedServo.h>
+#include <Servo.h> 
+#include <MODSERIAL.h>
+//#include <VarSpeedServo.h>
+
+PwmOut PWM1(D7);
+MODSERIAL pc(USBTX,USBRX);
+AnalogIn pot(A1);
+Ticker potmeterreadout;
+
+/* int PWMfreq(void) {
+PWM1.period(0.020); // set PWM period to 10 ms
+PWM1=0.5; // set duty cycle to 50%
+}
+*/
 
-Servo myservo(p21);
-Serial pc(USBTX, USBRX);
- 
+Servo myservo(D7);
+volatile float potvalue = 0.0;
+float range_servo = 0.001;
+float position_servo = 0.05;
+float servo_period = 0.01f;
+
+void readpot(){
+    potvalue = pot.read();
+    //position = motor1.getPosition();
+    pc.printf("reference position = %.2f\r", potvalue);
+    myservo.calibrate(range_servo, 55.0); 
+    myservo = potvalue;
+    //motorpid = PID(potvalue - position, M1_KP, M1_KI, M1_KD, M1_TS, m1_err_int, m1_prev_err, m1_f_v1, m1_f_v2, M1_F_A1, M1_F_A2, M1_F_B0, M1_F_B1, M1_F_B2);
+    }
+ // output PID controller is not yet tested.
+
+
 int main() {
     printf("Servo Calibration Controls:\n");
     printf("1,2,3 - Position Servo (full left, middle, full right)\n");
     printf("4,5 - Decrease or Increase range\n");
  
-    float range = 0.0005;
-    float position = 0.5;
+    float range_servo = 0.0008;
+    float position_servo = 0.5;
+    
+    pc.baud(9600);
+    potmeterreadout.attach(readpot,0.05f);
+    PWM1.period(servo_period);
     
-    while(1) {                   
-        switch(pc.getc()) { // Switch to change position or increase range
-            case '1': position = 0.0; break;
-            case '2': position = 0.5; break;
-            case '3': position = 1.0; break;
-            case '4': range += 0.0001; break; 
-            case '5': range -= 0.0001; break; 
+    while(1){            
+        // Safety features to override potvalue       
+        /*switch(pc.getc()) {
+            case '1': position_servo = 0.0; break;
+            case '2': position_servo = 0.5; break;
+            case '3': position_servo = 1.0; break;
+            case '4': range_servo += 0.0001; break; 
+            case '5': range_servo -= 0.0001; break; 
         }
-        printf("position = %.1f, range = +/-%0.4f\n", position, range);
-        myservo.calibrate(range, 45.0); 
-        myservo = position;
+        */
+        //printf("position = %.1f, range = +/-%0.4f\r", position_servo, range_servo);
+        //myservo.calibrate(range_servo, 110.0); 
+        //myservo = position_servo;
     }
 }