Mobile Security System - Revision 1.0
Dependencies: FXOS8700Q N5110 SDFileSystem SRF02 mbed
Diff: main.cpp
- Revision:
- 8:8a3d1c07bdec
- Parent:
- 7:8ac5aee0c13e
- Child:
- 9:a5614f53d435
--- a/main.cpp Mon May 02 14:28:32 2016 +0000 +++ b/main.cpp Tue May 03 09:51:02 2016 +0000 @@ -103,9 +103,21 @@ buzzer = 0; - } + } } + + if (g_acc_flag) { + + g_acc_flag = 0; + + if (g_current_state == 4) { + + compare_axis_data(); + + } + + } if (g_pin_timeout_flag) { // state 7 - 20 second timeout @@ -127,33 +139,6 @@ } - - - if (g_current_state == 4) { - - if (setting_distance_ticker_status == 0) { // if the setting_distance ticker has not been attached - - setting_distance_ticker_status = 1; - - setting_distance.attach(&setting_distance_isr,0.1); - - } - - } - - if (g_current_state == 5) { - - intruder_distance.attach(&intruder_distance_isr,0.1); - - } - - else { - - intruder_distance.detach(); - - } - - sleep(); @@ -218,11 +203,11 @@ g_intruder_distance_flag = 0; g_pin_timeout_flag = 0; - setting_distance_ticker_status = 0; - g_current_state = 0; reset_entered_pin(); + + acc.enable(); } @@ -264,6 +249,12 @@ } +void acc_isr() +{ + g_acc_flag = 1; + +} + void pin_timeout_isr() { g_pin_timeout_flag = 1; @@ -501,7 +492,11 @@ // detach tickers pin_timeout.detach(); - + + accelerometer.detach(); + + intruder_distance.detach(); + alerts.detach(); // set LED and buzzer @@ -593,9 +588,27 @@ // attach tickers alerts.attach(&led_buzzer_isr,0.5); + + setting_distance.attach(&setting_distance_isr,0.1); + + accelerometer.attach(&acc_isr,0.1); - setting_screen.attach(&setting_screen_isr,0.3); - + setting_screen.attach(&setting_screen_isr,0.28); + + // get setting accelerometer data + + get_axis_data(); + + pc.printf("Printing setting accelerometer data....\n"); + + setting_acc_X = acc_X; + + setting_acc_Y = acc_Y; + + setting_acc_Z = acc_Z; + + pc.printf("X = %.4f \nY = %.4f \nZ = %.4f \n",setting_acc_X,setting_acc_Y,setting_acc_Z); + lcd.refresh(); } @@ -621,8 +634,14 @@ // detach tickers alerts.detach(); + + accelerometer.detach(); setting_screen.detach(); + + // attach ticker + + intruder_distance.attach(&intruder_distance_isr,0.1); // set LED and buzzer @@ -661,7 +680,10 @@ // attach ticker alerts.attach(&led_buzzer_isr,0.5); - + + // detach ticker + + intruder_distance.detach(); lcd.refresh(); } @@ -693,6 +715,10 @@ alerts.attach(&led_buzzer_isr,0.5); pin_timeout.attach(&pin_timeout_isr,1); + + // detach ticker + + intruder_distance.detach(); lcd.refresh(); @@ -748,6 +774,54 @@ } +void screen_progression() +{ + if (g_current_state == 3) { // set new pin state + + if (pin_counter > 3) { // if a four digit pin has been entered + + change_pin(); // save entered_pin to the SD card + + read_pin(); // read the pin from the SD card to the set_pin array + + g_next_state = fsm[g_current_state].nextState[2]; + + } + + else { + + g_next_state = fsm[g_current_state].nextState[3]; + + } + + } + + else { // if the current state is either 2, 6 or 7 + + check_pin(); // sets incorrect_pin_flag to 1 if entered pin doesn't match set_pin + + if (incorrect_pin_flag == 1) { + + incorrect_pin_flag = 0; + + g_next_state = fsm[g_current_state].nextState[3]; // go to previous state or alarm triggered state + + pc.printf("g_next_state = %d\n",g_next_state); + + } + + else { + + g_next_state = fsm[g_current_state].nextState[2]; // proceed + + pc.printf("g_next_state = %d\n",g_next_state); + + } + + } + +} + void screen_selection() { @@ -994,7 +1068,7 @@ intruder_distance.attach(&intruder_distance_isr,0.1); } - + } // Timeout Functions @@ -1002,74 +1076,15 @@ void screen_5_transition() { g_next_state = 5; + + accelerometer.detach(); screen_selection(); // sets the LCD to screen 5 g_current_state = 5; - setting_distance_ticker_status = 0; // setting_distance ticker is off - - intruder_distance.attach(&intruder_distance_isr,0.1); // start reading distance to detect potential intruder - } -void screen_progression() -{ - if (g_current_state == 3) { // set new pin state - - if (pin_counter > 3) { // if a four digit pin has been entered - - change_pin(); // save entered_pin to the SD card - - read_pin(); // read the pin from the SD card to the set_pin array - - g_next_state = fsm[g_current_state].nextState[2]; - - } - - else { - - g_next_state = fsm[g_current_state].nextState[3]; - - } - - } - - else { // if the current state is either 2, 6 or 7 - - check_pin(); // sets incorrect_pin_flag to 1 if entered pin doesn't match set_pin - - if (incorrect_pin_flag == 1) { - - incorrect_pin_flag = 0; - - g_next_state = fsm[g_current_state].nextState[3]; // go to previous state or alarm triggered state - - pc.printf("g_next_state = %d\n",g_next_state); - - } - - else { - - g_next_state = fsm[g_current_state].nextState[2]; // proceed - - pc.printf("g_next_state = %d\n",g_next_state); - - } - - } - -} - -void alarm_setting_buzz() -{ - - buzzer.write(0.0); // turn off buzzer - -} - -// Pin Functions - void pin_confirm() { lcd.clear(); @@ -1081,17 +1096,133 @@ lcd.printString("to",36,2); lcd.printString("Confirm",24,3); - + if (g_current_state == 7) { - + lcd.drawRect(1,30,15,10,0); - - } + + } lcd.refresh(); } +void device_tampered() +{ + g_next_state = 1; + + screen_selection(); + + g_current_state = 1; + +} + +void alarm_setting_buzz() +{ + + buzzer.write(0.0); // turn off buzzer + +} + +// Accelerometer Function + +void get_axis_data() +{ + + acc.getX(acc_X); + acc.getY(acc_Y); + acc.getZ(acc_Z); + +} + +void compare_axis_data() +{ + get_axis_data(); + + pc.printf("X1 = %.4f \nY1 = %.4f \nZ1 = %.4f \n",acc_X,acc_Y,acc_Z); + + if (abs(acc_X) < 0.2f*abs(setting_acc_X)) { + + device_tampered_protocol(); + + pc.printf("acc_X < setting_acc_X\n"); + + } + + else if (abs(acc_X) > 5.0f*abs(setting_acc_X)) { + + device_tampered_protocol(); + + pc.printf("acc_X > setting_acc_X\n"); + + } + + else if (abs(acc_Y) < 0.2f*abs(setting_acc_Y)) { + + device_tampered_protocol(); + + pc.printf("acc_Y < setting_acc_Y\n"); + + } + + else if (abs(acc_Y) > 5.0f*abs(setting_acc_Y)) { + + device_tampered_protocol(); + + pc.printf("acc_Y > setting_acc_Y\n"); + + } + + else if (abs(acc_Z) < 0.2f*abs(setting_acc_Z)) { + + device_tampered_protocol(); + + pc.printf("acc_Z < setting_acc_Z\n"); + + } + + else if (abs(acc_Z) > 5.0f*abs(setting_acc_Z)) { + + device_tampered_protocol(); + + pc.printf("acc_Z > setting_acc_Z\n"); + + } + + else { + + } + +} + +void device_tampered_protocol() +{ + setting_distance.detach(); + + setting_screen.detach(); + + accelerometer.detach(); + + transition.detach(); + + lcd.clear(); + + lcd.printString("DEVICE MOVED",6,1); + + lcd.printString("SETTING",21,3); + + lcd.printString("INCOMPLETE",12,4); + + lcd_border(); + + lcd.refresh(); + + tamper_transition.attach(&device_tampered,3); + +} + +// Pin Functions + void enter_pin() {