Servo position controlled by potvalue
Dependencies: Servo
Diff: main.cpp
- Revision:
- 1:34cea73289c4
- Parent:
- 0:fe46ce7f03d3
- Child:
- 3:640691434e7e
diff -r fe46ce7f03d3 -r 34cea73289c4 main.cpp --- 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; } }