Mobile Security System - Revision 1.0

Dependencies:   FXOS8700Q N5110 SDFileSystem SRF02 mbed

Committer:
el14dg
Date:
Fri Apr 15 07:45:23 2016 +0000
Revision:
3:70a7b64fbd98
Parent:
2:e504a3cfe113
Child:
4:9cac024c057c
Transitions between states have been implemented.; Alarm can be set and triggered (needs to be optimized); Able to read and write pin to SD card.

Who changed what in which revision?

UserRevisionLine numberNew contents of line
el14dg 0:12ae42019e9f 1 /* ELEC2645 Project
el14dg 0:12ae42019e9f 2
el14dg 2:e504a3cfe113 3 Week 19 - Take distance readings from the sensor and limited ticker interrupts
el14dg 2:e504a3cfe113 4 Week 20 - Added the SD library
el14dg 2:e504a3cfe113 5 Week 21 - Existing code has been edited to get consistent distance readings from the sensor and alll inputs and outputs have been added in main.h
el14dg 0:12ae42019e9f 6 Week Easter -
el14dg 0:12ae42019e9f 7 Week 22 -
el14dg 0:12ae42019e9f 8 Week 23 -
el14dg 2:e504a3cfe113 9 Week 24 -
el14dg 0:12ae42019e9f 10
el14dg 0:12ae42019e9f 11 */
el14dg 0:12ae42019e9f 12
el14dg 2:e504a3cfe113 13
el14dg 1:3ae4192d0c25 14 #include "main.h"
el14dg 0:12ae42019e9f 15
el14dg 0:12ae42019e9f 16 int main()
el14dg 0:12ae42019e9f 17 {
el14dg 2:e504a3cfe113 18 init_serial();
el14dg 0:12ae42019e9f 19 init_K64F();
el14dg 2:e504a3cfe113 20 init_buttons();
el14dg 2:e504a3cfe113 21 lcd.init();
el14dg 2:e504a3cfe113 22
el14dg 2:e504a3cfe113 23 wait(3);
el14dg 3:70a7b64fbd98 24
el14dg 3:70a7b64fbd98 25 read_pin();
el14dg 3:70a7b64fbd98 26
el14dg 3:70a7b64fbd98 27 one_second_distance = 0;
el14dg 3:70a7b64fbd98 28 one_second_avg_distance = 0;
el14dg 3:70a7b64fbd98 29 initial_setting_distance = 0;
el14dg 3:70a7b64fbd98 30
el14dg 3:70a7b64fbd98 31 pin_counter = 0;
el14dg 3:70a7b64fbd98 32 setting_distance_counter = 0;
el14dg 3:70a7b64fbd98 33 intruder_distance_counter = 0;
el14dg 3:70a7b64fbd98 34
el14dg 3:70a7b64fbd98 35 g_button_0_flag = 0;
el14dg 3:70a7b64fbd98 36 g_button_1_flag = 0;
el14dg 2:e504a3cfe113 37 g_button_c_flag = 0;
el14dg 3:70a7b64fbd98 38 g_setting_distance_flag = 0;
el14dg 3:70a7b64fbd98 39 g_intruder_distance_flag = 0;
el14dg 3:70a7b64fbd98 40
el14dg 3:70a7b64fbd98 41 setting_distance_ticker_status = 0;
el14dg 3:70a7b64fbd98 42 intruder_distance_ticker_status = 0;
el14dg 3:70a7b64fbd98 43
el14dg 2:e504a3cfe113 44 g_current_state = 0;
el14dg 2:e504a3cfe113 45
el14dg 2:e504a3cfe113 46 screen_selection();
el14dg 2:e504a3cfe113 47
el14dg 2:e504a3cfe113 48 wait(4);
el14dg 2:e504a3cfe113 49
el14dg 3:70a7b64fbd98 50 g_next_state = 1;
el14dg 3:70a7b64fbd98 51
el14dg 3:70a7b64fbd98 52
el14dg 0:12ae42019e9f 53 while (1) {
el14dg 0:12ae42019e9f 54
el14dg 3:70a7b64fbd98 55
el14dg 2:e504a3cfe113 56 if (g_button_0_flag) {
el14dg 3:70a7b64fbd98 57
el14dg 3:70a7b64fbd98 58 pc.printf("g_button_0_flag = %d \n", g_button_0_flag);
el14dg 2:e504a3cfe113 59
el14dg 2:e504a3cfe113 60 g_button_0_flag = 0;
el14dg 2:e504a3cfe113 61
el14dg 3:70a7b64fbd98 62 button_0_protocol();
el14dg 2:e504a3cfe113 63
el14dg 0:12ae42019e9f 64 }
el14dg 3:70a7b64fbd98 65
el14dg 2:e504a3cfe113 66 if (g_button_1_flag) {
el14dg 3:70a7b64fbd98 67
el14dg 3:70a7b64fbd98 68 pc.printf("g_button_1_flag = %d \n", g_button_1_flag);
el14dg 2:e504a3cfe113 69
el14dg 2:e504a3cfe113 70 g_button_1_flag = 0;
el14dg 2:e504a3cfe113 71
el14dg 3:70a7b64fbd98 72 button_1_protocol();
el14dg 0:12ae42019e9f 73
el14dg 2:e504a3cfe113 74 }
el14dg 2:e504a3cfe113 75
el14dg 2:e504a3cfe113 76 if (g_button_c_flag) {
el14dg 3:70a7b64fbd98 77
el14dg 3:70a7b64fbd98 78 pc.printf("g_button_c_flag = %d \n", g_button_c_flag);
el14dg 2:e504a3cfe113 79
el14dg 2:e504a3cfe113 80 g_button_c_flag = 0;
el14dg 2:e504a3cfe113 81
el14dg 3:70a7b64fbd98 82 button_c_protocol();
el14dg 3:70a7b64fbd98 83
el14dg 3:70a7b64fbd98 84 }
el14dg 3:70a7b64fbd98 85
el14dg 3:70a7b64fbd98 86 if (g_setting_distance_flag) {
el14dg 3:70a7b64fbd98 87
el14dg 3:70a7b64fbd98 88 pc.printf("g_setting_distance_flag = %d \n", g_setting_distance_flag);
el14dg 3:70a7b64fbd98 89
el14dg 3:70a7b64fbd98 90 g_setting_distance_flag = 0;
el14dg 3:70a7b64fbd98 91
el14dg 3:70a7b64fbd98 92 pc.printf("g_current_state = %d (setting calibration) \n", g_current_state);
el14dg 3:70a7b64fbd98 93
el14dg 3:70a7b64fbd98 94 get_setting_distance();
el14dg 3:70a7b64fbd98 95
el14dg 3:70a7b64fbd98 96
el14dg 3:70a7b64fbd98 97
el14dg 3:70a7b64fbd98 98 }
el14dg 3:70a7b64fbd98 99
el14dg 3:70a7b64fbd98 100 if (g_intruder_distance_flag) {
el14dg 3:70a7b64fbd98 101
el14dg 3:70a7b64fbd98 102 pc.printf("g_intruder_distance_flag = %d \n", g_intruder_distance_flag);
el14dg 3:70a7b64fbd98 103
el14dg 3:70a7b64fbd98 104 g_setting_distance_flag = 0;
el14dg 3:70a7b64fbd98 105
el14dg 3:70a7b64fbd98 106 pc.printf("g_current_state = %d (intruder detection) \n", g_current_state);
el14dg 3:70a7b64fbd98 107
el14dg 3:70a7b64fbd98 108 get_intruder_distance();
el14dg 3:70a7b64fbd98 109
el14dg 3:70a7b64fbd98 110 }
el14dg 3:70a7b64fbd98 111
el14dg 3:70a7b64fbd98 112 if (setting_distance_counter == 10) {
el14dg 3:70a7b64fbd98 113
el14dg 3:70a7b64fbd98 114 calculate_setting_distance();
el14dg 3:70a7b64fbd98 115 }
el14dg 3:70a7b64fbd98 116
el14dg 3:70a7b64fbd98 117 if (intruder_distance_counter == 10) {
el14dg 3:70a7b64fbd98 118
el14dg 3:70a7b64fbd98 119 calculate_intruder_distance();
el14dg 0:12ae42019e9f 120
el14dg 2:e504a3cfe113 121 }
el14dg 3:70a7b64fbd98 122
el14dg 3:70a7b64fbd98 123 pc.printf("g_current_state = %d \n", g_current_state);
el14dg 3:70a7b64fbd98 124
el14dg 3:70a7b64fbd98 125 pc.printf("g_next_state = %d \n", g_next_state);
el14dg 3:70a7b64fbd98 126
el14dg 3:70a7b64fbd98 127 if (g_next_state != g_current_state) {
el14dg 3:70a7b64fbd98 128
el14dg 3:70a7b64fbd98 129 screen_selection(); // the screen is determined by the current value of g_current_state
el14dg 3:70a7b64fbd98 130
el14dg 3:70a7b64fbd98 131 }
el14dg 3:70a7b64fbd98 132
el14dg 3:70a7b64fbd98 133 g_current_state = g_next_state;
el14dg 3:70a7b64fbd98 134
el14dg 3:70a7b64fbd98 135 pc.printf("g_current_state_after_transition = %d \n", g_current_state);
el14dg 3:70a7b64fbd98 136
el14dg 3:70a7b64fbd98 137 if (g_current_state == 4) {
el14dg 3:70a7b64fbd98 138
el14dg 3:70a7b64fbd98 139 if (setting_distance_ticker_status == 0) {
el14dg 3:70a7b64fbd98 140
el14dg 3:70a7b64fbd98 141 setting_distance_ticker_status = 1;
el14dg 3:70a7b64fbd98 142
el14dg 3:70a7b64fbd98 143 pc.printf("g_current_state = %d (attach setting ticker) \n", g_current_state);
el14dg 3:70a7b64fbd98 144
el14dg 3:70a7b64fbd98 145 setting_distance.attach(&setting_distance_isr,0.1);
el14dg 2:e504a3cfe113 146
el14dg 3:70a7b64fbd98 147 }
el14dg 3:70a7b64fbd98 148
el14dg 3:70a7b64fbd98 149 }
el14dg 3:70a7b64fbd98 150
el14dg 3:70a7b64fbd98 151 if (g_current_state == 5) {
el14dg 3:70a7b64fbd98 152
el14dg 3:70a7b64fbd98 153 if (intruder_distance_ticker_status == 0) {
el14dg 3:70a7b64fbd98 154
el14dg 3:70a7b64fbd98 155 intruder_distance_ticker_status = 1;
el14dg 3:70a7b64fbd98 156
el14dg 3:70a7b64fbd98 157 pc.printf("g_current_state = %d (attach intruder ticker) \n", g_current_state);
el14dg 3:70a7b64fbd98 158
el14dg 3:70a7b64fbd98 159 intruder_distance.attach(&intruder_distance_isr,0.1);
el14dg 3:70a7b64fbd98 160
el14dg 3:70a7b64fbd98 161 }
el14dg 3:70a7b64fbd98 162
el14dg 3:70a7b64fbd98 163 }
el14dg 3:70a7b64fbd98 164
el14dg 3:70a7b64fbd98 165 if (g_current_state == 6) {
el14dg 3:70a7b64fbd98 166
el14dg 3:70a7b64fbd98 167 intruder_distance.detach();
el14dg 3:70a7b64fbd98 168
el14dg 3:70a7b64fbd98 169 }
el14dg 3:70a7b64fbd98 170
el14dg 2:e504a3cfe113 171 sleep();
el14dg 2:e504a3cfe113 172
el14dg 0:12ae42019e9f 173 }
el14dg 2:e504a3cfe113 174
el14dg 0:12ae42019e9f 175 }
el14dg 0:12ae42019e9f 176
el14dg 2:e504a3cfe113 177
el14dg 0:12ae42019e9f 178 void init_serial()
el14dg 0:12ae42019e9f 179 {
el14dg 2:e504a3cfe113 180 // Ensure terminal software matches
el14dg 3:70a7b64fbd98 181 pc.baud(115200);
el14dg 0:12ae42019e9f 182 }
el14dg 0:12ae42019e9f 183
el14dg 0:12ae42019e9f 184 void init_K64F()
el14dg 0:12ae42019e9f 185 {
el14dg 0:12ae42019e9f 186 // on-board LEDs are active-low, so set pin high to turn them off.
el14dg 0:12ae42019e9f 187 r_led = 1;
el14dg 0:12ae42019e9f 188 g_led = 1;
el14dg 0:12ae42019e9f 189 b_led = 1;
el14dg 0:12ae42019e9f 190
el14dg 0:12ae42019e9f 191 // since the on-board switches have external pull-ups, we should disable the internal pull-down
el14dg 0:12ae42019e9f 192 // resistors that are enabled by default using InterruptIn
el14dg 0:12ae42019e9f 193 sw2.mode(PullNone);
el14dg 0:12ae42019e9f 194 sw3.mode(PullNone);
el14dg 0:12ae42019e9f 195
el14dg 0:12ae42019e9f 196 }
el14dg 2:e504a3cfe113 197
el14dg 2:e504a3cfe113 198 void init_buttons()
el14dg 2:e504a3cfe113 199 {
el14dg 2:e504a3cfe113 200
el14dg 2:e504a3cfe113 201 button_0.fall(&button_0_isr);
el14dg 2:e504a3cfe113 202 button_1.fall(&button_1_isr);
el14dg 2:e504a3cfe113 203 button_c.fall(&button_c_isr);
el14dg 2:e504a3cfe113 204
el14dg 2:e504a3cfe113 205 button_0.mode(PullDown);
el14dg 2:e504a3cfe113 206 button_1.mode(PullDown);
el14dg 2:e504a3cfe113 207 button_c.mode(PullDown);
el14dg 2:e504a3cfe113 208
el14dg 2:e504a3cfe113 209 }
el14dg 2:e504a3cfe113 210
el14dg 3:70a7b64fbd98 211 void setting_distance_isr()
el14dg 2:e504a3cfe113 212 {
el14dg 3:70a7b64fbd98 213 g_setting_distance_flag = 1;
el14dg 3:70a7b64fbd98 214
el14dg 3:70a7b64fbd98 215 }
el14dg 3:70a7b64fbd98 216
el14dg 3:70a7b64fbd98 217 void intruder_distance_isr()
el14dg 3:70a7b64fbd98 218 {
el14dg 3:70a7b64fbd98 219 g_intruder_distance_flag = 1;
el14dg 2:e504a3cfe113 220
el14dg 2:e504a3cfe113 221 }
el14dg 2:e504a3cfe113 222
el14dg 2:e504a3cfe113 223 void button_0_isr()
el14dg 2:e504a3cfe113 224 {
el14dg 2:e504a3cfe113 225 g_button_0_flag = 1;
el14dg 2:e504a3cfe113 226
el14dg 2:e504a3cfe113 227 }
el14dg 2:e504a3cfe113 228
el14dg 2:e504a3cfe113 229 void button_1_isr()
el14dg 2:e504a3cfe113 230 {
el14dg 2:e504a3cfe113 231 g_button_1_flag = 1;
el14dg 2:e504a3cfe113 232
el14dg 2:e504a3cfe113 233 }
el14dg 2:e504a3cfe113 234
el14dg 2:e504a3cfe113 235 void button_c_isr()
el14dg 2:e504a3cfe113 236 {
el14dg 2:e504a3cfe113 237 g_button_c_flag = 1;
el14dg 2:e504a3cfe113 238
el14dg 2:e504a3cfe113 239 }
el14dg 2:e504a3cfe113 240
el14dg 3:70a7b64fbd98 241 void button_0_protocol()
el14dg 2:e504a3cfe113 242 {
el14dg 3:70a7b64fbd98 243 if (g_current_state == 2) {
el14dg 3:70a7b64fbd98 244
el14dg 3:70a7b64fbd98 245 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 246
el14dg 3:70a7b64fbd98 247 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 248
el14dg 3:70a7b64fbd98 249 pin_counter++;
el14dg 3:70a7b64fbd98 250
el14dg 3:70a7b64fbd98 251 }
el14dg 3:70a7b64fbd98 252
el14dg 3:70a7b64fbd98 253 }
el14dg 3:70a7b64fbd98 254
el14dg 3:70a7b64fbd98 255 else if (g_current_state == 3) {
el14dg 3:70a7b64fbd98 256
el14dg 3:70a7b64fbd98 257 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 258
el14dg 3:70a7b64fbd98 259 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 260
el14dg 3:70a7b64fbd98 261 pin_counter++;
el14dg 3:70a7b64fbd98 262
el14dg 3:70a7b64fbd98 263 }
el14dg 3:70a7b64fbd98 264
el14dg 3:70a7b64fbd98 265 }
el14dg 2:e504a3cfe113 266
el14dg 3:70a7b64fbd98 267 else if (g_current_state == 6) {
el14dg 3:70a7b64fbd98 268
el14dg 3:70a7b64fbd98 269 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 270
el14dg 3:70a7b64fbd98 271 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 272
el14dg 3:70a7b64fbd98 273 pin_counter++;
el14dg 3:70a7b64fbd98 274
el14dg 3:70a7b64fbd98 275 }
el14dg 3:70a7b64fbd98 276
el14dg 3:70a7b64fbd98 277 }
el14dg 3:70a7b64fbd98 278
el14dg 3:70a7b64fbd98 279 else if (g_current_state == 7) {
el14dg 3:70a7b64fbd98 280
el14dg 3:70a7b64fbd98 281 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 282
el14dg 3:70a7b64fbd98 283 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 284
el14dg 3:70a7b64fbd98 285 pin_counter++;
el14dg 3:70a7b64fbd98 286
el14dg 3:70a7b64fbd98 287 }
el14dg 3:70a7b64fbd98 288
el14dg 3:70a7b64fbd98 289 }
el14dg 3:70a7b64fbd98 290
el14dg 3:70a7b64fbd98 291 else {
el14dg 2:e504a3cfe113 292
el14dg 3:70a7b64fbd98 293 g_next_state = fsm[g_current_state].nextState[0];
el14dg 3:70a7b64fbd98 294
el14dg 3:70a7b64fbd98 295 }
el14dg 3:70a7b64fbd98 296
el14dg 3:70a7b64fbd98 297 }
el14dg 3:70a7b64fbd98 298
el14dg 3:70a7b64fbd98 299 void button_1_protocol()
el14dg 3:70a7b64fbd98 300 {
el14dg 3:70a7b64fbd98 301
el14dg 3:70a7b64fbd98 302 if (g_current_state == 2) {
el14dg 3:70a7b64fbd98 303
el14dg 3:70a7b64fbd98 304 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 305
el14dg 3:70a7b64fbd98 306 entered_pin[pin_counter] = 1;
el14dg 3:70a7b64fbd98 307
el14dg 3:70a7b64fbd98 308 pin_counter++;
el14dg 3:70a7b64fbd98 309
el14dg 3:70a7b64fbd98 310 }
el14dg 3:70a7b64fbd98 311
el14dg 3:70a7b64fbd98 312 }
el14dg 3:70a7b64fbd98 313
el14dg 3:70a7b64fbd98 314 else if (g_current_state == 3) {
el14dg 3:70a7b64fbd98 315
el14dg 3:70a7b64fbd98 316 if (pin_counter < 4) {
el14dg 2:e504a3cfe113 317
el14dg 3:70a7b64fbd98 318 entered_pin[pin_counter] = 1;
el14dg 3:70a7b64fbd98 319
el14dg 3:70a7b64fbd98 320 pin_counter++;
el14dg 3:70a7b64fbd98 321
el14dg 3:70a7b64fbd98 322 }
el14dg 3:70a7b64fbd98 323
el14dg 3:70a7b64fbd98 324 }
el14dg 3:70a7b64fbd98 325
el14dg 3:70a7b64fbd98 326 else if (g_current_state == 6) {
el14dg 3:70a7b64fbd98 327
el14dg 3:70a7b64fbd98 328 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 329
el14dg 3:70a7b64fbd98 330 entered_pin[pin_counter] = 1;
el14dg 2:e504a3cfe113 331
el14dg 3:70a7b64fbd98 332 pin_counter++;
el14dg 3:70a7b64fbd98 333
el14dg 3:70a7b64fbd98 334 }
el14dg 3:70a7b64fbd98 335
el14dg 3:70a7b64fbd98 336 }
el14dg 3:70a7b64fbd98 337
el14dg 3:70a7b64fbd98 338 else if (g_current_state == 7) {
el14dg 3:70a7b64fbd98 339
el14dg 3:70a7b64fbd98 340 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 341
el14dg 3:70a7b64fbd98 342 entered_pin[pin_counter] = 1;
el14dg 3:70a7b64fbd98 343
el14dg 3:70a7b64fbd98 344 pin_counter++;
el14dg 2:e504a3cfe113 345
el14dg 2:e504a3cfe113 346 }
el14dg 2:e504a3cfe113 347
el14dg 3:70a7b64fbd98 348 }
el14dg 3:70a7b64fbd98 349
el14dg 3:70a7b64fbd98 350 else {
el14dg 3:70a7b64fbd98 351
el14dg 3:70a7b64fbd98 352 g_next_state = fsm[g_current_state].nextState[0];
el14dg 3:70a7b64fbd98 353
el14dg 3:70a7b64fbd98 354 }
el14dg 3:70a7b64fbd98 355
el14dg 3:70a7b64fbd98 356 }
el14dg 3:70a7b64fbd98 357
el14dg 3:70a7b64fbd98 358 void button_c_protocol()
el14dg 3:70a7b64fbd98 359 {
el14dg 3:70a7b64fbd98 360
el14dg 3:70a7b64fbd98 361 if (g_current_state == 2) {
el14dg 3:70a7b64fbd98 362
el14dg 3:70a7b64fbd98 363
el14dg 3:70a7b64fbd98 364
el14dg 3:70a7b64fbd98 365 }
el14dg 3:70a7b64fbd98 366
el14dg 3:70a7b64fbd98 367 else if (g_current_state == 3) {
el14dg 3:70a7b64fbd98 368
el14dg 3:70a7b64fbd98 369
el14dg 3:70a7b64fbd98 370
el14dg 3:70a7b64fbd98 371 }
el14dg 3:70a7b64fbd98 372
el14dg 3:70a7b64fbd98 373 else if (g_current_state == 6) {
el14dg 3:70a7b64fbd98 374
el14dg 3:70a7b64fbd98 375
el14dg 2:e504a3cfe113 376
el14dg 3:70a7b64fbd98 377 }
el14dg 3:70a7b64fbd98 378
el14dg 3:70a7b64fbd98 379 else if (g_current_state == 7) {
el14dg 3:70a7b64fbd98 380
el14dg 3:70a7b64fbd98 381
el14dg 3:70a7b64fbd98 382
el14dg 3:70a7b64fbd98 383 }
el14dg 3:70a7b64fbd98 384
el14dg 3:70a7b64fbd98 385 else {
el14dg 3:70a7b64fbd98 386
el14dg 3:70a7b64fbd98 387 g_next_state = fsm[g_current_state].nextState[0];
el14dg 3:70a7b64fbd98 388
el14dg 3:70a7b64fbd98 389 }
el14dg 2:e504a3cfe113 390
el14dg 3:70a7b64fbd98 391 }
el14dg 3:70a7b64fbd98 392
el14dg 3:70a7b64fbd98 393 void get_setting_distance()
el14dg 3:70a7b64fbd98 394 {
el14dg 3:70a7b64fbd98 395 distance[setting_distance_counter] = srf02.getDistanceCm();
el14dg 3:70a7b64fbd98 396
el14dg 3:70a7b64fbd98 397 pc.printf("Distance = %.f cm \n",distance[setting_distance_counter]);
el14dg 2:e504a3cfe113 398
el14dg 3:70a7b64fbd98 399 setting_distance_counter++;
el14dg 3:70a7b64fbd98 400
el14dg 3:70a7b64fbd98 401 if (setting_distance_counter == 10) {
el14dg 3:70a7b64fbd98 402
el14dg 3:70a7b64fbd98 403 setting_distance.detach();
el14dg 3:70a7b64fbd98 404
el14dg 3:70a7b64fbd98 405 setting_distance_ticker_status = 0;
el14dg 3:70a7b64fbd98 406
el14dg 2:e504a3cfe113 407 }
el14dg 2:e504a3cfe113 408
el14dg 2:e504a3cfe113 409 }
el14dg 2:e504a3cfe113 410
el14dg 3:70a7b64fbd98 411 void get_intruder_distance()
el14dg 3:70a7b64fbd98 412 {
el14dg 3:70a7b64fbd98 413
el14dg 3:70a7b64fbd98 414 distance[intruder_distance_counter] = srf02.getDistanceCm();
el14dg 3:70a7b64fbd98 415
el14dg 3:70a7b64fbd98 416 intruder_distance_counter++;
el14dg 3:70a7b64fbd98 417
el14dg 3:70a7b64fbd98 418 if (intruder_distance_counter == 10) {
el14dg 3:70a7b64fbd98 419
el14dg 3:70a7b64fbd98 420 intruder_distance.detach();
el14dg 3:70a7b64fbd98 421
el14dg 3:70a7b64fbd98 422 intruder_distance_ticker_status = 0;
el14dg 3:70a7b64fbd98 423
el14dg 3:70a7b64fbd98 424 }
el14dg 3:70a7b64fbd98 425
el14dg 3:70a7b64fbd98 426 }
el14dg 3:70a7b64fbd98 427
el14dg 3:70a7b64fbd98 428 void calculate_setting_distance()
el14dg 3:70a7b64fbd98 429 {
el14dg 3:70a7b64fbd98 430
el14dg 3:70a7b64fbd98 431 for (int i = 0; i < 10; i++) {
el14dg 3:70a7b64fbd98 432
el14dg 3:70a7b64fbd98 433 one_second_distance = one_second_distance + distance[i];
el14dg 3:70a7b64fbd98 434
el14dg 3:70a7b64fbd98 435 }
el14dg 3:70a7b64fbd98 436
el14dg 3:70a7b64fbd98 437 initial_setting_distance = (one_second_distance / 10);
el14dg 3:70a7b64fbd98 438
el14dg 3:70a7b64fbd98 439 setting_distance_counter = 0;
el14dg 3:70a7b64fbd98 440
el14dg 3:70a7b64fbd98 441 one_second_distance = 0;
el14dg 3:70a7b64fbd98 442
el14dg 3:70a7b64fbd98 443 one_second_avg_distance = 0;
el14dg 3:70a7b64fbd98 444
el14dg 3:70a7b64fbd98 445 g_next_state = 5;
el14dg 3:70a7b64fbd98 446
el14dg 3:70a7b64fbd98 447 transition.attach(&screen_5_transition,5);
el14dg 3:70a7b64fbd98 448
el14dg 3:70a7b64fbd98 449 }
el14dg 3:70a7b64fbd98 450
el14dg 3:70a7b64fbd98 451 void calculate_intruder_distance()
el14dg 3:70a7b64fbd98 452 {
el14dg 3:70a7b64fbd98 453
el14dg 3:70a7b64fbd98 454 for (int i = 0; i < 10; i++) {
el14dg 3:70a7b64fbd98 455
el14dg 3:70a7b64fbd98 456 one_second_distance = one_second_distance + distance[i];
el14dg 3:70a7b64fbd98 457
el14dg 3:70a7b64fbd98 458 }
el14dg 3:70a7b64fbd98 459
el14dg 3:70a7b64fbd98 460 one_second_avg_distance = one_second_distance / 10;
el14dg 3:70a7b64fbd98 461
el14dg 3:70a7b64fbd98 462 intruder_distance_counter = 0;
el14dg 3:70a7b64fbd98 463
el14dg 3:70a7b64fbd98 464 one_second_distance = 0;
el14dg 3:70a7b64fbd98 465
el14dg 3:70a7b64fbd98 466
el14dg 3:70a7b64fbd98 467 if (one_second_avg_distance > (1.5*initial_setting_distance)) {
el14dg 3:70a7b64fbd98 468
el14dg 3:70a7b64fbd98 469 g_next_state = 7;
el14dg 3:70a7b64fbd98 470
el14dg 3:70a7b64fbd98 471 g_current_state = 7;
el14dg 3:70a7b64fbd98 472
el14dg 3:70a7b64fbd98 473 screen_selection();
el14dg 3:70a7b64fbd98 474
el14dg 3:70a7b64fbd98 475 }
el14dg 3:70a7b64fbd98 476
el14dg 3:70a7b64fbd98 477 else if (one_second_avg_distance < (0.5 * initial_setting_distance)) {
el14dg 3:70a7b64fbd98 478
el14dg 3:70a7b64fbd98 479 g_next_state = 7;
el14dg 3:70a7b64fbd98 480
el14dg 3:70a7b64fbd98 481 g_current_state = 7;
el14dg 3:70a7b64fbd98 482
el14dg 3:70a7b64fbd98 483 screen_selection();
el14dg 3:70a7b64fbd98 484
el14dg 3:70a7b64fbd98 485 }
el14dg 3:70a7b64fbd98 486
el14dg 3:70a7b64fbd98 487 else {
el14dg 3:70a7b64fbd98 488
el14dg 3:70a7b64fbd98 489 intruder_distance.attach(&intruder_distance_isr,0.1);
el14dg 3:70a7b64fbd98 490
el14dg 3:70a7b64fbd98 491 intruder_distance_ticker_status = 1;
el14dg 3:70a7b64fbd98 492
el14dg 3:70a7b64fbd98 493 }
el14dg 3:70a7b64fbd98 494
el14dg 3:70a7b64fbd98 495
el14dg 3:70a7b64fbd98 496
el14dg 3:70a7b64fbd98 497 }
el14dg 3:70a7b64fbd98 498
el14dg 3:70a7b64fbd98 499
el14dg 2:e504a3cfe113 500 void state_0_screen()
el14dg 2:e504a3cfe113 501 {
el14dg 2:e504a3cfe113 502 lcd.clear();
el14dg 2:e504a3cfe113 503
el14dg 2:e504a3cfe113 504 lcd.printString("MobileSecurity",0,0);
el14dg 2:e504a3cfe113 505
el14dg 2:e504a3cfe113 506 lcd.printString("System",27,1);
el14dg 2:e504a3cfe113 507
el14dg 2:e504a3cfe113 508 lcd.printString("Daniel Gibbons",0,4);
el14dg 2:e504a3cfe113 509
el14dg 2:e504a3cfe113 510 lcd.refresh();
el14dg 2:e504a3cfe113 511
el14dg 2:e504a3cfe113 512 }
el14dg 2:e504a3cfe113 513
el14dg 2:e504a3cfe113 514 void state_1_screen()
el14dg 2:e504a3cfe113 515 {
el14dg 2:e504a3cfe113 516 lcd.clear();
el14dg 2:e504a3cfe113 517
el14dg 2:e504a3cfe113 518 lcd.printString("Set Alarm",15,1);
el14dg 2:e504a3cfe113 519
el14dg 2:e504a3cfe113 520 lcd.printString("Set New Pin",9,4);
el14dg 2:e504a3cfe113 521
el14dg 2:e504a3cfe113 522 lcd.refresh();
el14dg 2:e504a3cfe113 523
el14dg 2:e504a3cfe113 524 }
el14dg 2:e504a3cfe113 525
el14dg 3:70a7b64fbd98 526 void state_2_6_7_screen()
el14dg 2:e504a3cfe113 527 {
el14dg 2:e504a3cfe113 528 lcd.clear();
el14dg 2:e504a3cfe113 529
el14dg 2:e504a3cfe113 530 lcd.printString("Enter 4 Digit",3,1);
el14dg 2:e504a3cfe113 531
el14dg 2:e504a3cfe113 532 lcd.printString("Pin Below",15,2);
el14dg 2:e504a3cfe113 533
el14dg 2:e504a3cfe113 534 lcd.refresh();
el14dg 2:e504a3cfe113 535
el14dg 2:e504a3cfe113 536 }
el14dg 2:e504a3cfe113 537
el14dg 3:70a7b64fbd98 538 void state_3_screen()
el14dg 3:70a7b64fbd98 539 {
el14dg 3:70a7b64fbd98 540 lcd.clear();
el14dg 3:70a7b64fbd98 541
el14dg 3:70a7b64fbd98 542 lcd.printString("Enter New 4",9,1);
el14dg 3:70a7b64fbd98 543
el14dg 3:70a7b64fbd98 544 lcd.printString("Digit Pin",15,2);
el14dg 3:70a7b64fbd98 545
el14dg 3:70a7b64fbd98 546 lcd.refresh();
el14dg 3:70a7b64fbd98 547
el14dg 3:70a7b64fbd98 548 }
el14dg 3:70a7b64fbd98 549
el14dg 2:e504a3cfe113 550 void state_4_screen()
el14dg 2:e504a3cfe113 551 {
el14dg 2:e504a3cfe113 552 lcd.clear();
el14dg 2:e504a3cfe113 553
el14dg 2:e504a3cfe113 554 lcd.printString("Setting",21,1);
el14dg 2:e504a3cfe113 555
el14dg 2:e504a3cfe113 556 lcd.refresh();
el14dg 2:e504a3cfe113 557
el14dg 2:e504a3cfe113 558 }
el14dg 2:e504a3cfe113 559
el14dg 2:e504a3cfe113 560 void state_5_screen()
el14dg 2:e504a3cfe113 561 {
el14dg 2:e504a3cfe113 562 lcd.clear();
el14dg 2:e504a3cfe113 563
el14dg 2:e504a3cfe113 564 lcd.printString("Alarm Set",15,1);
el14dg 2:e504a3cfe113 565
el14dg 2:e504a3cfe113 566 lcd.printString("DEACTIVATE?",9,4);
el14dg 2:e504a3cfe113 567
el14dg 2:e504a3cfe113 568 lcd.refresh();
el14dg 2:e504a3cfe113 569
el14dg 2:e504a3cfe113 570 }
el14dg 2:e504a3cfe113 571
el14dg 2:e504a3cfe113 572 void state_8_screen()
el14dg 2:e504a3cfe113 573 {
el14dg 2:e504a3cfe113 574 lcd.clear();
el14dg 2:e504a3cfe113 575
el14dg 2:e504a3cfe113 576 lcd.printString("ALARM",27,1);
el14dg 2:e504a3cfe113 577
el14dg 2:e504a3cfe113 578 lcd.printString("TRIGGERED",15,2);
el14dg 2:e504a3cfe113 579
el14dg 2:e504a3cfe113 580 lcd.refresh();
el14dg 2:e504a3cfe113 581 }
el14dg 2:e504a3cfe113 582
el14dg 2:e504a3cfe113 583 void screen_selection()
el14dg 2:e504a3cfe113 584 {
el14dg 3:70a7b64fbd98 585
el14dg 3:70a7b64fbd98 586 pin_counter = 0;
el14dg 3:70a7b64fbd98 587
el14dg 3:70a7b64fbd98 588 if (g_next_state == 0) {
el14dg 2:e504a3cfe113 589
el14dg 2:e504a3cfe113 590 state_0_screen();
el14dg 2:e504a3cfe113 591
el14dg 2:e504a3cfe113 592 lcd.printString("0",0,0);
el14dg 2:e504a3cfe113 593
el14dg 2:e504a3cfe113 594 }
el14dg 3:70a7b64fbd98 595
el14dg 3:70a7b64fbd98 596 else if (g_next_state == 1) {
el14dg 2:e504a3cfe113 597
el14dg 2:e504a3cfe113 598 state_1_screen();
el14dg 2:e504a3cfe113 599
el14dg 2:e504a3cfe113 600 lcd.printString("1",0,0);
el14dg 2:e504a3cfe113 601
el14dg 2:e504a3cfe113 602 }
el14dg 2:e504a3cfe113 603
el14dg 3:70a7b64fbd98 604 else if (g_next_state == 2) {
el14dg 2:e504a3cfe113 605
el14dg 3:70a7b64fbd98 606 state_2_6_7_screen();
el14dg 2:e504a3cfe113 607
el14dg 2:e504a3cfe113 608 lcd.printString("2",0,0);
el14dg 2:e504a3cfe113 609
el14dg 2:e504a3cfe113 610 }
el14dg 2:e504a3cfe113 611
el14dg 3:70a7b64fbd98 612 else if (g_next_state == 3) {
el14dg 2:e504a3cfe113 613
el14dg 3:70a7b64fbd98 614 state_3_screen();
el14dg 2:e504a3cfe113 615
el14dg 2:e504a3cfe113 616 lcd.printString("3",0,0);
el14dg 2:e504a3cfe113 617
el14dg 2:e504a3cfe113 618 }
el14dg 2:e504a3cfe113 619
el14dg 3:70a7b64fbd98 620 else if (g_next_state == 4) {
el14dg 2:e504a3cfe113 621
el14dg 2:e504a3cfe113 622 state_4_screen();
el14dg 2:e504a3cfe113 623
el14dg 2:e504a3cfe113 624 lcd.printString("4",0,0);
el14dg 2:e504a3cfe113 625
el14dg 2:e504a3cfe113 626 }
el14dg 2:e504a3cfe113 627
el14dg 3:70a7b64fbd98 628 else if (g_next_state == 5) {
el14dg 2:e504a3cfe113 629
el14dg 2:e504a3cfe113 630 state_5_screen();
el14dg 2:e504a3cfe113 631
el14dg 2:e504a3cfe113 632 lcd.printString("5",0,0);
el14dg 2:e504a3cfe113 633
el14dg 2:e504a3cfe113 634 }
el14dg 2:e504a3cfe113 635
el14dg 3:70a7b64fbd98 636 else if (g_next_state == 6) {
el14dg 2:e504a3cfe113 637
el14dg 3:70a7b64fbd98 638 state_2_6_7_screen();
el14dg 2:e504a3cfe113 639
el14dg 2:e504a3cfe113 640 lcd.printString("6",0,0);
el14dg 2:e504a3cfe113 641
el14dg 2:e504a3cfe113 642 }
el14dg 2:e504a3cfe113 643
el14dg 3:70a7b64fbd98 644 else if (g_next_state == 7) {
el14dg 2:e504a3cfe113 645
el14dg 3:70a7b64fbd98 646 state_2_6_7_screen();
el14dg 2:e504a3cfe113 647
el14dg 2:e504a3cfe113 648 lcd.printString("7",0,0);
el14dg 2:e504a3cfe113 649
el14dg 2:e504a3cfe113 650 }
el14dg 2:e504a3cfe113 651
el14dg 2:e504a3cfe113 652 else {
el14dg 2:e504a3cfe113 653
el14dg 2:e504a3cfe113 654 state_8_screen();
el14dg 2:e504a3cfe113 655
el14dg 2:e504a3cfe113 656 lcd.printString("8",0,0);
el14dg 2:e504a3cfe113 657
el14dg 2:e504a3cfe113 658 }
el14dg 2:e504a3cfe113 659
el14dg 2:e504a3cfe113 660
el14dg 2:e504a3cfe113 661
el14dg 2:e504a3cfe113 662 }
el14dg 3:70a7b64fbd98 663
el14dg 3:70a7b64fbd98 664 void screen_5_transition()
el14dg 3:70a7b64fbd98 665 {
el14dg 3:70a7b64fbd98 666 screen_selection();
el14dg 3:70a7b64fbd98 667
el14dg 3:70a7b64fbd98 668 g_current_state = 5;
el14dg 3:70a7b64fbd98 669
el14dg 3:70a7b64fbd98 670 intruder_distance.attach(&intruder_distance_isr,0.1);
el14dg 3:70a7b64fbd98 671
el14dg 3:70a7b64fbd98 672 }
el14dg 3:70a7b64fbd98 673
el14dg 3:70a7b64fbd98 674 void change_pin()
el14dg 3:70a7b64fbd98 675 {
el14dg 3:70a7b64fbd98 676 delete_file("/sd/test.txt");
el14dg 3:70a7b64fbd98 677
el14dg 3:70a7b64fbd98 678 pin = fopen("/sd/test.txt", "a");
el14dg 3:70a7b64fbd98 679
el14dg 3:70a7b64fbd98 680 if (pin == NULL) { // if it can't open the file then print error message
el14dg 3:70a7b64fbd98 681
el14dg 3:70a7b64fbd98 682 pc.printf("Error! Unable to open file!\n");
el14dg 3:70a7b64fbd98 683
el14dg 3:70a7b64fbd98 684 }
el14dg 3:70a7b64fbd98 685
el14dg 3:70a7b64fbd98 686 else {
el14dg 3:70a7b64fbd98 687
el14dg 3:70a7b64fbd98 688 pc.printf("Writing to file....");
el14dg 3:70a7b64fbd98 689
el14dg 3:70a7b64fbd98 690 for(int i = 0; i < 4; i++) {
el14dg 3:70a7b64fbd98 691
el14dg 3:70a7b64fbd98 692 int pin_element = entered_pin[i];; // pin_element variable
el14dg 3:70a7b64fbd98 693
el14dg 3:70a7b64fbd98 694 fprintf(pin, "%d,%d\n",i,pin_element); // print formatted string to file (CSV)
el14dg 3:70a7b64fbd98 695 }
el14dg 3:70a7b64fbd98 696
el14dg 3:70a7b64fbd98 697 for(int i = 0; i < 4; i++) {
el14dg 3:70a7b64fbd98 698
el14dg 3:70a7b64fbd98 699 pc.printf("[%d] %d\n",i,entered_pin[i]);
el14dg 3:70a7b64fbd98 700 }
el14dg 3:70a7b64fbd98 701
el14dg 3:70a7b64fbd98 702 pc.printf("Done.\n");
el14dg 3:70a7b64fbd98 703
el14dg 3:70a7b64fbd98 704 fclose(pin); // ensure you close the file after writing
el14dg 3:70a7b64fbd98 705
el14dg 3:70a7b64fbd98 706 }
el14dg 3:70a7b64fbd98 707
el14dg 3:70a7b64fbd98 708 }
el14dg 3:70a7b64fbd98 709
el14dg 3:70a7b64fbd98 710 void read_pin()
el14dg 3:70a7b64fbd98 711 {
el14dg 3:70a7b64fbd98 712 pin = fopen("/sd/test.txt", "r");
el14dg 3:70a7b64fbd98 713
el14dg 3:70a7b64fbd98 714 int i = 0;
el14dg 3:70a7b64fbd98 715
el14dg 3:70a7b64fbd98 716 pc.printf("Reading into set_pin array...\n");
el14dg 3:70a7b64fbd98 717
el14dg 3:70a7b64fbd98 718 while (fscanf(pin, "%d,%d",&index_array[i],&set_pin[i]) != EOF) {
el14dg 3:70a7b64fbd98 719 i++; // read data into array and increment index
el14dg 3:70a7b64fbd98 720 }
el14dg 3:70a7b64fbd98 721
el14dg 3:70a7b64fbd98 722 fclose(pin); // ensure you close the file after reading
el14dg 3:70a7b64fbd98 723
el14dg 3:70a7b64fbd98 724 for(int i = 0; i < 4 ; i++) {
el14dg 3:70a7b64fbd98 725
el14dg 3:70a7b64fbd98 726 pc.printf("[%d] %d\n",i,set_pin[i]);
el14dg 3:70a7b64fbd98 727
el14dg 3:70a7b64fbd98 728 }
el14dg 3:70a7b64fbd98 729
el14dg 3:70a7b64fbd98 730 pc.printf("Done.\n");
el14dg 3:70a7b64fbd98 731
el14dg 3:70a7b64fbd98 732 }
el14dg 3:70a7b64fbd98 733
el14dg 3:70a7b64fbd98 734 void delete_file(char filename[])
el14dg 3:70a7b64fbd98 735 {
el14dg 3:70a7b64fbd98 736 pc.printf("Deleting file '%s'...",filename);
el14dg 3:70a7b64fbd98 737 FILE *fp = fopen(filename, "r"); // try and open file
el14dg 3:70a7b64fbd98 738 if (fp != NULL) { // if it does open...
el14dg 3:70a7b64fbd98 739 fclose(fp); // close it
el14dg 3:70a7b64fbd98 740 remove(filename); // and then delete
el14dg 3:70a7b64fbd98 741 pc.printf("Done!\n");
el14dg 3:70a7b64fbd98 742 }
el14dg 3:70a7b64fbd98 743 // if we can't open it, it doesn't exist and so we can't delete it
el14dg 3:70a7b64fbd98 744 }