linear actuator
Dependencies: Motor PinDetect mbed
Fork of xbee_robot by
Diff: main.cpp
- Revision:
- 2:9a9fbbf43957
- Parent:
- 1:57f1410e9614
- Child:
- 3:473269e5a06f
--- a/main.cpp Tue Feb 23 00:31:03 2016 +0000 +++ b/main.cpp Wed Feb 24 16:48:50 2016 +0000 @@ -1,42 +1,27 @@ //Linear Actuator to control the moving rod. - +/* #include "mbed.h" #include "Motor.h" #include "PinDetect.h" - float moving_time1 = 15.0; //we control the Table Actuator stop position by play with the moving time1; longer rising time,higher stop position float moving_time2 = 20.0; //we control the Connector Actuator stop position by play with the moving time2; longer rising time,higher stop position float charging_time = 20.0; //the time needed to charge the battery, during which the Connector Actuator will stay at its highest position float wait_time = 3.0; //time waiting for the drone to slide to the triangle hindge float hold_time = 3.0; //the time during which the Table Actuator will stay at its highest position after disconnected the connector - +int running_schedule = 0; //0-resting 1-running the schedule +int reset = 0; Motor m1(p21, p27, p28); // pwm, fwd, rev //Table Actuator Motor m2(p22, p10, p9); // pwm, fwd, rev //Connector Actuator -InterruptIn load_sensor(p5); - +PinDetect load_sensor(p5); PinDetect start(p6); PinDetect reset(p7); -void start_the_schedual(){ - m1.speed(1); //Table Actuator Going Up - wait(moving_time1); - m1.speed(0); //Table Actuator Stops at its Highest Position - wait(wait_time); //Waiting for the quadcoptor to slide into the triangle hindge - m2.speed(1); //Connector Actuator Going Up - wait(moving_time2); - m2.speed(0); //Connector Actuator Stops at its Highest Position - wait(charging_time); //Waiting for the battery to charging - m2.speed(-1); //Connector Actuator Goging down - wait(moving_time2); - m2.speed(0); //Connector Actuator Stops at the start position - wait(hold_time); //Waiting for the quadcoptpr to take off - m1.speed(-1); //Connector Actuator Goging down - wait(moving_time1); - m1.speed(0); //Table Actuator Stops at the start position +void start_the_schedule(){ + running_schedule = 1; //when the load sensor sense the drone or the start putton is pressed, change to 1; } -/* + void reset_to_zero(){ m2.speed(-1); //Connector Actuator Goging down wait(moving_time2); @@ -45,29 +30,178 @@ wait(moving_time1); m1.speed(0); //Table Actuator Stops at the start position } -*/ + void reset_to_zero(){ + reset = 1; //reset now gets priority m2.speed(-1); m1.speed(-1); //Connector Actuator Goging down wait(moving_time2); - m2.speed(0); //Connector Actuator Stops at the start position - m1.speed(0); //Table Actuator Stops at the start position + m2.speed(0); //Connector Actuator Stops at the start position + m1.speed(0); //Table Actuator Stops at the start position } int main() { + load_sensor.mode(PullUp); wait(0.01); + load_sensor.attach_deasserted(&start_the_schedule); + load_sensor.setSampleFrequency(); start.mode(PullUp); wait(0.01); - start.attach_deasserted(&start_the_schedual); + start.attach_deasserted(&start_the_schedule); start.setSampleFrequency(); reset.mode(PullUp); wait(0.01); reset.attach_deasserted(&reset_to_zero); reset.setSampleFrequency(); - //load_sensor.fall(&start_the_schedual); - //start.fall(&start_the_schedual); - //reset.fall(&reset_to_zero); + while(1) { - - + while(running_schedule){ + if(reset) break; + m1.speed(1); //Table Actuator Going Up + wait(moving_time1); + m1.speed(0); //Table Actuator Stops at its Highest Position + if(reset) break; + wait(wait_time); //Waiting for the quadcoptor to slide into the triangle hindge + if(reset) break; + m2.speed(1); //Connector Actuator Going Up + wait(moving_time2); + m2.speed(0); //Connector Actuator Stops at its Highest Position + if(reset) break; + wait(charging_time); //Waiting for the battery to charging + if(reset) break; + m2.speed(-1); //Connector Actuator Goging down + wait(moving_time2); + m2.speed(0); //Connector Actuator Stops at the start position + if(reset) break; + wait(hold_time); //Waiting for the quadcoptpr to take off + if(reset) break; + m1.speed(-1); //Connector Actuator Goging down + wait(moving_time1); + m1.speed(0); //Table Actuator Stops at the start position + running_schedule = 0; //change back to resting after finished the whole loop + } + reset = 0; //Either finishe the schedual natually, or break from the loop, set reset back to 0 + running_schedule = 0; //and rest the system } } + +*/ + +#include "mbed.h" +#include "Motor.h" +#include "PinDetect.h" + +float moving_time1 = 15.0; //we control the Table Actuator stop position by play with the moving time1; longer rising time,higher stop position +float moving_time2 = 20.0; //we control the Connector Actuator stop position by play with the moving time2; longer rising time,higher stop position +float charging_time = 20.0; //the time needed to charge the battery, during which the Connector Actuator will stay at its highest position +float wait_time = 3.0; //time waiting for the drone to slide to the triangle hindge +float hold_time = 3.0; //the time during which the Table Actuator will stay at its highest position after disconnected the connector +bool running_schedule = 0; //0- the system is resting 1-running schedule +bool is_reset=0; // Used to activate reset function + +const float pulse_width = 0.2; // Define width of the pulse + +Motor m1(p21, p27, p28); // pwm, fwd, rev //Table Actuator +Motor m2(p22, p10, p9); // pwm, fwd, rev //Connector Actuator +PinDetect load_sensor(p5); +PinDetect start(p6); +PinDetect reset(p7); + + + +//********************************************* Pb Interrupt Functions ************************************************** + +void start_the_schedule() +{ + running_schedule = 1; //when the load sensor sense the drone or the start putton is pressed, change to 1; +} + +void break_loop() +{ + is_reset = 1; // intterup to reset +} + +//********************************************* Actuator Control Functions ************************************************** +void raise(Motor& m,const float& pls_wid) +{ //send a rising command pulse to Motor m + m.speed(1); + wait(pls_wid); + m.speed(0); +} + +void fall(Motor& m,const float& pls_wid) +{ //send a falling command pulse to Motor m + m.speed(-1); + wait(pulse_width); + m.speed(0); +} + +void hold() +{ //send a wait command pulse + wait(0.2); +} + +//********************************************* Functions for Base Station System ********************************************************* +void reset_schedule() +{ + for(int i = 0; i<(moving_time2/pulse_width);i++){ + fall(m2,pulse_width); + } + for(int i = 0; i<(moving_time1/pulse_width);i++){ + fall(m1,pulse_width); + } + is_reset = 0; +} + +void schedule() +{ + for(int i=0;i<(moving_time1/pulse_width);i++) //Table Actuator lift the table up + { if(is_reset){reset_schedule();return;} + raise(m1,pulse_width); + } + for(int i=0;i<(wait_time/pulse_width);i++) //Waiting for the quadcoptor to slide into the triangle hindge + { if(is_reset){reset_schedule();return;} + hold(); + } + for(int i = 0; i<(moving_time2/pulse_width);i++) //Connector Actuator lifts up + { if(is_reset){reset_schedule();return;} + raise(m2,pulse_width); + } + for(int i=0;i<(charging_time/pulse_width);i++) //Waiting for the battery to charge + { if(is_reset){reset_schedule();return;} + hold(); + } + for(int i = 0; i<(moving_time2/pulse_width);i++) //Connector Actuator goes down + { if(is_reset){reset_schedule();return;} + fall(m2,pulse_width); + } + for(int i=0;i<(hold_time/pulse_width);i++) //Waiting for the quadcoptpr to take off + { if(is_reset){reset_schedule();return;} + hold(); + } + for(int i = 0; i<(moving_time1/pulse_width);i++) //Table Actuator goes down + { if(is_reset){reset_schedule();return;} + fall(m1,pulse_width); + } +} + +//********************************************* Main Function ********************************************************* +int main() +{ + //init interuppt + load_sensor.mode(PullUp); wait(0.01); + load_sensor.attach_deasserted(&start_the_schedule); + load_sensor.setSampleFrequency(); + start.mode(PullUp); wait(0.01); + start.attach_deasserted(&start_the_schedule); + start.setSampleFrequency(); + reset.mode(PullUp); wait(0.01); + reset.attach_deasserted(&break_loop); + reset.setSampleFrequency(); + while(1){ + if(running_schedule){ + schedule(); + running_schedule = 0; //return to rest after finish the schedule + } + } +} +