a simple code for elevator

Dependencies:   PinDetect mbed Servo

event_and_actions.cpp

Committer:
kemken
Date:
2012-06-04
Revision:
0:85829f7bbe62

File content as of revision 0:85829f7bbe62:

/*
 * ENEVTS AND ACTIONS FUNCTIONS.
 * ^^^^^^ ^^^ ^^^^^^^ ^^^^^^^^^
 *
 * FILE NAME: event_and_actins.cpp
 * USAGE: all the actions and some of the events functions are here.
 */


/*
* including the wanted library files.
*/
#include "mbed.h"
#include "speed.h"
#include "LED.h"
#include "beeper.h"

/*--------------------------*\
 *  defineding the variables*
\*--------------------------*/
int upload;
int loaded;
int flag_call_1=0;
int flag_call_2=0;

event event_queue [11]; // variable named current_state; event type

/*>>>>>>>>>>>>>>>>>>>>>>> function responsible of moving the elevotor to the first floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
void move_to_bottom (void) {
    motor (1.0, 2000); /* calling "motor" function to run the motor from 0 to high speed during 2mS */
    current_state = going_down; /* putting this function in "going_up" state. */
}

/*>>>>>>>>>>>>>>>>>>>>>>> function responsible of stopping the motor at the top floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
void motor_stop_tp (void) {
    motor (0.5,0); /* calling "motor" function to stop the motor */
    bing (); /* calling "bing" function that start beeping */
    current_state = waiting_beeper_tp; /* putting this function in "waiting_beeper_tp" state. */
}

/*>>>>>>>>>>>>>>>>>>>>>>> function responsible of stopping the motor at the bottom floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
void motor_stop_bm (void) {
    motor (0.5,0); /* calling "motor" function to stop the motor*/
    bing (); /* calling "bing" function that start beeping*/
    current_state =waiting_beeper_bm; /* putting this function in "waiting_beeper_bm" state. */
}

/*>>>>>>>>>>> function responsible of slowing down the motor when the elevator is near the top floor <<<<<<<<<<<<<<<*/
void slow_down_tp (void) {
    motor (0.35, 1000); /* calling "motor" function to run the motor from high to slow speed (0.2) during 1mS */
    current_state = wating_top_sw; /* putting this function in "wating_top_sw" state. */
}

/*>>>>>>>>>>> function responsible of slowing down the motor when the elevator is near the bottom floor <<<<<<<<<<<<<<<*/
void slow_down_bm (void) {
    motor (0.6, 1000); /* calling "motor" function to run the motor from high to slow speed (0.8) during 1mS */
    current_state = waiting_bottom_sw;/* putting this function in "waiting_bottom_sw" state. */
}

/*>>>>>>>>>>>>>>>>>>>>>>> function responsible of stopping the motor at the top floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
void move_to_top (void) {
    motor (0.0, 2000); /* calling "motor" function to run the motor from 0 to high speed during 2mS */
    current_state = going_up;/* putting this function in "going_up" state. */
}

/*>>>>>>>>>>>>>>>>>>>>>>> function responsible of stopping the motor at the top floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
void door_top (void) {
    open_close_doors ( 1 ); /* calling "open_close_doors" function to open the top door; name of the function(selecting floor)*/
    current_state = waiting_door_tp;/* putting this function in "waiting_door_tp" state. */
}

/*>>>>>>>>>>>>>>>>>>>>>>> function responsible of stopping the motor at the top floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
void door_bottom (void) {
    open_close_doors ( 0 );/* calling "open_close_doors" function to open the bottom door; name of the function(selecting floor)*/
    current_state = waiting_door_bm;/* putting this function in "waiting_door_bm" state. */
}


/*>>>>>>>>>>>>>>>>>>>>>>> function responsible of stopping the motor at the top floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
/*-----> start the door open close sequence on the led's, when the sequence finishes then a timeout event is generated <-----*/
void close_top (void) {
    current_state = top;/* putting this function in "top" state. */
    /*>>>>>>> flag operation <<<<<<<<<*/
    flag_call_2=0;
    if (flag_call_1) move_to_bottom();
}

    /*>>>>>>>>>>>>>>>>>>>>>>> function responsible of stopping the motor at the top floor <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
    /*-----> start the door open close sequence on the led's, when the sequence finishes then a timeout event is generated <-----*/
    void close_bottom (void) {
        current_state = bottom;/* putting this function in "bottom" state. */
        /*>>>>>>> flag operation <<<<<<<<<*/
        flag_call_1=0;
        if (flag_call_2) move_to_top();
}
        /*>>>>>>>>>>>>>>>>>>>>>>> function responsible of do nothing <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
        void ND (void) {
        }

        /*>>>>>>>>>>>>>>>>>>>>>>> function responsible of getting new event <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
        void new_event (event next_event) {
            event_queue [upload]=next_event;
            upload++;
            if (upload==11)
                upload=0;
        }

        /*>>>>>>>>>>>>>>>>>>>>>>> function responsible of getting event <<<<<<<<<<<<<<<<<<<<<<<<<<<*/
        event get_event (void) {
            do {
                printf("");
            } while (upload==loaded);
            event ev;
            ev =  event_queue [loaded++];
            if (loaded ==11)
                loaded =0;
            return (ev);
        }

        /*>>>>>>>>>> function responsible of running the motor backward when the elevotor hit the safety switch <<<<<<<<<<<*/
        void slow_back (void) {
            motor(0.6,0); /* calling "motor" function to run the motor at slow speed*/
            current_state=waiting_for_Bfloor; /* putting this function in "waiting_for_Bfloor" state. */
            /*---- Print message: shows when this function is called ---------------------------------*/
            printf("slow back running   ");
        }