3a

Dependencies:   Servo mbed

Committer:
NiallCunningham
Date:
Fri Sep 23 11:41:35 2016 +0000
Revision:
0:19b4c7ae01ab
3a
;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
NiallCunningham 0:19b4c7ae01ab 1
NiallCunningham 0:19b4c7ae01ab 2
NiallCunningham 0:19b4c7ae01ab 3
NiallCunningham 0:19b4c7ae01ab 4
NiallCunningham 0:19b4c7ae01ab 5
NiallCunningham 0:19b4c7ae01ab 6
NiallCunningham 0:19b4c7ae01ab 7 #include "mbed.h"
NiallCunningham 0:19b4c7ae01ab 8 #include "Servo.h"
NiallCunningham 0:19b4c7ae01ab 9 Serial pc(USBTX, USBRX); // USB serial interface
NiallCunningham 0:19b4c7ae01ab 10 Servo cr_srv(p21); // continuous rotation hobby servo
NiallCunningham 0:19b4c7ae01ab 11 Servo std_srv(p22); // standard hobby servo
NiallCunningham 0:19b4c7ae01ab 12 #define CR_SCALE 12.0
NiallCunningham 0:19b4c7ae01ab 13 void init_servo() {
NiallCunningham 0:19b4c7ae01ab 14 // calibrate the servos for +/-5ms over +/-45deg
NiallCunningham 0:19b4c7ae01ab 15 cr_srv.calibrate(0.0005,45);
NiallCunningham 0:19b4c7ae01ab 16 std_srv.calibrate(0.0005,45);
NiallCunningham 0:19b4c7ae01ab 17 }
NiallCunningham 0:19b4c7ae01ab 18
NiallCunningham 0:19b4c7ae01ab 19 int main() {
NiallCunningham 0:19b4c7ae01ab 20
NiallCunningham 0:19b4c7ae01ab 21 float pos_val=0.5; // variable to hold position values
NiallCunningham 0:19b4c7ae01ab 22 float step_size=0.01; // position increment/decrement value
NiallCunningham 0:19b4c7ae01ab 23 float cr_srv_cmd=0.5; // continuous rotation servo command value (range: 0.0 - 1.0)
NiallCunningham 0:19b4c7ae01ab 24 float std_srv_cmd=0.5; // standard servo command value (range: 0.0 - 1.0)
NiallCunningham 0:19b4c7ae01ab 25
NiallCunningham 0:19b4c7ae01ab 26 // set the USB serial interface baud rate
NiallCunningham 0:19b4c7ae01ab 27 pc.baud(921600);
NiallCunningham 0:19b4c7ae01ab 28
NiallCunningham 0:19b4c7ae01ab 29 init_servo();
NiallCunningham 0:19b4c7ae01ab 30
NiallCunningham 0:19b4c7ae01ab 31 while(1) {
NiallCunningham 0:19b4c7ae01ab 32 // use a sin function to create an oscillating servo postion with values
NiallCunningham 0:19b4c7ae01ab 33 // between 0.0 and 1.0 for the standard servo
NiallCunningham 0:19b4c7ae01ab 34 std_srv_cmd = sin(pos_val*2*3.14159)/2.0+0.5;
NiallCunningham 0:19b4c7ae01ab 35 // use a smaller scale for the continuous rotation servo, due to its limited sensitivity
NiallCunningham 0:19b4c7ae01ab 36 cr_srv_cmd = sin(pos_val*2*3.14159)/CR_SCALE+0.515;
NiallCunningham 0:19b4c7ae01ab 37
NiallCunningham 0:19b4c7ae01ab 38 // sernd the servo command to the servos themselves
NiallCunningham 0:19b4c7ae01ab 39 cr_srv.write(cr_srv_cmd); // write to the continuous rotation servo
NiallCunningham 0:19b4c7ae01ab 40 std_srv.write(std_srv_cmd); // write to the standard servo
NiallCunningham 0:19b4c7ae01ab 41
NiallCunningham 0:19b4c7ae01ab 42 // export the readings to a terminal program via the USB cable
NiallCunningham 0:19b4c7ae01ab 43 pc.printf("pos value: %6.4f, cr servo: %6.4f std servo: %6.4f\r", pos_val, cr_srv_cmd,
NiallCunningham 0:19b4c7ae01ab 44 std_srv_cmd);
NiallCunningham 0:19b4c7ae01ab 45
NiallCunningham 0:19b4c7ae01ab 46 pos_val = pos_val + step_size; // increment/decrement the position
NiallCunningham 0:19b4c7ae01ab 47 if (pos_val > 1.0) pos_val = 0.0; // if the position is out of bounds, reset the pos value
NiallCunningham 0:19b4c7ae01ab 48
NiallCunningham 0:19b4c7ae01ab 49 wait(0.250); // wait for 0.25s to give time for the display to show
NiallCunningham 0:19b4c7ae01ab 50 }
NiallCunningham 0:19b4c7ae01ab 51 }