Mobile Security System - Revision 1.0
Dependencies: FXOS8700Q N5110 SDFileSystem SRF02 mbed
Diff: main.cpp
- 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++) {