Mobile Security System - Revision 1.0

Dependencies:   FXOS8700Q N5110 SDFileSystem SRF02 mbed

Revision:
4:9cac024c057c
Parent:
3:70a7b64fbd98
Child:
5:41cb88f47f42
--- a/main.cpp	Fri Apr 15 07:45:23 2016 +0000
+++ b/main.cpp	Sun Apr 17 14:23:00 2016 +0000
@@ -23,12 +23,16 @@
     wait(3);
     
     read_pin();
+    
+    led_alarm = 0;
 
     one_second_distance = 0;
     one_second_avg_distance = 0;
     initial_setting_distance = 0;
 
     pin_counter = 0;
+    incorrect_pin_flag = 0;
+    
     setting_distance_counter = 0;
     intruder_distance_counter = 0;
 
@@ -39,7 +43,6 @@
     g_intruder_distance_flag = 0;
 
     setting_distance_ticker_status = 0;
-    intruder_distance_ticker_status = 0;
 
     g_current_state = 0;
 
@@ -68,7 +71,7 @@
             pc.printf("g_button_1_flag = %d \n", g_button_1_flag);
 
             g_button_1_flag = 0;
-
+            
             button_1_protocol();
 
         }
@@ -78,18 +81,18 @@
             pc.printf("g_button_c_flag = %d \n", g_button_c_flag);
 
             g_button_c_flag = 0;
-
+    
             button_c_protocol();
-
+            
         }
 
         if (g_setting_distance_flag) {
 
-            pc.printf("g_setting_distance_flag = %d \n", g_setting_distance_flag);
+            //pc.printf("g_setting_distance_flag = %d \n", g_setting_distance_flag);
 
             g_setting_distance_flag = 0;
 
-            pc.printf("g_current_state = %d (setting calibration) \n", g_current_state);
+            //pc.printf("g_current_state = %d (setting calibration) \n", g_current_state);
 
             get_setting_distance();
 
@@ -99,15 +102,15 @@
 
         if (g_intruder_distance_flag) {
 
-            pc.printf("g_intruder_distance_flag = %d \n", g_intruder_distance_flag);
+            //pc.printf("g_intruder_distance_flag = %d \n", g_intruder_distance_flag);
 
             g_setting_distance_flag = 0;
 
-            pc.printf("g_current_state = %d (intruder detection) \n", g_current_state);
+            //pc.printf("g_current_state = %d (intruder detection) \n", g_current_state);
 
             get_intruder_distance();
 
-        }
+        }    
 
         if (setting_distance_counter == 10) {
 
@@ -120,9 +123,9 @@
 
         }
 
-        pc.printf("g_current_state = %d \n", g_current_state);
+        //pc.printf("g_current_state = %d \n", g_current_state);
 
-        pc.printf("g_next_state = %d \n", g_next_state);
+        //pc.printf("g_next_state = %d \n", g_next_state);
 
         if (g_next_state != g_current_state) {
 
@@ -132,7 +135,7 @@
 
         g_current_state = g_next_state;
 
-        pc.printf("g_current_state_after_transition = %d \n", g_current_state);
+        //pc.printf("g_current_state_after_transition = %d \n", g_current_state);
 
         if (g_current_state == 4) {
 
@@ -140,33 +143,31 @@
 
                 setting_distance_ticker_status = 1;
 
-                pc.printf("g_current_state = %d (attach setting ticker) \n", g_current_state);
+                //pc.printf("g_current_state = %d (attach setting ticker) \n", g_current_state);
 
                 setting_distance.attach(&setting_distance_isr,0.1);
-
+                
             }
 
         }
 
         if (g_current_state == 5) {
 
-            if (intruder_distance_ticker_status == 0) {
-
-                intruder_distance_ticker_status = 1;
-
-                pc.printf("g_current_state = %d (attach intruder ticker) \n", g_current_state);
+                //pc.printf("g_current_state = %d (attach intruder ticker) \n", g_current_state);
 
                 intruder_distance.attach(&intruder_distance_isr,0.1);
-
-            }
+                
+                led_alarm = 1;
 
         }
-
-        if (g_current_state == 6) {
-
+        
+        else {
+            
             intruder_distance.detach();
-
-        }
+            
+            led_alarm = 0;
+            
+        }    
 
         sleep();
 
@@ -220,6 +221,12 @@
 
 }
 
+void led_isr() 
+{
+    g_led_flag = 0;
+    
+}    
+
 void button_0_isr()
 {
     g_button_0_flag = 1;
@@ -249,6 +256,8 @@
             pin_counter++;
 
         }
+        
+        enter_pin();
 
     }
 
@@ -261,6 +270,8 @@
             pin_counter++;
 
         }
+        
+        enter_pin();
 
     }
 
@@ -273,6 +284,8 @@
             pin_counter++;
 
         }
+        
+        enter_pin();
 
     }
 
@@ -285,6 +298,8 @@
             pin_counter++;
 
         }
+        
+        enter_pin();
 
     }
 
@@ -308,6 +323,8 @@
             pin_counter++;
 
         }
+        
+        enter_pin();
 
     }
 
@@ -320,6 +337,8 @@
             pin_counter++;
 
         }
+        
+        enter_pin();
 
     }
 
@@ -332,6 +351,8 @@
             pin_counter++;
 
         }
+        
+        enter_pin();
 
     }
 
@@ -344,12 +365,14 @@
             pin_counter++;
 
         }
-
+        
+        enter_pin();
+        
     }
 
     else {
 
-        g_next_state = fsm[g_current_state].nextState[0];
+        g_next_state = fsm[g_current_state].nextState[1];
 
     }
 
@@ -360,31 +383,31 @@
 
     if (g_current_state == 2) {
 
-
+        screen_progression();
 
     }
 
     else if (g_current_state == 3) {
 
-
+        screen_progression();
 
     }
 
     else if (g_current_state == 6) {
 
-
+        screen_progression();
 
     }
 
     else if (g_current_state == 7) {
 
-
+        screen_progression();
 
     }
 
     else {
 
-        g_next_state = fsm[g_current_state].nextState[0];
+        g_next_state = fsm[g_current_state].nextState[2];
 
     }
 
@@ -394,16 +417,12 @@
 {
     distance[setting_distance_counter] = srf02.getDistanceCm();
 
-    pc.printf("Distance = %.f cm \n",distance[setting_distance_counter]);
-
     setting_distance_counter++;
 
     if (setting_distance_counter == 10) {
 
         setting_distance.detach();
 
-        setting_distance_ticker_status = 0;
-
     }
 
 }
@@ -419,8 +438,6 @@
 
         intruder_distance.detach();
 
-        intruder_distance_ticker_status = 0;
-
     }
 
 }
@@ -435,15 +452,13 @@
     }
 
     initial_setting_distance = (one_second_distance / 10);
+    
+    pc.printf("Initial Setting Distance = %.2f cm\n",initial_setting_distance);
 
     setting_distance_counter = 0;
 
     one_second_distance = 0;
 
-    one_second_avg_distance = 0;
-
-    g_next_state = 5;
-
     transition.attach(&screen_5_transition,5);
 
 }
@@ -458,7 +473,9 @@
     }
 
     one_second_avg_distance = one_second_distance / 10;
-
+    
+    pc.printf("Intruder Distance = %.2f cm\n",one_second_avg_distance);
+    
     intruder_distance_counter = 0;
 
     one_second_distance = 0;
@@ -488,8 +505,6 @@
 
         intruder_distance.attach(&intruder_distance_isr,0.1);
 
-        intruder_distance_ticker_status = 1;
-
     }
 
 
@@ -663,14 +678,116 @@
 
 void screen_5_transition()
 {
+    g_next_state = 5;
+    
     screen_selection();
 
     g_current_state = 5;
+    
+    setting_distance_ticker_status = 0;
+    
+    led.detach();
 
     intruder_distance.attach(&intruder_distance_isr,0.1);
-
+    
+    led_alarm = 1;
+    
 }
 
+void screen_progression() 
+{
+    if (g_current_state == 3) {
+        
+        if (pin_counter > 3) {
+        
+            change_pin();
+        
+            read_pin();
+        
+            g_next_state = fsm[g_current_state].nextState[2];
+        
+        }
+        else {
+            
+            g_next_state = fsm[g_current_state].nextState[3];
+    
+        }
+    }        
+    
+    else {
+        
+        check_pin();
+        
+        if (incorrect_pin_flag == 1) {
+            
+            incorrect_pin_flag = 0;
+            
+            g_next_state = fsm[g_current_state].nextState[3];
+            
+            pc.printf("g_next_state = %d\n",g_next_state);
+                    
+        }
+        
+        else {
+            
+            g_next_state = fsm[g_current_state].nextState[2];
+            
+            pc.printf("g_next_state = %d\n",g_next_state);
+               
+        }
+    
+    }
+    
+}        
+
+void enter_pin()
+{
+    if (pin_counter == 1) {
+        
+        lcd.printString("*",19,4);
+        
+    }
+    
+    else if (pin_counter == 2) {
+        
+        lcd.printString("*",34,4);
+        
+    }
+    
+    else if (pin_counter == 3) {
+        
+        lcd.printString("*",49,4);
+        
+    }
+    
+    else if (pin_counter == 4) {
+        
+        lcd.printString("*",64,4);
+        
+    }                
+    
+}    
+
+void check_pin()
+{
+    for (int i = 0; i < 4; i++) {
+        
+        if (entered_pin[i] != set_pin[i]) {
+        
+            pc.printf("entered pin doesn't match set pin...");
+            
+            incorrect_pin_flag = 1;
+            
+            break;
+            
+        }
+        
+        entered_pin[i] = -1;
+        
+    }
+    
+}    
+        
 void change_pin()
 {
     delete_file("/sd/test.txt");
@@ -685,7 +802,7 @@
 
     else {
 
-        pc.printf("Writing to file....");
+        pc.printf("Writing to file....\n");
 
         for(int i = 0; i < 4; i++) {