Niall Cunningham
/
ME30001_Lab01_Exercise_03a
3a
main.cpp@0:19b4c7ae01ab, 2016-09-23 (annotated)
- Committer:
- NiallCunningham
- Date:
- Fri Sep 23 11:41:35 2016 +0000
- Revision:
- 0:19b4c7ae01ab
3a
;
Who changed what in which revision?
User | Revision | Line number | New 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 | } |