a simple code for elevator

Dependencies:   PinDetect mbed Servo

Revision:
0:85829f7bbe62
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp	Mon Jun 04 13:51:43 2012 +0000
@@ -0,0 +1,83 @@
+/*********************************************************
+ * state machine assignment - elevator.                  *
+ *      a software for two level elevator                *
+ *                                                       *
+ * Author:   Fatema A.Razaq Mohammed                     *
+ * Purpose:  improve the abilty of using state machine   *
+ * *******************************************************/
+
+/*
+ * THE MAIN FILE OF THIS PROGRAM.
+ * ^^^ ^^^^ ^^^^ ^^ ^^^^ ^^^^^^^
+ *
+ * FILE NAME: main.cpp
+ * USAGE: gathering the programs funtcions.   
+ */
+ 
+ 
+ 
+/* 
+ * including all the created library files of the elevator program.   
+ */
+#include "mbed.h"
+#include "main.h"
+#include "PIN_DETECT.h"
+#include "beeper.h"
+#include "LED.h"
+#include "speed.h"
+#include "event_and_actions.h"
+
+
+event get_event (void); // a function that has "event" as return type. 
+state current_state;    // variable named current_state    
+event current_event;    // variable named current_event 
+
+/*---- for testing the program, all the events and states were rewrite to be use in Printf -------------------*/
+const char event_lookup[MAX_EVENT][20] ={"B_level_1", "B_level_2", "call_1", "call_2", "NR_top", "NR_bottom", "at_top", "at_bottom", "timeout", "safety"};
+const char state_lookup[MAX_STATE][20] ={"top", "waiting_beeper_tp", "waiting_door_tp", "wating_top_sw", "going_down","bottom", "waiting_beeper_bm","waiting_door_bm", "waiting_bottom_sw", "going_up", "waiting_for_safety", "waiting_for_Bfloor"};
+
+/* state machine table (events VS states) */
+void (*const state_table [MAX_STATE][MAX_EVENT]) (void) = {
+    /*B_level_1          B_level_2           call_1          call_2          NR_top          NR_bottom           at_top          at_bottom           timeout          safety         */
+    {move_to_bottom,     door_top,           move_to_bottom, door_top,       ND,             ND,                 motor_stop_tp,  ND,                 ND,              slow_back      },            /*top*/
+    {ND,                 ND,                 ND,             ND,             ND,             ND,                 ND,             ND,                 door_top,        ND             },            /*waiting_beeper_tp*/
+    {ND,                 ND,                 ND,             ND,             ND,             ND,                 ND,             ND,                 close_top,       ND             },            /*waiting_door_tp*/
+    {ND,                 ND,                 ND,             ND,             slow_down_tp,   ND,                 motor_stop_tp,  ND,                 ND,              slow_back      },            /*wating_top_sw*/
+    {ND,                 ND,                 ND,             ND,             ND,             slow_down_bm,       ND,             ND,                 ND,              ND             },            /*going_down (when it's hite the near bottom switch)*/
+    {door_bottom,        move_to_top,        door_bottom,    move_to_top,    ND,             ND,                 ND,             motor_stop_bm,      ND,              ND             },            /*bottom*/
+    {ND,                 ND,                 ND,             ND,             ND,             ND,                 ND,             ND,                 door_bottom,     ND             },            /*waiting_beeper_bm*/
+    {ND,                 ND,                 ND,             ND,             ND,             ND,                 ND,             ND,                 close_bottom,    ND             },            /*waiting_door_bm*/
+    {ND,                 ND,                 ND,             ND,             ND,             slow_down_bm,       ND,             motor_stop_bm,      ND,              ND             },            /*waiting_bottom_sw*/
+    {ND,                 ND,                 ND,             ND,             slow_down_tp,   ND,                 ND,             ND,                 ND,              slow_back      },            /*going_up*/
+    {ND,                 ND,                 ND,             ND,             ND,             ND,                 ND,             ND,                 ND,              slow_back      },            /*waiting_for_safety*/
+    {ND,                 ND,                 ND,             ND,             ND ,            ND,                 ND,             motor_stop_bm,      ND,              ND             }             /*waiting_for_Bfloor*/
+};
+
+
+int main (void) {
+
+/*-------------------------------------------------------------------*\ 
+ *  first calling the ticker and switche depancing created finctions * 
+\*-------------------------------------------------------------------*/  
+    switches();   /* call switche depancing function */
+    bing_start(); /* call the created ticker function of the beeper */
+    doors_start();/* call the created ticker function of the doors */ 
+    motor_start();/* call the created ticker function of the motor */
+
+current_state = waiting_for_safety;  /* sat the first state to begain with */
+
+/*---- Print message: shows the starting states which program at ------------------------------------*/
+         printf("Statrting State: %s\n",state_lookup[current_state]);
+         
+    motor(0.4,0); /* calling a function to run the motor at slow speed*/
+
+    while (1) { 
+        current_event=get_event(); /* changing the event according to what happen next */
+/*---- a print message: shows the event' program at ------------------------------------*/
+        printf("Event: %s    ",event_lookup[current_event]);         
+        state_table[current_state][current_event](); /* changing the state according to the events (depending on the state machine table)*/
+/*---- a print message: shows the state' program at ------------------------------------*/
+         printf("State: %s\n",state_lookup[current_state]);
+   }
+
+} 
\ No newline at end of file