Operates two RC servos moving in windshield wiper-like fashion while simultaneously running a DC motor in forward and reverse in sequence with the servos.
Dependencies: Motor Servo mbed
servo_main.cpp@0:34bcf10d435c, 2015-02-26 (annotated)
- Committer:
- mamaleoni
- Date:
- Thu Feb 26 13:41:45 2015 +0000
- Revision:
- 0:34bcf10d435c
no changes made
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
mamaleoni | 0:34bcf10d435c | 1 | /************************************************************* |
mamaleoni | 0:34bcf10d435c | 2 | PROGRAM NAME: SY202 mbed Lab 07 Part C |
mamaleoni | 0:34bcf10d435c | 3 | |
mamaleoni | 0:34bcf10d435c | 4 | DESCRIPTION: The following program operates two RC servo |
mamaleoni | 0:34bcf10d435c | 5 | motors moving in windshield wiper-like fashion |
mamaleoni | 0:34bcf10d435c | 6 | while simultaneously powering a DC motor in |
mamaleoni | 0:34bcf10d435c | 7 | forward and reverse. |
mamaleoni | 0:34bcf10d435c | 8 | |
mamaleoni | 0:34bcf10d435c | 9 | CREATED BY: MIDN 3/C Jordan DiPaola |
mamaleoni | 0:34bcf10d435c | 10 | |
mamaleoni | 0:34bcf10d435c | 11 | Library provided by mbed.org |
mamaleoni | 0:34bcf10d435c | 12 | |
mamaleoni | 0:34bcf10d435c | 13 | SOURCES: SY202 Lecture presentations and mbed cookbook for |
mamaleoni | 0:34bcf10d435c | 14 | general code structure |
mamaleoni | 0:34bcf10d435c | 15 | *************************************************************/ |
mamaleoni | 0:34bcf10d435c | 16 | |
mamaleoni | 0:34bcf10d435c | 17 | /**********required includes and initial declarations**********/ |
mamaleoni | 0:34bcf10d435c | 18 | |
mamaleoni | 0:34bcf10d435c | 19 | //required includes with motor declarations |
mamaleoni | 0:34bcf10d435c | 20 | #include "mbed.h" |
mamaleoni | 0:34bcf10d435c | 21 | #include "Motor.h" |
mamaleoni | 0:34bcf10d435c | 22 | |
mamaleoni | 0:34bcf10d435c | 23 | //Motor declaration |
mamaleoni | 0:34bcf10d435c | 24 | Motor dcmotor(p23, p24, p25); |
mamaleoni | 0:34bcf10d435c | 25 | |
mamaleoni | 0:34bcf10d435c | 26 | //required includes with servo declarations |
mamaleoni | 0:34bcf10d435c | 27 | #include "Servo.h" |
mamaleoni | 0:34bcf10d435c | 28 | |
mamaleoni | 0:34bcf10d435c | 29 | //serial declaration |
mamaleoni | 0:34bcf10d435c | 30 | Serial pc(USBTX, USBRX); |
mamaleoni | 0:34bcf10d435c | 31 | Servo myServo1(p21); |
mamaleoni | 0:34bcf10d435c | 32 | Servo myServo2(p22); |
mamaleoni | 0:34bcf10d435c | 33 | |
mamaleoni | 0:34bcf10d435c | 34 | /**********main function**********/ |
mamaleoni | 0:34bcf10d435c | 35 | |
mamaleoni | 0:34bcf10d435c | 36 | int main() |
mamaleoni | 0:34bcf10d435c | 37 | { //calibrate both servos for PW of |
mamaleoni | 0:34bcf10d435c | 38 | //0.0018 and a full range of |
mamaleoni | 0:34bcf10d435c | 39 | //motion approximately 180 degrees |
mamaleoni | 0:34bcf10d435c | 40 | myServo1.calibrate(0.0009, 90); |
mamaleoni | 0:34bcf10d435c | 41 | myServo2.calibrate(0.0009, 90); |
mamaleoni | 0:34bcf10d435c | 42 | |
mamaleoni | 0:34bcf10d435c | 43 | //declare initial servo positions |
mamaleoni | 0:34bcf10d435c | 44 | myServo1 = 0.0; |
mamaleoni | 0:34bcf10d435c | 45 | myServo2 = 1.0; |
mamaleoni | 0:34bcf10d435c | 46 | |
mamaleoni | 0:34bcf10d435c | 47 | //initialize servo position values and motor speed |
mamaleoni | 0:34bcf10d435c | 48 | float pos1 = 1.0; |
mamaleoni | 0:34bcf10d435c | 49 | float pos2 = 0.0; |
mamaleoni | 0:34bcf10d435c | 50 | float i = 0.2; |
mamaleoni | 0:34bcf10d435c | 51 | |
mamaleoni | 0:34bcf10d435c | 52 | while(1) { |
mamaleoni | 0:34bcf10d435c | 53 | //for the servos in forward |
mamaleoni | 0:34bcf10d435c | 54 | //and the motor running forward |
mamaleoni | 0:34bcf10d435c | 55 | while(pos1 >= 0 && pos2 <= 1) { |
mamaleoni | 0:34bcf10d435c | 56 | |
mamaleoni | 0:34bcf10d435c | 57 | pos1 -= 0.0025; |
mamaleoni | 0:34bcf10d435c | 58 | pos2 += 0.0025; |
mamaleoni | 0:34bcf10d435c | 59 | |
mamaleoni | 0:34bcf10d435c | 60 | myServo1 = pos1; |
mamaleoni | 0:34bcf10d435c | 61 | myServo2 = pos2; |
mamaleoni | 0:34bcf10d435c | 62 | |
mamaleoni | 0:34bcf10d435c | 63 | dcmotor.speed(i); |
mamaleoni | 0:34bcf10d435c | 64 | //time increments to result |
mamaleoni | 0:34bcf10d435c | 65 | //in 5 sec total for this sequence |
mamaleoni | 0:34bcf10d435c | 66 | wait(0.0125); |
mamaleoni | 0:34bcf10d435c | 67 | |
mamaleoni | 0:34bcf10d435c | 68 | } |
mamaleoni | 0:34bcf10d435c | 69 | //for the servos in reverse |
mamaleoni | 0:34bcf10d435c | 70 | //and the motor running reverse |
mamaleoni | 0:34bcf10d435c | 71 | while(pos1 <= 1 && pos2 >= 0) { |
mamaleoni | 0:34bcf10d435c | 72 | pos1 += 0.0025; |
mamaleoni | 0:34bcf10d435c | 73 | pos2 -= 0.0025; |
mamaleoni | 0:34bcf10d435c | 74 | |
mamaleoni | 0:34bcf10d435c | 75 | myServo1 = pos1; |
mamaleoni | 0:34bcf10d435c | 76 | myServo2 = pos2; |
mamaleoni | 0:34bcf10d435c | 77 | |
mamaleoni | 0:34bcf10d435c | 78 | dcmotor.speed(i * (-1.0)); |
mamaleoni | 0:34bcf10d435c | 79 | //time increments to result |
mamaleoni | 0:34bcf10d435c | 80 | //in 5 sec total for this sequence |
mamaleoni | 0:34bcf10d435c | 81 | wait(0.0125); |
mamaleoni | 0:34bcf10d435c | 82 | } |
mamaleoni | 0:34bcf10d435c | 83 | //increment the motor speed |
mamaleoni | 0:34bcf10d435c | 84 | //before next while-loop-sequence |
mamaleoni | 0:34bcf10d435c | 85 | if(i <= 1) { |
mamaleoni | 0:34bcf10d435c | 86 | i = i + 0.1; |
mamaleoni | 0:34bcf10d435c | 87 | } |
mamaleoni | 0:34bcf10d435c | 88 | } |
mamaleoni | 0:34bcf10d435c | 89 | } |