a simple code for elevator
Dependencies: PinDetect mbed Servo
speed.cpp@0:85829f7bbe62, 2012-06-04 (annotated)
- Committer:
- kemken
- Date:
- Mon Jun 04 13:51:43 2012 +0000
- Revision:
- 0:85829f7bbe62
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
kemken | 0:85829f7bbe62 | 1 | /* |
kemken | 0:85829f7bbe62 | 2 | * PROGRAM RESPONSIBLE FOR open/close door. |
kemken | 0:85829f7bbe62 | 3 | * ^^^^^^^ ^^^^^^^^^^^ ^^^ ^^^^^^^^^^ ^^^^ |
kemken | 0:85829f7bbe62 | 4 | * |
kemken | 0:85829f7bbe62 | 5 | * FILE NAME: speed.cpp |
kemken | 0:85829f7bbe62 | 6 | * USAGE: program that control the speed of servo motor. |
kemken | 0:85829f7bbe62 | 7 | */ |
kemken | 0:85829f7bbe62 | 8 | |
kemken | 0:85829f7bbe62 | 9 | |
kemken | 0:85829f7bbe62 | 10 | /* |
kemken | 0:85829f7bbe62 | 11 | * including the wanted library files. |
kemken | 0:85829f7bbe62 | 12 | */ |
kemken | 0:85829f7bbe62 | 13 | #include "mbed.h" |
kemken | 0:85829f7bbe62 | 14 | #include "speed.h" |
kemken | 0:85829f7bbe62 | 15 | #include "Servo.h" |
kemken | 0:85829f7bbe62 | 16 | |
kemken | 0:85829f7bbe62 | 17 | /*--------------------------*\ |
kemken | 0:85829f7bbe62 | 18 | * defineding the variables* |
kemken | 0:85829f7bbe62 | 19 | \*--------------------------*/ |
kemken | 0:85829f7bbe62 | 20 | float varying_speed; |
kemken | 0:85829f7bbe62 | 21 | float speed_now; |
kemken | 0:85829f7bbe62 | 22 | int delta_time; |
kemken | 0:85829f7bbe62 | 23 | |
kemken | 0:85829f7bbe62 | 24 | Ticker motor_timer;/* using ticker class which repeatedly call a function*/ |
kemken | 0:85829f7bbe62 | 25 | Servo motor_speed(p26); // Servo PinName (pin) |
kemken | 0:85829f7bbe62 | 26 | |
kemken | 0:85829f7bbe62 | 27 | void motor (float speed, int time) { // void FunctionName (speed between 0-1, time in mS) |
kemken | 0:85829f7bbe62 | 28 | // function responsible of increasing or decreasing the speed of the elevator softly |
kemken | 0:85829f7bbe62 | 29 | if (time) { |
kemken | 0:85829f7bbe62 | 30 | varying_speed= (speed - speed_now)/float (time); |
kemken | 0:85829f7bbe62 | 31 | delta_time=time; |
kemken | 0:85829f7bbe62 | 32 | /*---- Print message: shows motor speed at this point ------------------------------------*/ |
kemken | 0:85829f7bbe62 | 33 | printf("Motor going to speed %f over %f seconds\n",speed,float(time)/1000); |
kemken | 0:85829f7bbe62 | 34 | } else { |
kemken | 0:85829f7bbe62 | 35 | motor_speed = speed; |
kemken | 0:85829f7bbe62 | 36 | /*---- Print message: shows motor speed at this point ------------------------------------*/ |
kemken | 0:85829f7bbe62 | 37 | printf("Motor at speed %f now\n",speed); |
kemken | 0:85829f7bbe62 | 38 | speed_now=speed; |
kemken | 0:85829f7bbe62 | 39 | } |
kemken | 0:85829f7bbe62 | 40 | } |
kemken | 0:85829f7bbe62 | 41 | |
kemken | 0:85829f7bbe62 | 42 | void motor_update (void) { // function responsible of checking the speed is within servo rang (0-1) |
kemken | 0:85829f7bbe62 | 43 | if (delta_time) { |
kemken | 0:85829f7bbe62 | 44 | |
kemken | 0:85829f7bbe62 | 45 | speed_now = speed_now + varying_speed; // event at reverst direction, this formela is removing the minus (all the result is positive) |
kemken | 0:85829f7bbe62 | 46 | /* putting the speed in rang between 0 to 1 */ |
kemken | 0:85829f7bbe62 | 47 | if (speed_now>1.0) { |
kemken | 0:85829f7bbe62 | 48 | speed_now =1; |
kemken | 0:85829f7bbe62 | 49 | } |
kemken | 0:85829f7bbe62 | 50 | if (speed_now<0.0) { |
kemken | 0:85829f7bbe62 | 51 | speed_now=0; |
kemken | 0:85829f7bbe62 | 52 | } |
kemken | 0:85829f7bbe62 | 53 | motor_speed=speed_now; |
kemken | 0:85829f7bbe62 | 54 | delta_time--; // decrease the time by 1 |
kemken | 0:85829f7bbe62 | 55 | } |
kemken | 0:85829f7bbe62 | 56 | } |
kemken | 0:85829f7bbe62 | 57 | |
kemken | 0:85829f7bbe62 | 58 | void motor_start (void) {// a ticker function for the LED doors. |
kemken | 0:85829f7bbe62 | 59 | speed_now = 0.5; |
kemken | 0:85829f7bbe62 | 60 | motor_speed=speed_now; // stop the motor |
kemken | 0:85829f7bbe62 | 61 | delta_time=0; // at 0S time |
kemken | 0:85829f7bbe62 | 62 | motor_timer.attach(&motor_update,0.001);// repeatedly call "motor_update" function. |
kemken | 0:85829f7bbe62 | 63 | } |