Craig Evans
/
MeArm_Servo_Calibration
Servo calibration code
Diff: main.cpp
- Revision:
- 0:68133f5cdfa0
- Child:
- 1:a9852a93d829
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Tue Jul 04 15:52:22 2017 +0000 @@ -0,0 +1,57 @@ +/* MeArm Servo Calibration + +(c) Dr Craig A. Evans, University of Leeds + +July 2017 + +*/ + +#include "mbed.h" + +// pins for potentiometers +AnalogIn m_pot(p17); +AnalogIn l_pot(p18); +AnalogIn r_pot(p19); +AnalogIn c_pot(p20); + +// PWM pins for servos +PwmOut m_servo(p21); +PwmOut l_servo(p22); +PwmOut r_servo(p23); +PwmOut c_servo(p24); + +int main() +{ + + m_servo.period_ms(20); // 20 ms = 50 Hz + // all PWM channels share the same period and so only need to set one of them + + // keep looping forever + while(1) { + + // read val in range 0.0 to 1.0 + float m_pot_val = m_pot.read(); + // create a pulse-width value in range 400 to 3000us + int m_pot_pulse_us = int(400.0 + m_pot_val*2600.0); + m_servo.pulsewidth_us(m_pot_pulse_us); + + // repeat for other servos + float l_pot_val = l_pot.read(); + int l_pot_pulse_us = int(600.0 + l_pot_val*2600.0); + l_servo.pulsewidth_us(l_pot_pulse_us); + + float r_pot_val = r_pot.read(); + int r_pot_pulse_us = int(600.0 + r_pot_val*2600.0); + r_servo.pulsewidth_us(r_pot_pulse_us); + + float c_pot_val = c_pot.read(); + int c_pot_pulse_us = int(600.0 + c_pot_val*2600.0); + c_servo.pulsewidth_us(c_pot_pulse_us); + + // print the values to the PC terminal + printf("M=%i L=%i R=%i C=%i\n",m_pot_pulse_us,l_pot_pulse_us,r_pot_pulse_us,c_pot_pulse_us); + + // delay as we don't want to update the servos too often + wait_ms(200); + } +}