Fa2018-es200-1121-project2-herndon-toss
/
herndon-threaded
Threaded version of Herndon cover toss
main.cpp@0:047ab874a574, 2018-10-22 (annotated)
- Committer:
- evangeli
- Date:
- Mon Oct 22 12:22:52 2018 +0000
- Revision:
- 0:047ab874a574
- Child:
- 3:65416d9052dd
Initial commit - herndon thread test
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
evangeli | 0:047ab874a574 | 1 | /* |
evangeli | 0:047ab874a574 | 2 | ES200 1121 Project 2 Herndon Cover Toss - threaded version |
evangeli | 0:047ab874a574 | 3 | Get threaded! |
evangeli | 0:047ab874a574 | 4 | */ |
evangeli | 0:047ab874a574 | 5 | |
evangeli | 0:047ab874a574 | 6 | #include "mbed.h" |
evangeli | 0:047ab874a574 | 7 | #include "rtos.h" |
evangeli | 0:047ab874a574 | 8 | |
evangeli | 0:047ab874a574 | 9 | #include "stdio.h" |
evangeli | 0:047ab874a574 | 10 | #include "Motor.h" |
evangeli | 0:047ab874a574 | 11 | #include "Servo.h" |
evangeli | 0:047ab874a574 | 12 | |
evangeli | 0:047ab874a574 | 13 | |
evangeli | 0:047ab874a574 | 14 | // Connections to hardware defined here |
evangeli | 0:047ab874a574 | 15 | Serial pc(USBTX,USBRX); // connection to laptop for debugging |
evangeli | 0:047ab874a574 | 16 | Motor m(p26, p30, p29); //launches the cover |
evangeli | 0:047ab874a574 | 17 | Servo herndon_servo(p21); //servo to move monument on turn table |
evangeli | 0:047ab874a574 | 18 | Servo angle(p22); //servo to adjust horizontal angle of arm |
evangeli | 0:047ab874a574 | 19 | DigitalIn herndon_sw1(p25); //moves herndon monument on turn table continuously while switch is on |
evangeli | 0:047ab874a574 | 20 | AnalogIn turn(p15); //turn dial to adjust servo for horizontal angle of arm SWITCH 2 |
evangeli | 0:047ab874a574 | 21 | DigitalIn swtch3(p18); //releases the cover when switch 3 is turned on |
evangeli | 0:047ab874a574 | 22 | DigitalIn swtch4(p19); //retracts arm back to starting position to try again |
evangeli | 0:047ab874a574 | 23 | |
evangeli | 0:047ab874a574 | 24 | //DigitalIn sw1 (p16) ; not sure why this is here - maybe broken pin |
evangeli | 0:047ab874a574 | 25 | |
evangeli | 0:047ab874a574 | 26 | // other variables |
evangeli | 0:047ab874a574 | 27 | int s1, s3, s4, i; |
evangeli | 0:047ab874a574 | 28 | float x; |
evangeli | 0:047ab874a574 | 29 | float y; |
evangeli | 0:047ab874a574 | 30 | |
evangeli | 0:047ab874a574 | 31 | |
evangeli | 0:047ab874a574 | 32 | // Herndon wiggling thread stuff |
evangeli | 0:047ab874a574 | 33 | Thread herndon_thread; // thread to run Herndon in |
evangeli | 0:047ab874a574 | 34 | void herndon_callback(void); // function for driving Herndon |
evangeli | 0:047ab874a574 | 35 | |
evangeli | 0:047ab874a574 | 36 | |
evangeli | 0:047ab874a574 | 37 | |
evangeli | 0:047ab874a574 | 38 | /* |
evangeli | 0:047ab874a574 | 39 | One thread: |
evangeli | 0:047ab874a574 | 40 | herndon sw Switch 1 - turns on and makes the herndon monument move continously |
evangeli | 0:047ab874a574 | 41 | |
evangeli | 0:047ab874a574 | 42 | Analog in turn - for aiming |
evangeli | 0:047ab874a574 | 43 | Switch 3 - release cover |
evangeli | 0:047ab874a574 | 44 | Switch 4 - back to battery (only after relase) |
evangeli | 0:047ab874a574 | 45 | */ |
evangeli | 0:047ab874a574 | 46 | |
evangeli | 0:047ab874a574 | 47 | |
evangeli | 0:047ab874a574 | 48 | int main(void) |
evangeli | 0:047ab874a574 | 49 | { |
evangeli | 0:047ab874a574 | 50 | // setup stuff |
evangeli | 0:047ab874a574 | 51 | pc.printf("ES200 1121 Project 2 Group 3\r\n"); |
evangeli | 0:047ab874a574 | 52 | pc.printf("Herndon Cover Toss Game\r\n"); |
evangeli | 0:047ab874a574 | 53 | pc.printf("main() thread running\r\n"); |
evangeli | 0:047ab874a574 | 54 | herndon_servo.calibrate(0.0009, 90.0); // HiTec HS422 servo ES200/202 numbers |
evangeli | 0:047ab874a574 | 55 | angle.calibrate(0.0009, 90.0); // HiTec HS422 servo ES200/202 numbers |
evangeli | 0:047ab874a574 | 56 | m.speed(0.0); |
evangeli | 0:047ab874a574 | 57 | |
evangeli | 0:047ab874a574 | 58 | // start the Herndon thread |
evangeli | 0:047ab874a574 | 59 | herndon_thread.start(callback(herndon_callback)); |
evangeli | 0:047ab874a574 | 60 | pc.printf("herndon_thread running\r\n"); |
evangeli | 0:047ab874a574 | 61 | |
evangeli | 0:047ab874a574 | 62 | |
evangeli | 0:047ab874a574 | 63 | |
evangeli | 0:047ab874a574 | 64 | |
evangeli | 0:047ab874a574 | 65 | // main loop for user interaction goes here |
evangeli | 0:047ab874a574 | 66 | } // main() |
evangeli | 0:047ab874a574 | 67 | |
evangeli | 0:047ab874a574 | 68 | |
evangeli | 0:047ab874a574 | 69 | |
evangeli | 0:047ab874a574 | 70 | /* |
evangeli | 0:047ab874a574 | 71 | //Adjust horiztonal angle with switch 2/dial |
evangeli | 0:047ab874a574 | 72 | while(1) { |
evangeli | 0:047ab874a574 | 73 | y = turn.read(); //reads the state of the dial the user changes |
evangeli | 0:047ab874a574 | 74 | printf("The dial is at %f\n", x); |
evangeli | 0:047ab874a574 | 75 | angle.write(y); //makes the servo turn according to the dial |
evangeli | 0:047ab874a574 | 76 | printf("The servo is at %f\n", x); |
evangeli | 0:047ab874a574 | 77 | } //end of while loop |
evangeli | 0:047ab874a574 | 78 | |
evangeli | 0:047ab874a574 | 79 | |
evangeli | 0:047ab874a574 | 80 | |
evangeli | 0:047ab874a574 | 81 | swtch3.read(); //read state of switch 3 (launch the cover) |
evangeli | 0:047ab874a574 | 82 | if (swtch3==1) { |
evangeli | 0:047ab874a574 | 83 | while(1) { |
evangeli | 0:047ab874a574 | 84 | printf("motor on"); |
evangeli | 0:047ab874a574 | 85 | m.speed(1.0); |
evangeli | 0:047ab874a574 | 86 | wait (.4); |
evangeli | 0:047ab874a574 | 87 | printf("motor off"); |
evangeli | 0:047ab874a574 | 88 | m.speed(0.0); |
evangeli | 0:047ab874a574 | 89 | wait (1); |
evangeli | 0:047ab874a574 | 90 | break; |
evangeli | 0:047ab874a574 | 91 | } //end of while |
evangeli | 0:047ab874a574 | 92 | } //end of if |
evangeli | 0:047ab874a574 | 93 | |
evangeli | 0:047ab874a574 | 94 | |
evangeli | 0:047ab874a574 | 95 | |
evangeli | 0:047ab874a574 | 96 | |
evangeli | 0:047ab874a574 | 97 | s4 = swtch4.read(); //read state of switch 4 (retract arm to try again) |
evangeli | 0:047ab874a574 | 98 | if (s4 == 1){ |
evangeli | 0:047ab874a574 | 99 | while(1) { |
evangeli | 0:047ab874a574 | 100 | printf("reversed"); |
evangeli | 0:047ab874a574 | 101 | m.speed(-.25); |
evangeli | 0:047ab874a574 | 102 | wait(.6); |
evangeli | 0:047ab874a574 | 103 | printf("motor off"); |
evangeli | 0:047ab874a574 | 104 | m.speed(0); |
evangeli | 0:047ab874a574 | 105 | wait(1); |
evangeli | 0:047ab874a574 | 106 | break; |
evangeli | 0:047ab874a574 | 107 | } //end of while |
evangeli | 0:047ab874a574 | 108 | } //end of if |
evangeli | 0:047ab874a574 | 109 | }//end of int main |
evangeli | 0:047ab874a574 | 110 | */ |
evangeli | 0:047ab874a574 | 111 | |
evangeli | 0:047ab874a574 | 112 | |
evangeli | 0:047ab874a574 | 113 | |
evangeli | 0:047ab874a574 | 114 | |
evangeli | 0:047ab874a574 | 115 | /** Callback for running Herndon wiggling thread as its own self-contained thing |
evangeli | 0:047ab874a574 | 116 | */ |
evangeli | 0:047ab874a574 | 117 | void herndon_callback(void) |
evangeli | 0:047ab874a574 | 118 | { |
evangeli | 0:047ab874a574 | 119 | float x=0.0; // current position of Herndon |
evangeli | 0:047ab874a574 | 120 | float xinc=0.1; // increment to move Herndon each time step |
evangeli | 0:047ab874a574 | 121 | |
evangeli | 0:047ab874a574 | 122 | while(1) { |
evangeli | 0:047ab874a574 | 123 | if (herndon_sw1.read()) { |
evangeli | 0:047ab874a574 | 124 | x = x + xinc; |
evangeli | 0:047ab874a574 | 125 | if (x > 1.0) { |
evangeli | 0:047ab874a574 | 126 | x = 1.0; |
evangeli | 0:047ab874a574 | 127 | xinc = -0.1; |
evangeli | 0:047ab874a574 | 128 | } // hit the right end |
evangeli | 0:047ab874a574 | 129 | else if (x < 0.0) { |
evangeli | 0:047ab874a574 | 130 | x = 0.0; |
evangeli | 0:047ab874a574 | 131 | xinc = 0.1; |
evangeli | 0:047ab874a574 | 132 | } // hit the left end |
evangeli | 0:047ab874a574 | 133 | herndon_servo.write(x); |
evangeli | 0:047ab874a574 | 134 | } // s1 is on |
evangeli | 0:047ab874a574 | 135 | |
evangeli | 0:047ab874a574 | 136 | else { |
evangeli | 0:047ab874a574 | 137 | herndon_servo.write(0.0); |
evangeli | 0:047ab874a574 | 138 | } // s1 if off |
evangeli | 0:047ab874a574 | 139 | |
evangeli | 0:047ab874a574 | 140 | ThisThread::sleep_for(200); // change this number if too fast or too slow |
evangeli | 0:047ab874a574 | 141 | } // while(1) |
evangeli | 0:047ab874a574 | 142 | |
evangeli | 0:047ab874a574 | 143 | }// herndon_callback() |