Dependencies:   PinDetect mbed Servo

main.cpp

Committer:
Rufaida
Date:
2012-06-18
Revision:
0:81f78497df4e

File content as of revision 0:81f78497df4e:

/***********************************************************************/

/*          STATE MACHINE ASSIGMENT_ENB5050                            */

/*          Written by Rufaida A.Rhim ,Noora A.Aziz                    */

/*          Date  13-May-2012                                          */

/*          This program is written for ELEVATOR                       */

/***********************************************************************/

#include "mbed.h"
#include "definitions.h"
#include "actions.h"
#include "events.h"
#include "ding.h"
#include "door_leds.h"
#include "Motor.h"

events event;
states state;

/*check the program on PuTTY */
const char event_lookup[MAX_EVENTS][25] ={"ev_Go_To_Bottom_Button", "ev_Go_To_Top_Button", "ev_Bottom_Call_Button", "ev_Top_Call_Button", "ev_Near_Top_Button", "ev_Near_Bottom_Button", "ev_Top_Button", "ev_Bottom_Button", "ev_Timeout", "ev_Safety","ev_loading_event"};
const char state_lookup[MAX_STATES][25] ={"st_At_Top_Closed", "st_Going_Bottom", "st_Wait_For_Bottom", "st_Wait_For_Ding_Bottom", "st_Wait_For_door_Bottom","st_At_Bottom_Closed", "st_Going_Up","st_Wait_For_Top,", "st_Wait_For_Ding_Top", "st_Wait_For_door_Top", "st_Wait_For_Safety", "st_Wait_For_Bottom_Floor"};

/* This is the state table with actions, states, and events */
void (*const state_table [MAX_STATES][MAX_EVENTS]) (void)={
//    ev_Go_To_Bottom_Button          ev_Go_To_Top_Button         ev_Bottom_Call_Button            ev_Top_Call_Button           ev_Near_Top_Button              ev_Near_Bottom_Button           ev_Top_Button                ev_Bottom_Button              ev_Timeout                           ev_Safety               ev_loading_event
    {     act_ramp_motor_down,            act_open_close_Top_door,    act_ramp_motor_down,             act_open_close_Top_door,   do_nothing,                     do_nothing,                     act_stop_motor_ding_top,     do_nothing,                   do_nothing,                          act_slow_to_dowm,     do_nothing              },        //function for state st_At_Top_Closed
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     act_slow_speed_down,            do_nothing,                  do_nothing,                   do_nothing,                          do_nothing,           do_nothing              },        //function for state st_Going_Bottom
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     act_slow_speed_down,            do_nothing,                  act_stop_motor_ding_bottom,   do_nothing,                          do_nothing,           do_nothing              },        //function for state st_Wait_For_Bottom
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     do_nothing,                     do_nothing,                  do_nothing,                   act_open_close_Bottom_door,          do_nothing,           do_nothing              },        //function for state st_Wait_For_Ding_Bottom
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     do_nothing,                     do_nothing,                  do_nothing,                   act_bottom_close,                    do_nothing,           do_nothing              },        //function for state st_Wait_For_door_Bottom
    {     act_open_close_Bottom_door,     act_ramp_motor_up,          act_open_close_Bottom_door,      act_ramp_motor_up,         do_nothing,                     do_nothing,                     do_nothing,                  act_stop_motor_ding_bottom,   do_nothing,                          do_nothing,           do_nothing              },        //function for state st_At_Bottom_Closed
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                act_slow_speed_up,              do_nothing,                     do_nothing,                  do_nothing,                   do_nothing,                          act_slow_to_dowm,     do_nothing              },        //function for state st_Going_Up
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     do_nothing,                     act_stop_motor_ding_top,     do_nothing,                   do_nothing,                          act_slow_to_dowm,     do_nothing              },        //function for state st_Wait_For_Top
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     do_nothing,                     do_nothing,                  do_nothing,                   act_open_close_Top_door,             do_nothing,           do_nothing              },        //function for state st_wait_For_Ding_Top
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     do_nothing,                     do_nothing,                  do_nothing,                   act_top_close,                       do_nothing,           do_nothing              },        //function for state st_Wait_For_door_Top
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     do_nothing,                     do_nothing,                  do_nothing,                   do_nothing,                          act_slow_to_dowm,     do_nothing              },         //function for state st_Wait_For_Safety
    {     do_nothing,                     do_nothing,                 do_nothing,                      do_nothing,                do_nothing,                     do_nothing,                     do_nothing,                  act_stop_motor_ding_bottom,   do_nothing,                          do_nothing,           do_nothing              },        //function for state st_Wait_For_Bottom_Floor

};
/*the main function which starts the doors,motor and ding*/
int main (void) {
    Starting_Motor();
    initialise_events();
    Start_up_sound();
    Starting_LEDS();
    motor(up_slow,0);

    state = st_Wait_For_Safety;
    printf("Statrting State: %s\n",state_lookup[state]);


    while (1) {
        event=get_event();
        printf("Event: %s    ",event_lookup[event]);
        state_table[state][event]();
        printf("State: %s\n",state_lookup[state]);
    }
}