Servo calibration code

Dependencies:   mbed

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?

UserRevisionLine numberNew 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 }