Craig Evans
/
MeArm_Servo_Calibration
Servo calibration code
main.cpp@1:a9852a93d829, 2017-07-11 (annotated)
- Committer:
- eencae
- Date:
- Tue Jul 11 09:10:31 2017 +0000
- Revision:
- 1:a9852a93d829
- Parent:
- 0:68133f5cdfa0
Updated minimum servo range.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
eencae | 0:68133f5cdfa0 | 1 | /* MeArm Servo Calibration |
eencae | 0:68133f5cdfa0 | 2 | |
eencae | 0:68133f5cdfa0 | 3 | (c) Dr Craig A. Evans, University of Leeds |
eencae | 0:68133f5cdfa0 | 4 | |
eencae | 0:68133f5cdfa0 | 5 | July 2017 |
eencae | 0:68133f5cdfa0 | 6 | |
eencae | 0:68133f5cdfa0 | 7 | */ |
eencae | 0:68133f5cdfa0 | 8 | |
eencae | 0:68133f5cdfa0 | 9 | #include "mbed.h" |
eencae | 0:68133f5cdfa0 | 10 | |
eencae | 0:68133f5cdfa0 | 11 | // pins for potentiometers |
eencae | 0:68133f5cdfa0 | 12 | AnalogIn m_pot(p17); |
eencae | 0:68133f5cdfa0 | 13 | AnalogIn l_pot(p18); |
eencae | 0:68133f5cdfa0 | 14 | AnalogIn r_pot(p19); |
eencae | 0:68133f5cdfa0 | 15 | AnalogIn c_pot(p20); |
eencae | 0:68133f5cdfa0 | 16 | |
eencae | 0:68133f5cdfa0 | 17 | // PWM pins for servos |
eencae | 0:68133f5cdfa0 | 18 | PwmOut m_servo(p21); |
eencae | 0:68133f5cdfa0 | 19 | PwmOut l_servo(p22); |
eencae | 0:68133f5cdfa0 | 20 | PwmOut r_servo(p23); |
eencae | 0:68133f5cdfa0 | 21 | PwmOut c_servo(p24); |
eencae | 0:68133f5cdfa0 | 22 | |
eencae | 0:68133f5cdfa0 | 23 | int main() |
eencae | 0:68133f5cdfa0 | 24 | { |
eencae | 0:68133f5cdfa0 | 25 | |
eencae | 0:68133f5cdfa0 | 26 | m_servo.period_ms(20); // 20 ms = 50 Hz |
eencae | 0:68133f5cdfa0 | 27 | // all PWM channels share the same period and so only need to set one of them |
eencae | 0:68133f5cdfa0 | 28 | |
eencae | 0:68133f5cdfa0 | 29 | // keep looping forever |
eencae | 0:68133f5cdfa0 | 30 | while(1) { |
eencae | 0:68133f5cdfa0 | 31 | |
eencae | 0:68133f5cdfa0 | 32 | // read val in range 0.0 to 1.0 |
eencae | 0:68133f5cdfa0 | 33 | float m_pot_val = m_pot.read(); |
eencae | 0:68133f5cdfa0 | 34 | // create a pulse-width value in range 400 to 3000us |
eencae | 0:68133f5cdfa0 | 35 | int m_pot_pulse_us = int(400.0 + m_pot_val*2600.0); |
eencae | 0:68133f5cdfa0 | 36 | m_servo.pulsewidth_us(m_pot_pulse_us); |
eencae | 0:68133f5cdfa0 | 37 | |
eencae | 0:68133f5cdfa0 | 38 | // repeat for other servos |
eencae | 0:68133f5cdfa0 | 39 | float l_pot_val = l_pot.read(); |
eencae | 1:a9852a93d829 | 40 | int l_pot_pulse_us = int(400.0 + l_pot_val*2600.0); |
eencae | 0:68133f5cdfa0 | 41 | l_servo.pulsewidth_us(l_pot_pulse_us); |
eencae | 0:68133f5cdfa0 | 42 | |
eencae | 0:68133f5cdfa0 | 43 | float r_pot_val = r_pot.read(); |
eencae | 1:a9852a93d829 | 44 | int r_pot_pulse_us = int(400.0 + r_pot_val*2600.0); |
eencae | 0:68133f5cdfa0 | 45 | r_servo.pulsewidth_us(r_pot_pulse_us); |
eencae | 0:68133f5cdfa0 | 46 | |
eencae | 0:68133f5cdfa0 | 47 | float c_pot_val = c_pot.read(); |
eencae | 1:a9852a93d829 | 48 | int c_pot_pulse_us = int(400.0 + c_pot_val*2600.0); |
eencae | 0:68133f5cdfa0 | 49 | c_servo.pulsewidth_us(c_pot_pulse_us); |
eencae | 0:68133f5cdfa0 | 50 | |
eencae | 0:68133f5cdfa0 | 51 | // print the values to the PC terminal |
eencae | 0:68133f5cdfa0 | 52 | 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); |
eencae | 0:68133f5cdfa0 | 53 | |
eencae | 0:68133f5cdfa0 | 54 | // delay as we don't want to update the servos too often |
eencae | 0:68133f5cdfa0 | 55 | wait_ms(200); |
eencae | 0:68133f5cdfa0 | 56 | } |
eencae | 0:68133f5cdfa0 | 57 | } |