Mobile Security System - Revision 1.0

Dependencies:   FXOS8700Q N5110 SDFileSystem SRF02 mbed

Committer:
el14dg
Date:
Sun May 01 16:53:56 2016 +0000
Revision:
5:41cb88f47f42
Parent:
4:9cac024c057c
Child:
6:dc1229224d8e
setting screen implemented

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 5:41cb88f47f42 18
el14dg 2:e504a3cfe113 19 init_serial();
el14dg 0:12ae42019e9f 20 init_K64F();
el14dg 2:e504a3cfe113 21 init_buttons();
el14dg 5:41cb88f47f42 22 init_variables();
el14dg 2:e504a3cfe113 23 lcd.init();
el14dg 3:70a7b64fbd98 24
el14dg 3:70a7b64fbd98 25 read_pin();
el14dg 4:9cac024c057c 26
el14dg 5:41cb88f47f42 27 buzzer.period(1.0/500.0); // 500 Hz
el14dg 4:9cac024c057c 28
el14dg 5:41cb88f47f42 29 buzzer.write(0.5);
el14dg 3:70a7b64fbd98 30
el14dg 5:41cb88f47f42 31 wait(2);
el14dg 5:41cb88f47f42 32
el14dg 2:e504a3cfe113 33 screen_selection();
el14dg 2:e504a3cfe113 34
el14dg 2:e504a3cfe113 35 wait(4);
el14dg 2:e504a3cfe113 36
el14dg 3:70a7b64fbd98 37 g_next_state = 1;
el14dg 5:41cb88f47f42 38
el14dg 5:41cb88f47f42 39 screen_selection();
el14dg 5:41cb88f47f42 40
el14dg 5:41cb88f47f42 41 g_current_state = 1;
el14dg 3:70a7b64fbd98 42
el14dg 3:70a7b64fbd98 43
el14dg 0:12ae42019e9f 44 while (1) {
el14dg 0:12ae42019e9f 45
el14dg 3:70a7b64fbd98 46
el14dg 2:e504a3cfe113 47 if (g_button_0_flag) {
el14dg 3:70a7b64fbd98 48
el14dg 3:70a7b64fbd98 49 pc.printf("g_button_0_flag = %d \n", g_button_0_flag);
el14dg 2:e504a3cfe113 50
el14dg 2:e504a3cfe113 51 g_button_0_flag = 0;
el14dg 2:e504a3cfe113 52
el14dg 3:70a7b64fbd98 53 button_0_protocol();
el14dg 5:41cb88f47f42 54
el14dg 5:41cb88f47f42 55 pc.printf("Current State = %d \n",g_current_state);
el14dg 5:41cb88f47f42 56 pc.printf("Next State = %d \n",g_next_state);
el14dg 2:e504a3cfe113 57
el14dg 0:12ae42019e9f 58 }
el14dg 3:70a7b64fbd98 59
el14dg 2:e504a3cfe113 60 if (g_button_1_flag) {
el14dg 3:70a7b64fbd98 61
el14dg 3:70a7b64fbd98 62 pc.printf("g_button_1_flag = %d \n", g_button_1_flag);
el14dg 2:e504a3cfe113 63
el14dg 2:e504a3cfe113 64 g_button_1_flag = 0;
el14dg 4:9cac024c057c 65
el14dg 3:70a7b64fbd98 66 button_1_protocol();
el14dg 0:12ae42019e9f 67
el14dg 5:41cb88f47f42 68 pc.printf("Current State = %d \n",g_current_state);
el14dg 5:41cb88f47f42 69 pc.printf("Next State = %d \n",g_next_state);
el14dg 5:41cb88f47f42 70
el14dg 2:e504a3cfe113 71 }
el14dg 2:e504a3cfe113 72
el14dg 2:e504a3cfe113 73 if (g_button_c_flag) {
el14dg 3:70a7b64fbd98 74
el14dg 3:70a7b64fbd98 75 pc.printf("g_button_c_flag = %d \n", g_button_c_flag);
el14dg 2:e504a3cfe113 76
el14dg 2:e504a3cfe113 77 g_button_c_flag = 0;
el14dg 5:41cb88f47f42 78
el14dg 3:70a7b64fbd98 79 button_c_protocol();
el14dg 5:41cb88f47f42 80
el14dg 5:41cb88f47f42 81 pc.printf("Current State = %d \n",g_current_state);
el14dg 5:41cb88f47f42 82 pc.printf("Next State = %d \n",g_next_state);
el14dg 5:41cb88f47f42 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 g_setting_distance_flag = 0;
el14dg 3:70a7b64fbd98 89
el14dg 3:70a7b64fbd98 90 get_setting_distance();
el14dg 3:70a7b64fbd98 91
el14dg 3:70a7b64fbd98 92 }
el14dg 3:70a7b64fbd98 93
el14dg 3:70a7b64fbd98 94 if (g_intruder_distance_flag) {
el14dg 3:70a7b64fbd98 95
el14dg 3:70a7b64fbd98 96 g_setting_distance_flag = 0;
el14dg 3:70a7b64fbd98 97
el14dg 3:70a7b64fbd98 98 get_intruder_distance();
el14dg 3:70a7b64fbd98 99
el14dg 5:41cb88f47f42 100 }
el14dg 5:41cb88f47f42 101
el14dg 5:41cb88f47f42 102 if (g_setting_screen_flag) {
el14dg 5:41cb88f47f42 103
el14dg 5:41cb88f47f42 104 g_setting_screen_flag = 0;
el14dg 5:41cb88f47f42 105
el14dg 5:41cb88f47f42 106 loading_bar();
el14dg 5:41cb88f47f42 107
el14dg 4:9cac024c057c 108 }
el14dg 3:70a7b64fbd98 109
el14dg 5:41cb88f47f42 110 if (g_led_buzzer_flag) {
el14dg 5:41cb88f47f42 111
el14dg 5:41cb88f47f42 112 g_led_buzzer_flag = 0;
el14dg 3:70a7b64fbd98 113
el14dg 5:41cb88f47f42 114 led_alarm = !led_alarm;
el14dg 5:41cb88f47f42 115
el14dg 5:41cb88f47f42 116 if (buzzer == 0) {
el14dg 5:41cb88f47f42 117
el14dg 5:41cb88f47f42 118 buzzer = 0.5;
el14dg 5:41cb88f47f42 119
el14dg 5:41cb88f47f42 120 }
el14dg 5:41cb88f47f42 121
el14dg 5:41cb88f47f42 122 else {
el14dg 5:41cb88f47f42 123
el14dg 5:41cb88f47f42 124 buzzer = 0;
el14dg 5:41cb88f47f42 125
el14dg 5:41cb88f47f42 126 }
el14dg 0:12ae42019e9f 127
el14dg 2:e504a3cfe113 128 }
el14dg 3:70a7b64fbd98 129
el14dg 5:41cb88f47f42 130 if (g_pin_timeout_flag) {
el14dg 3:70a7b64fbd98 131
el14dg 5:41cb88f47f42 132 g_pin_timeout_flag = 0;
el14dg 3:70a7b64fbd98 133
el14dg 5:41cb88f47f42 134 timeout_protocol();
el14dg 5:41cb88f47f42 135
el14dg 5:41cb88f47f42 136
el14dg 5:41cb88f47f42 137 }
el14dg 5:41cb88f47f42 138
el14dg 3:70a7b64fbd98 139 if (g_next_state != g_current_state) {
el14dg 5:41cb88f47f42 140
el14dg 5:41cb88f47f42 141 pc.printf("TRANSITION \n");
el14dg 3:70a7b64fbd98 142
el14dg 5:41cb88f47f42 143 screen_selection(); // the screen is determined by the current value of g_next_state
el14dg 5:41cb88f47f42 144
el14dg 5:41cb88f47f42 145 g_current_state = g_next_state;
el14dg 5:41cb88f47f42 146
el14dg 5:41cb88f47f42 147 pc.printf("Current State = %d \n",g_current_state);
el14dg 5:41cb88f47f42 148
el14dg 3:70a7b64fbd98 149 }
el14dg 3:70a7b64fbd98 150
el14dg 5:41cb88f47f42 151
el14dg 3:70a7b64fbd98 152
el14dg 3:70a7b64fbd98 153 if (g_current_state == 4) {
el14dg 5:41cb88f47f42 154
el14dg 3:70a7b64fbd98 155 if (setting_distance_ticker_status == 0) {
el14dg 3:70a7b64fbd98 156
el14dg 3:70a7b64fbd98 157 setting_distance_ticker_status = 1;
el14dg 3:70a7b64fbd98 158
el14dg 3:70a7b64fbd98 159 setting_distance.attach(&setting_distance_isr,0.1);
el14dg 4:9cac024c057c 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 == 5) {
el14dg 3:70a7b64fbd98 166
el14dg 3:70a7b64fbd98 167 intruder_distance.attach(&intruder_distance_isr,0.1);
el14dg 3:70a7b64fbd98 168
el14dg 3:70a7b64fbd98 169 }
el14dg 4:9cac024c057c 170
el14dg 4:9cac024c057c 171 else {
el14dg 4:9cac024c057c 172
el14dg 3:70a7b64fbd98 173 intruder_distance.detach();
el14dg 4:9cac024c057c 174
el14dg 4:9cac024c057c 175 }
el14dg 5:41cb88f47f42 176
el14dg 3:70a7b64fbd98 177
el14dg 2:e504a3cfe113 178 sleep();
el14dg 5:41cb88f47f42 179
el14dg 2:e504a3cfe113 180
el14dg 0:12ae42019e9f 181 }
el14dg 2:e504a3cfe113 182
el14dg 0:12ae42019e9f 183 }
el14dg 0:12ae42019e9f 184
el14dg 2:e504a3cfe113 185
el14dg 0:12ae42019e9f 186 void init_serial()
el14dg 0:12ae42019e9f 187 {
el14dg 2:e504a3cfe113 188 // Ensure terminal software matches
el14dg 3:70a7b64fbd98 189 pc.baud(115200);
el14dg 0:12ae42019e9f 190 }
el14dg 0:12ae42019e9f 191
el14dg 0:12ae42019e9f 192 void init_K64F()
el14dg 0:12ae42019e9f 193 {
el14dg 0:12ae42019e9f 194 // on-board LEDs are active-low, so set pin high to turn them off.
el14dg 0:12ae42019e9f 195 r_led = 1;
el14dg 0:12ae42019e9f 196 g_led = 1;
el14dg 0:12ae42019e9f 197 b_led = 1;
el14dg 0:12ae42019e9f 198
el14dg 0:12ae42019e9f 199 // since the on-board switches have external pull-ups, we should disable the internal pull-down
el14dg 0:12ae42019e9f 200 // resistors that are enabled by default using InterruptIn
el14dg 0:12ae42019e9f 201 sw2.mode(PullNone);
el14dg 0:12ae42019e9f 202 sw3.mode(PullNone);
el14dg 0:12ae42019e9f 203
el14dg 0:12ae42019e9f 204 }
el14dg 2:e504a3cfe113 205
el14dg 2:e504a3cfe113 206 void init_buttons()
el14dg 2:e504a3cfe113 207 {
el14dg 2:e504a3cfe113 208
el14dg 2:e504a3cfe113 209 button_0.fall(&button_0_isr);
el14dg 2:e504a3cfe113 210 button_1.fall(&button_1_isr);
el14dg 2:e504a3cfe113 211 button_c.fall(&button_c_isr);
el14dg 2:e504a3cfe113 212
el14dg 2:e504a3cfe113 213 button_0.mode(PullDown);
el14dg 2:e504a3cfe113 214 button_1.mode(PullDown);
el14dg 2:e504a3cfe113 215 button_c.mode(PullDown);
el14dg 2:e504a3cfe113 216
el14dg 2:e504a3cfe113 217 }
el14dg 2:e504a3cfe113 218
el14dg 5:41cb88f47f42 219 void init_variables()
el14dg 5:41cb88f47f42 220 {
el14dg 5:41cb88f47f42 221
el14dg 5:41cb88f47f42 222 one_second_distance = 0;
el14dg 5:41cb88f47f42 223 one_second_avg_distance = 0;
el14dg 5:41cb88f47f42 224 initial_setting_distance = 0;
el14dg 5:41cb88f47f42 225
el14dg 5:41cb88f47f42 226 pin_counter = 0;
el14dg 5:41cb88f47f42 227 incorrect_pin_flag = 0;
el14dg 5:41cb88f47f42 228
el14dg 5:41cb88f47f42 229 setting_distance_counter = 0;
el14dg 5:41cb88f47f42 230 intruder_distance_counter = 0;
el14dg 5:41cb88f47f42 231
el14dg 5:41cb88f47f42 232 g_button_0_flag = 0;
el14dg 5:41cb88f47f42 233 g_button_1_flag = 0;
el14dg 5:41cb88f47f42 234 g_button_c_flag = 0;
el14dg 5:41cb88f47f42 235 g_setting_distance_flag = 0;
el14dg 5:41cb88f47f42 236 g_intruder_distance_flag = 0;
el14dg 5:41cb88f47f42 237 g_pin_timeout_flag = 0;
el14dg 5:41cb88f47f42 238
el14dg 5:41cb88f47f42 239 setting_distance_ticker_status = 0;
el14dg 5:41cb88f47f42 240
el14dg 5:41cb88f47f42 241 g_current_state = 0;
el14dg 5:41cb88f47f42 242
el14dg 5:41cb88f47f42 243 }
el14dg 5:41cb88f47f42 244
el14dg 3:70a7b64fbd98 245 void setting_distance_isr()
el14dg 2:e504a3cfe113 246 {
el14dg 3:70a7b64fbd98 247 g_setting_distance_flag = 1;
el14dg 3:70a7b64fbd98 248
el14dg 3:70a7b64fbd98 249 }
el14dg 3:70a7b64fbd98 250
el14dg 3:70a7b64fbd98 251 void intruder_distance_isr()
el14dg 3:70a7b64fbd98 252 {
el14dg 3:70a7b64fbd98 253 g_intruder_distance_flag = 1;
el14dg 2:e504a3cfe113 254
el14dg 2:e504a3cfe113 255 }
el14dg 2:e504a3cfe113 256
el14dg 5:41cb88f47f42 257 void led_buzzer_isr()
el14dg 4:9cac024c057c 258 {
el14dg 5:41cb88f47f42 259 g_led_buzzer_flag = 1;
el14dg 5:41cb88f47f42 260
el14dg 5:41cb88f47f42 261 }
el14dg 5:41cb88f47f42 262
el14dg 5:41cb88f47f42 263 void setting_screen_isr()
el14dg 5:41cb88f47f42 264 {
el14dg 5:41cb88f47f42 265 g_setting_screen_flag = 1;
el14dg 4:9cac024c057c 266
el14dg 4:9cac024c057c 267 }
el14dg 4:9cac024c057c 268
el14dg 2:e504a3cfe113 269 void button_0_isr()
el14dg 2:e504a3cfe113 270 {
el14dg 2:e504a3cfe113 271 g_button_0_flag = 1;
el14dg 2:e504a3cfe113 272
el14dg 2:e504a3cfe113 273 }
el14dg 2:e504a3cfe113 274
el14dg 2:e504a3cfe113 275 void button_1_isr()
el14dg 2:e504a3cfe113 276 {
el14dg 2:e504a3cfe113 277 g_button_1_flag = 1;
el14dg 2:e504a3cfe113 278
el14dg 2:e504a3cfe113 279 }
el14dg 2:e504a3cfe113 280
el14dg 2:e504a3cfe113 281 void button_c_isr()
el14dg 2:e504a3cfe113 282 {
el14dg 2:e504a3cfe113 283 g_button_c_flag = 1;
el14dg 2:e504a3cfe113 284
el14dg 2:e504a3cfe113 285 }
el14dg 2:e504a3cfe113 286
el14dg 5:41cb88f47f42 287 void pin_timeout_isr()
el14dg 5:41cb88f47f42 288 {
el14dg 5:41cb88f47f42 289 g_pin_timeout_flag = 1;
el14dg 5:41cb88f47f42 290
el14dg 5:41cb88f47f42 291 }
el14dg 5:41cb88f47f42 292
el14dg 5:41cb88f47f42 293 void loading_bar()
el14dg 5:41cb88f47f42 294 {
el14dg 5:41cb88f47f42 295 setting_alarm_counter = setting_alarm_counter + 5;
el14dg 5:41cb88f47f42 296
el14dg 5:41cb88f47f42 297 if (setting_alarm_counter < 101) {
el14dg 5:41cb88f47f42 298
el14dg 5:41cb88f47f42 299 lcd.drawRect(0,20,setting_alarm_counter,5,1);
el14dg 5:41cb88f47f42 300
el14dg 5:41cb88f47f42 301 if (setting_alarm_counter < 10) {
el14dg 5:41cb88f47f42 302
el14dg 5:41cb88f47f42 303 length = sprintf(buffer,"0%d%%",setting_alarm_counter);
el14dg 5:41cb88f47f42 304
el14dg 5:41cb88f47f42 305 }
el14dg 5:41cb88f47f42 306
el14dg 5:41cb88f47f42 307 else {
el14dg 5:41cb88f47f42 308
el14dg 5:41cb88f47f42 309 length = sprintf(buffer,"%d%%",setting_alarm_counter);
el14dg 5:41cb88f47f42 310
el14dg 5:41cb88f47f42 311 }
el14dg 5:41cb88f47f42 312
el14dg 5:41cb88f47f42 313 if (length <= 14) {
el14dg 5:41cb88f47f42 314
el14dg 5:41cb88f47f42 315 if (setting_alarm_counter < 100) {
el14dg 5:41cb88f47f42 316
el14dg 5:41cb88f47f42 317 lcd.printString(buffer,33,4);
el14dg 5:41cb88f47f42 318
el14dg 5:41cb88f47f42 319 }
el14dg 5:41cb88f47f42 320
el14dg 5:41cb88f47f42 321 else {
el14dg 5:41cb88f47f42 322
el14dg 5:41cb88f47f42 323 lcd.printString(buffer,30,4);
el14dg 5:41cb88f47f42 324
el14dg 5:41cb88f47f42 325 }
el14dg 5:41cb88f47f42 326
el14dg 5:41cb88f47f42 327 }
el14dg 5:41cb88f47f42 328
el14dg 5:41cb88f47f42 329 lcd.refresh();
el14dg 5:41cb88f47f42 330
el14dg 5:41cb88f47f42 331
el14dg 5:41cb88f47f42 332 }
el14dg 5:41cb88f47f42 333 }
el14dg 5:41cb88f47f42 334
el14dg 3:70a7b64fbd98 335 void button_0_protocol()
el14dg 2:e504a3cfe113 336 {
el14dg 3:70a7b64fbd98 337 if (g_current_state == 2) {
el14dg 3:70a7b64fbd98 338
el14dg 3:70a7b64fbd98 339 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 340
el14dg 3:70a7b64fbd98 341 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 342
el14dg 3:70a7b64fbd98 343 pin_counter++;
el14dg 3:70a7b64fbd98 344
el14dg 3:70a7b64fbd98 345 }
el14dg 5:41cb88f47f42 346
el14dg 4:9cac024c057c 347 enter_pin();
el14dg 3:70a7b64fbd98 348
el14dg 3:70a7b64fbd98 349 }
el14dg 3:70a7b64fbd98 350
el14dg 3:70a7b64fbd98 351 else if (g_current_state == 3) {
el14dg 3:70a7b64fbd98 352
el14dg 3:70a7b64fbd98 353 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 354
el14dg 3:70a7b64fbd98 355 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 356
el14dg 3:70a7b64fbd98 357 pin_counter++;
el14dg 3:70a7b64fbd98 358
el14dg 3:70a7b64fbd98 359 }
el14dg 5:41cb88f47f42 360
el14dg 4:9cac024c057c 361 enter_pin();
el14dg 3:70a7b64fbd98 362
el14dg 3:70a7b64fbd98 363 }
el14dg 2:e504a3cfe113 364
el14dg 3:70a7b64fbd98 365 else if (g_current_state == 6) {
el14dg 3:70a7b64fbd98 366
el14dg 3:70a7b64fbd98 367 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 368
el14dg 3:70a7b64fbd98 369 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 370
el14dg 3:70a7b64fbd98 371 pin_counter++;
el14dg 3:70a7b64fbd98 372
el14dg 3:70a7b64fbd98 373 }
el14dg 5:41cb88f47f42 374
el14dg 4:9cac024c057c 375 enter_pin();
el14dg 3:70a7b64fbd98 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 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 382
el14dg 3:70a7b64fbd98 383 entered_pin[pin_counter] = 0;
el14dg 3:70a7b64fbd98 384
el14dg 3:70a7b64fbd98 385 pin_counter++;
el14dg 3:70a7b64fbd98 386
el14dg 3:70a7b64fbd98 387 }
el14dg 5:41cb88f47f42 388
el14dg 4:9cac024c057c 389 enter_pin();
el14dg 3:70a7b64fbd98 390
el14dg 3:70a7b64fbd98 391 }
el14dg 3:70a7b64fbd98 392
el14dg 3:70a7b64fbd98 393 else {
el14dg 2:e504a3cfe113 394
el14dg 3:70a7b64fbd98 395 g_next_state = fsm[g_current_state].nextState[0];
el14dg 3:70a7b64fbd98 396
el14dg 3:70a7b64fbd98 397 }
el14dg 3:70a7b64fbd98 398
el14dg 3:70a7b64fbd98 399 }
el14dg 3:70a7b64fbd98 400
el14dg 3:70a7b64fbd98 401 void button_1_protocol()
el14dg 3:70a7b64fbd98 402 {
el14dg 3:70a7b64fbd98 403
el14dg 3:70a7b64fbd98 404 if (g_current_state == 2) {
el14dg 3:70a7b64fbd98 405
el14dg 3:70a7b64fbd98 406 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 407
el14dg 3:70a7b64fbd98 408 entered_pin[pin_counter] = 1;
el14dg 3:70a7b64fbd98 409
el14dg 3:70a7b64fbd98 410 pin_counter++;
el14dg 3:70a7b64fbd98 411
el14dg 3:70a7b64fbd98 412 }
el14dg 5:41cb88f47f42 413
el14dg 4:9cac024c057c 414 enter_pin();
el14dg 3:70a7b64fbd98 415
el14dg 3:70a7b64fbd98 416 }
el14dg 3:70a7b64fbd98 417
el14dg 3:70a7b64fbd98 418 else if (g_current_state == 3) {
el14dg 3:70a7b64fbd98 419
el14dg 3:70a7b64fbd98 420 if (pin_counter < 4) {
el14dg 2:e504a3cfe113 421
el14dg 3:70a7b64fbd98 422 entered_pin[pin_counter] = 1;
el14dg 3:70a7b64fbd98 423
el14dg 3:70a7b64fbd98 424 pin_counter++;
el14dg 3:70a7b64fbd98 425
el14dg 3:70a7b64fbd98 426 }
el14dg 5:41cb88f47f42 427
el14dg 4:9cac024c057c 428 enter_pin();
el14dg 3:70a7b64fbd98 429
el14dg 3:70a7b64fbd98 430 }
el14dg 3:70a7b64fbd98 431
el14dg 3:70a7b64fbd98 432 else if (g_current_state == 6) {
el14dg 3:70a7b64fbd98 433
el14dg 3:70a7b64fbd98 434 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 435
el14dg 3:70a7b64fbd98 436 entered_pin[pin_counter] = 1;
el14dg 2:e504a3cfe113 437
el14dg 3:70a7b64fbd98 438 pin_counter++;
el14dg 3:70a7b64fbd98 439
el14dg 3:70a7b64fbd98 440 }
el14dg 5:41cb88f47f42 441
el14dg 4:9cac024c057c 442 enter_pin();
el14dg 3:70a7b64fbd98 443
el14dg 3:70a7b64fbd98 444 }
el14dg 3:70a7b64fbd98 445
el14dg 3:70a7b64fbd98 446 else if (g_current_state == 7) {
el14dg 3:70a7b64fbd98 447
el14dg 3:70a7b64fbd98 448 if (pin_counter < 4) {
el14dg 3:70a7b64fbd98 449
el14dg 3:70a7b64fbd98 450 entered_pin[pin_counter] = 1;
el14dg 3:70a7b64fbd98 451
el14dg 3:70a7b64fbd98 452 pin_counter++;
el14dg 2:e504a3cfe113 453
el14dg 2:e504a3cfe113 454 }
el14dg 5:41cb88f47f42 455
el14dg 4:9cac024c057c 456 enter_pin();
el14dg 5:41cb88f47f42 457
el14dg 3:70a7b64fbd98 458 }
el14dg 3:70a7b64fbd98 459
el14dg 3:70a7b64fbd98 460 else {
el14dg 3:70a7b64fbd98 461
el14dg 4:9cac024c057c 462 g_next_state = fsm[g_current_state].nextState[1];
el14dg 3:70a7b64fbd98 463
el14dg 3:70a7b64fbd98 464 }
el14dg 3:70a7b64fbd98 465
el14dg 3:70a7b64fbd98 466 }
el14dg 3:70a7b64fbd98 467
el14dg 3:70a7b64fbd98 468 void button_c_protocol()
el14dg 3:70a7b64fbd98 469 {
el14dg 3:70a7b64fbd98 470
el14dg 3:70a7b64fbd98 471 if (g_current_state == 2) {
el14dg 3:70a7b64fbd98 472
el14dg 4:9cac024c057c 473 screen_progression();
el14dg 3:70a7b64fbd98 474
el14dg 3:70a7b64fbd98 475 }
el14dg 3:70a7b64fbd98 476
el14dg 3:70a7b64fbd98 477 else if (g_current_state == 3) {
el14dg 3:70a7b64fbd98 478
el14dg 4:9cac024c057c 479 screen_progression();
el14dg 3:70a7b64fbd98 480
el14dg 3:70a7b64fbd98 481 }
el14dg 3:70a7b64fbd98 482
el14dg 3:70a7b64fbd98 483 else if (g_current_state == 6) {
el14dg 3:70a7b64fbd98 484
el14dg 4:9cac024c057c 485 screen_progression();
el14dg 2:e504a3cfe113 486
el14dg 3:70a7b64fbd98 487 }
el14dg 3:70a7b64fbd98 488
el14dg 3:70a7b64fbd98 489 else if (g_current_state == 7) {
el14dg 3:70a7b64fbd98 490
el14dg 4:9cac024c057c 491 screen_progression();
el14dg 3:70a7b64fbd98 492
el14dg 3:70a7b64fbd98 493 }
el14dg 3:70a7b64fbd98 494
el14dg 3:70a7b64fbd98 495 else {
el14dg 3:70a7b64fbd98 496
el14dg 4:9cac024c057c 497 g_next_state = fsm[g_current_state].nextState[2];
el14dg 3:70a7b64fbd98 498
el14dg 3:70a7b64fbd98 499 }
el14dg 2:e504a3cfe113 500
el14dg 3:70a7b64fbd98 501 }
el14dg 3:70a7b64fbd98 502
el14dg 3:70a7b64fbd98 503 void get_setting_distance()
el14dg 3:70a7b64fbd98 504 {
el14dg 3:70a7b64fbd98 505 distance[setting_distance_counter] = srf02.getDistanceCm();
el14dg 3:70a7b64fbd98 506
el14dg 3:70a7b64fbd98 507 setting_distance_counter++;
el14dg 3:70a7b64fbd98 508
el14dg 3:70a7b64fbd98 509 if (setting_distance_counter == 10) {
el14dg 3:70a7b64fbd98 510
el14dg 3:70a7b64fbd98 511 setting_distance.detach();
el14dg 3:70a7b64fbd98 512
el14dg 5:41cb88f47f42 513 calculate_setting_distance();
el14dg 5:41cb88f47f42 514
el14dg 5:41cb88f47f42 515 }
el14dg 5:41cb88f47f42 516
el14dg 5:41cb88f47f42 517 }
el14dg 5:41cb88f47f42 518
el14dg 5:41cb88f47f42 519 void timeout_protocol()
el14dg 5:41cb88f47f42 520 {
el14dg 5:41cb88f47f42 521
el14dg 5:41cb88f47f42 522 pin_timeout_counter++;
el14dg 5:41cb88f47f42 523
el14dg 5:41cb88f47f42 524 seconds_till_timeout = 20 - pin_timeout_counter;
el14dg 5:41cb88f47f42 525
el14dg 5:41cb88f47f42 526 if (seconds_till_timeout == 0) {
el14dg 5:41cb88f47f42 527
el14dg 5:41cb88f47f42 528 g_next_state = 8;
el14dg 5:41cb88f47f42 529
el14dg 5:41cb88f47f42 530 pin_timeout_counter = 0;
el14dg 5:41cb88f47f42 531
el14dg 5:41cb88f47f42 532 }
el14dg 5:41cb88f47f42 533
el14dg 5:41cb88f47f42 534 else {
el14dg 5:41cb88f47f42 535
el14dg 5:41cb88f47f42 536 if (seconds_till_timeout >= 10) {
el14dg 5:41cb88f47f42 537
el14dg 5:41cb88f47f42 538 length = sprintf(buffer,"%d",seconds_till_timeout);
el14dg 5:41cb88f47f42 539
el14dg 5:41cb88f47f42 540 }
el14dg 5:41cb88f47f42 541
el14dg 5:41cb88f47f42 542 else {
el14dg 5:41cb88f47f42 543
el14dg 5:41cb88f47f42 544 length = sprintf(buffer,"0%d",seconds_till_timeout);
el14dg 5:41cb88f47f42 545
el14dg 5:41cb88f47f42 546 }
el14dg 5:41cb88f47f42 547
el14dg 5:41cb88f47f42 548 if (length <= 14)
el14dg 5:41cb88f47f42 549 lcd.printString(buffer,3,4);
el14dg 5:41cb88f47f42 550
el14dg 5:41cb88f47f42 551 lcd.refresh();
el14dg 5:41cb88f47f42 552
el14dg 2:e504a3cfe113 553 }
el14dg 2:e504a3cfe113 554
el14dg 2:e504a3cfe113 555 }
el14dg 2:e504a3cfe113 556
el14dg 3:70a7b64fbd98 557 void get_intruder_distance()
el14dg 3:70a7b64fbd98 558 {
el14dg 3:70a7b64fbd98 559
el14dg 3:70a7b64fbd98 560 distance[intruder_distance_counter] = srf02.getDistanceCm();
el14dg 3:70a7b64fbd98 561
el14dg 3:70a7b64fbd98 562 intruder_distance_counter++;
el14dg 3:70a7b64fbd98 563
el14dg 3:70a7b64fbd98 564 if (intruder_distance_counter == 10) {
el14dg 3:70a7b64fbd98 565
el14dg 3:70a7b64fbd98 566 intruder_distance.detach();
el14dg 5:41cb88f47f42 567
el14dg 5:41cb88f47f42 568 calculate_intruder_distance();
el14dg 3:70a7b64fbd98 569
el14dg 3:70a7b64fbd98 570 }
el14dg 3:70a7b64fbd98 571
el14dg 3:70a7b64fbd98 572 }
el14dg 3:70a7b64fbd98 573
el14dg 3:70a7b64fbd98 574 void calculate_setting_distance()
el14dg 3:70a7b64fbd98 575 {
el14dg 3:70a7b64fbd98 576
el14dg 3:70a7b64fbd98 577 for (int i = 0; i < 10; i++) {
el14dg 3:70a7b64fbd98 578
el14dg 3:70a7b64fbd98 579 one_second_distance = one_second_distance + distance[i];
el14dg 3:70a7b64fbd98 580
el14dg 3:70a7b64fbd98 581 }
el14dg 3:70a7b64fbd98 582
el14dg 3:70a7b64fbd98 583 initial_setting_distance = (one_second_distance / 10);
el14dg 4:9cac024c057c 584
el14dg 4:9cac024c057c 585 pc.printf("Initial Setting Distance = %.2f cm\n",initial_setting_distance);
el14dg 3:70a7b64fbd98 586
el14dg 3:70a7b64fbd98 587 setting_distance_counter = 0;
el14dg 3:70a7b64fbd98 588
el14dg 3:70a7b64fbd98 589 one_second_distance = 0;
el14dg 3:70a7b64fbd98 590
el14dg 3:70a7b64fbd98 591 transition.attach(&screen_5_transition,5);
el14dg 3:70a7b64fbd98 592
el14dg 3:70a7b64fbd98 593 }
el14dg 3:70a7b64fbd98 594
el14dg 3:70a7b64fbd98 595 void calculate_intruder_distance()
el14dg 3:70a7b64fbd98 596 {
el14dg 3:70a7b64fbd98 597
el14dg 3:70a7b64fbd98 598 for (int i = 0; i < 10; i++) {
el14dg 3:70a7b64fbd98 599
el14dg 3:70a7b64fbd98 600 one_second_distance = one_second_distance + distance[i];
el14dg 3:70a7b64fbd98 601
el14dg 3:70a7b64fbd98 602 }
el14dg 3:70a7b64fbd98 603
el14dg 3:70a7b64fbd98 604 one_second_avg_distance = one_second_distance / 10;
el14dg 4:9cac024c057c 605
el14dg 4:9cac024c057c 606 pc.printf("Intruder Distance = %.2f cm\n",one_second_avg_distance);
el14dg 4:9cac024c057c 607
el14dg 3:70a7b64fbd98 608 intruder_distance_counter = 0;
el14dg 3:70a7b64fbd98 609
el14dg 3:70a7b64fbd98 610 one_second_distance = 0;
el14dg 3:70a7b64fbd98 611
el14dg 3:70a7b64fbd98 612
el14dg 5:41cb88f47f42 613 if (one_second_avg_distance > (1.05*initial_setting_distance)) {
el14dg 3:70a7b64fbd98 614
el14dg 3:70a7b64fbd98 615 g_next_state = 7;
el14dg 3:70a7b64fbd98 616
el14dg 3:70a7b64fbd98 617 g_current_state = 7;
el14dg 3:70a7b64fbd98 618
el14dg 3:70a7b64fbd98 619 screen_selection();
el14dg 3:70a7b64fbd98 620
el14dg 3:70a7b64fbd98 621 }
el14dg 3:70a7b64fbd98 622
el14dg 5:41cb88f47f42 623 else if (one_second_avg_distance < (0.95 * initial_setting_distance)) {
el14dg 3:70a7b64fbd98 624
el14dg 3:70a7b64fbd98 625 g_next_state = 7;
el14dg 3:70a7b64fbd98 626
el14dg 3:70a7b64fbd98 627 g_current_state = 7;
el14dg 3:70a7b64fbd98 628
el14dg 3:70a7b64fbd98 629 screen_selection();
el14dg 3:70a7b64fbd98 630
el14dg 3:70a7b64fbd98 631 }
el14dg 3:70a7b64fbd98 632
el14dg 3:70a7b64fbd98 633 else {
el14dg 3:70a7b64fbd98 634
el14dg 3:70a7b64fbd98 635 intruder_distance.attach(&intruder_distance_isr,0.1);
el14dg 3:70a7b64fbd98 636
el14dg 3:70a7b64fbd98 637 }
el14dg 3:70a7b64fbd98 638
el14dg 3:70a7b64fbd98 639
el14dg 3:70a7b64fbd98 640
el14dg 3:70a7b64fbd98 641 }
el14dg 3:70a7b64fbd98 642
el14dg 2:e504a3cfe113 643 void state_0_screen()
el14dg 2:e504a3cfe113 644 {
el14dg 2:e504a3cfe113 645 lcd.clear();
el14dg 2:e504a3cfe113 646
el14dg 5:41cb88f47f42 647 lcd.printString("Mobile",27,1);
el14dg 5:41cb88f47f42 648
el14dg 5:41cb88f47f42 649 lcd.printString("Security",18,2);
el14dg 2:e504a3cfe113 650
el14dg 5:41cb88f47f42 651 lcd.printString("System",27,3);
el14dg 5:41cb88f47f42 652
el14dg 5:41cb88f47f42 653 lcd_border();
el14dg 5:41cb88f47f42 654
el14dg 5:41cb88f47f42 655 led_alarm = 0;
el14dg 5:41cb88f47f42 656
el14dg 5:41cb88f47f42 657 buzzer.write(0.0);
el14dg 5:41cb88f47f42 658
el14dg 2:e504a3cfe113 659 lcd.refresh();
el14dg 2:e504a3cfe113 660
el14dg 2:e504a3cfe113 661 }
el14dg 2:e504a3cfe113 662
el14dg 2:e504a3cfe113 663 void state_1_screen()
el14dg 2:e504a3cfe113 664 {
el14dg 2:e504a3cfe113 665 lcd.clear();
el14dg 2:e504a3cfe113 666
el14dg 2:e504a3cfe113 667 lcd.printString("Set Alarm",15,1);
el14dg 2:e504a3cfe113 668
el14dg 2:e504a3cfe113 669 lcd.printString("Set New Pin",9,4);
el14dg 5:41cb88f47f42 670
el14dg 5:41cb88f47f42 671 lcd_border();
el14dg 5:41cb88f47f42 672
el14dg 5:41cb88f47f42 673 for (int i = 0; i < WIDTH; i++) {
el14dg 5:41cb88f47f42 674
el14dg 5:41cb88f47f42 675 lcd.setPixel(i,24);
el14dg 5:41cb88f47f42 676
el14dg 5:41cb88f47f42 677 }
el14dg 5:41cb88f47f42 678
el14dg 5:41cb88f47f42 679 pin_timeout.detach();
el14dg 5:41cb88f47f42 680
el14dg 5:41cb88f47f42 681 alerts.detach();
el14dg 5:41cb88f47f42 682
el14dg 5:41cb88f47f42 683 led_alarm = 0;
el14dg 5:41cb88f47f42 684
el14dg 5:41cb88f47f42 685 buzzer.write(0);
el14dg 5:41cb88f47f42 686
el14dg 5:41cb88f47f42 687 pin_timeout_counter = 0;
el14dg 5:41cb88f47f42 688
el14dg 2:e504a3cfe113 689 lcd.refresh();
el14dg 2:e504a3cfe113 690
el14dg 2:e504a3cfe113 691 }
el14dg 2:e504a3cfe113 692
el14dg 5:41cb88f47f42 693 void state_2_screen()
el14dg 2:e504a3cfe113 694 {
el14dg 2:e504a3cfe113 695 lcd.clear();
el14dg 2:e504a3cfe113 696
el14dg 2:e504a3cfe113 697 lcd.printString("Enter 4 Digit",3,1);
el14dg 2:e504a3cfe113 698
el14dg 2:e504a3cfe113 699 lcd.printString("Pin Below",15,2);
el14dg 5:41cb88f47f42 700
el14dg 5:41cb88f47f42 701 pin_text_box();
el14dg 5:41cb88f47f42 702
el14dg 5:41cb88f47f42 703 lcd_border();
el14dg 5:41cb88f47f42 704
el14dg 5:41cb88f47f42 705 led_alarm = 0;
el14dg 5:41cb88f47f42 706
el14dg 5:41cb88f47f42 707 buzzer.write(0.0);
el14dg 5:41cb88f47f42 708
el14dg 2:e504a3cfe113 709 lcd.refresh();
el14dg 2:e504a3cfe113 710
el14dg 2:e504a3cfe113 711 }
el14dg 2:e504a3cfe113 712
el14dg 3:70a7b64fbd98 713 void state_3_screen()
el14dg 3:70a7b64fbd98 714 {
el14dg 3:70a7b64fbd98 715 lcd.clear();
el14dg 3:70a7b64fbd98 716
el14dg 3:70a7b64fbd98 717 lcd.printString("Enter New 4",9,1);
el14dg 3:70a7b64fbd98 718
el14dg 3:70a7b64fbd98 719 lcd.printString("Digit Pin",15,2);
el14dg 5:41cb88f47f42 720
el14dg 5:41cb88f47f42 721 pin_text_box();
el14dg 3:70a7b64fbd98 722
el14dg 5:41cb88f47f42 723 lcd_border();
el14dg 5:41cb88f47f42 724
el14dg 5:41cb88f47f42 725 led_alarm = 0;
el14dg 5:41cb88f47f42 726
el14dg 5:41cb88f47f42 727 buzzer.write(0.0);
el14dg 5:41cb88f47f42 728
el14dg 3:70a7b64fbd98 729 lcd.refresh();
el14dg 3:70a7b64fbd98 730
el14dg 3:70a7b64fbd98 731 }
el14dg 3:70a7b64fbd98 732
el14dg 2:e504a3cfe113 733 void state_4_screen()
el14dg 2:e504a3cfe113 734 {
el14dg 2:e504a3cfe113 735 lcd.clear();
el14dg 2:e504a3cfe113 736
el14dg 2:e504a3cfe113 737 lcd.printString("Setting",21,1);
el14dg 5:41cb88f47f42 738
el14dg 5:41cb88f47f42 739 lcd_border();
el14dg 5:41cb88f47f42 740
el14dg 5:41cb88f47f42 741 lcd.drawRect(0,20,84,5,0);
el14dg 5:41cb88f47f42 742
el14dg 5:41cb88f47f42 743 lcd.printString("0%",41,4);
el14dg 5:41cb88f47f42 744
el14dg 5:41cb88f47f42 745 setting_alarm_counter = 0;
el14dg 5:41cb88f47f42 746
el14dg 5:41cb88f47f42 747 led_alarm = 0;
el14dg 5:41cb88f47f42 748
el14dg 5:41cb88f47f42 749 buzzer.write(0.0);
el14dg 5:41cb88f47f42 750
el14dg 5:41cb88f47f42 751 alerts.attach(&led_buzzer_isr,0.5);
el14dg 5:41cb88f47f42 752
el14dg 5:41cb88f47f42 753 setting_screen.attach(&setting_screen_isr,0.25);
el14dg 2:e504a3cfe113 754
el14dg 2:e504a3cfe113 755 lcd.refresh();
el14dg 2:e504a3cfe113 756
el14dg 2:e504a3cfe113 757 }
el14dg 2:e504a3cfe113 758
el14dg 2:e504a3cfe113 759 void state_5_screen()
el14dg 2:e504a3cfe113 760 {
el14dg 2:e504a3cfe113 761 lcd.clear();
el14dg 2:e504a3cfe113 762
el14dg 2:e504a3cfe113 763 lcd.printString("Alarm Set",15,1);
el14dg 2:e504a3cfe113 764
el14dg 2:e504a3cfe113 765 lcd.printString("DEACTIVATE?",9,4);
el14dg 5:41cb88f47f42 766
el14dg 5:41cb88f47f42 767 lcd_border();
el14dg 5:41cb88f47f42 768
el14dg 5:41cb88f47f42 769 for (int i = 0; i < WIDTH; i++) {
el14dg 5:41cb88f47f42 770
el14dg 5:41cb88f47f42 771 lcd.setPixel(i,20);
el14dg 5:41cb88f47f42 772
el14dg 5:41cb88f47f42 773 }
el14dg 5:41cb88f47f42 774
el14dg 5:41cb88f47f42 775 alerts.detach();
el14dg 5:41cb88f47f42 776
el14dg 5:41cb88f47f42 777 setting_screen.detach();
el14dg 5:41cb88f47f42 778
el14dg 5:41cb88f47f42 779 led_alarm = 1;
el14dg 5:41cb88f47f42 780
el14dg 5:41cb88f47f42 781 buzzer.write(0.5);
el14dg 5:41cb88f47f42 782
el14dg 5:41cb88f47f42 783 buzz.attach(&alarm_setting_buzz,1);
el14dg 5:41cb88f47f42 784
el14dg 5:41cb88f47f42 785 lcd.refresh();
el14dg 5:41cb88f47f42 786
el14dg 5:41cb88f47f42 787 }
el14dg 5:41cb88f47f42 788
el14dg 5:41cb88f47f42 789 void state_6_screen()
el14dg 5:41cb88f47f42 790 {
el14dg 5:41cb88f47f42 791 lcd.clear();
el14dg 5:41cb88f47f42 792
el14dg 5:41cb88f47f42 793 lcd.printString("DEACTIVATE",12,1);
el14dg 5:41cb88f47f42 794
el14dg 5:41cb88f47f42 795 lcd.printString("Enter Pin",15,2);
el14dg 5:41cb88f47f42 796
el14dg 5:41cb88f47f42 797 lcd_border();
el14dg 5:41cb88f47f42 798
el14dg 5:41cb88f47f42 799 pin_text_box();
el14dg 5:41cb88f47f42 800
el14dg 5:41cb88f47f42 801 led_alarm = 0;
el14dg 5:41cb88f47f42 802
el14dg 5:41cb88f47f42 803 buzzer.write(0.0);
el14dg 5:41cb88f47f42 804
el14dg 5:41cb88f47f42 805 alerts.attach(&led_buzzer_isr,0.5);
el14dg 5:41cb88f47f42 806
el14dg 5:41cb88f47f42 807 lcd.refresh();
el14dg 5:41cb88f47f42 808
el14dg 5:41cb88f47f42 809 }
el14dg 5:41cb88f47f42 810
el14dg 5:41cb88f47f42 811 void state_7_screen()
el14dg 5:41cb88f47f42 812 {
el14dg 5:41cb88f47f42 813 lcd.clear();
el14dg 5:41cb88f47f42 814
el14dg 5:41cb88f47f42 815 lcd.printString("INTRUDER",18,1);
el14dg 5:41cb88f47f42 816
el14dg 5:41cb88f47f42 817 lcd.printString("Enter Pin",15,2);
el14dg 5:41cb88f47f42 818
el14dg 5:41cb88f47f42 819 lcd.printString("20",3,4);
el14dg 5:41cb88f47f42 820
el14dg 5:41cb88f47f42 821 lcd_border();
el14dg 5:41cb88f47f42 822
el14dg 5:41cb88f47f42 823 lcd.drawRect(1,30,15,10,0);
el14dg 5:41cb88f47f42 824
el14dg 5:41cb88f47f42 825 pin_text_box();
el14dg 5:41cb88f47f42 826
el14dg 5:41cb88f47f42 827 led_alarm = 0;
el14dg 5:41cb88f47f42 828
el14dg 5:41cb88f47f42 829 buzzer.write(0.0);
el14dg 5:41cb88f47f42 830
el14dg 5:41cb88f47f42 831 alerts.attach(&led_buzzer_isr,0.5);
el14dg 5:41cb88f47f42 832
el14dg 5:41cb88f47f42 833 pin_timeout.attach(&pin_timeout_isr,1);
el14dg 2:e504a3cfe113 834
el14dg 2:e504a3cfe113 835 lcd.refresh();
el14dg 2:e504a3cfe113 836
el14dg 2:e504a3cfe113 837 }
el14dg 2:e504a3cfe113 838
el14dg 2:e504a3cfe113 839 void state_8_screen()
el14dg 2:e504a3cfe113 840 {
el14dg 2:e504a3cfe113 841 lcd.clear();
el14dg 2:e504a3cfe113 842
el14dg 2:e504a3cfe113 843 lcd.printString("ALARM",27,1);
el14dg 2:e504a3cfe113 844
el14dg 2:e504a3cfe113 845 lcd.printString("TRIGGERED",15,2);
el14dg 5:41cb88f47f42 846
el14dg 5:41cb88f47f42 847 lcd.printString("Menu?",27,4);
el14dg 5:41cb88f47f42 848
el14dg 5:41cb88f47f42 849 lcd_border();
el14dg 5:41cb88f47f42 850
el14dg 5:41cb88f47f42 851 led_alarm = 0;
el14dg 5:41cb88f47f42 852
el14dg 5:41cb88f47f42 853 buzzer.write(0.0);
el14dg 5:41cb88f47f42 854
el14dg 5:41cb88f47f42 855 alerts.detach();
el14dg 5:41cb88f47f42 856
el14dg 5:41cb88f47f42 857 pin_timeout.detach();
el14dg 5:41cb88f47f42 858
el14dg 5:41cb88f47f42 859 alerts.attach(&led_buzzer_isr,0.2);
el14dg 2:e504a3cfe113 860
el14dg 2:e504a3cfe113 861 lcd.refresh();
el14dg 2:e504a3cfe113 862 }
el14dg 2:e504a3cfe113 863
el14dg 2:e504a3cfe113 864 void screen_selection()
el14dg 2:e504a3cfe113 865 {
el14dg 5:41cb88f47f42 866
el14dg 5:41cb88f47f42 867 reset_entered_pin();
el14dg 3:70a7b64fbd98 868
el14dg 3:70a7b64fbd98 869 if (g_next_state == 0) {
el14dg 2:e504a3cfe113 870
el14dg 2:e504a3cfe113 871 state_0_screen();
el14dg 2:e504a3cfe113 872
el14dg 2:e504a3cfe113 873 }
el14dg 3:70a7b64fbd98 874
el14dg 3:70a7b64fbd98 875 else if (g_next_state == 1) {
el14dg 2:e504a3cfe113 876
el14dg 2:e504a3cfe113 877 state_1_screen();
el14dg 2:e504a3cfe113 878
el14dg 2:e504a3cfe113 879 }
el14dg 2:e504a3cfe113 880
el14dg 3:70a7b64fbd98 881 else if (g_next_state == 2) {
el14dg 2:e504a3cfe113 882
el14dg 5:41cb88f47f42 883 state_2_screen();
el14dg 2:e504a3cfe113 884
el14dg 2:e504a3cfe113 885 }
el14dg 2:e504a3cfe113 886
el14dg 3:70a7b64fbd98 887 else if (g_next_state == 3) {
el14dg 2:e504a3cfe113 888
el14dg 3:70a7b64fbd98 889 state_3_screen();
el14dg 2:e504a3cfe113 890
el14dg 2:e504a3cfe113 891 }
el14dg 2:e504a3cfe113 892
el14dg 3:70a7b64fbd98 893 else if (g_next_state == 4) {
el14dg 2:e504a3cfe113 894
el14dg 2:e504a3cfe113 895 state_4_screen();
el14dg 2:e504a3cfe113 896
el14dg 2:e504a3cfe113 897 }
el14dg 2:e504a3cfe113 898
el14dg 3:70a7b64fbd98 899 else if (g_next_state == 5) {
el14dg 2:e504a3cfe113 900
el14dg 2:e504a3cfe113 901 state_5_screen();
el14dg 2:e504a3cfe113 902
el14dg 2:e504a3cfe113 903 }
el14dg 2:e504a3cfe113 904
el14dg 3:70a7b64fbd98 905 else if (g_next_state == 6) {
el14dg 2:e504a3cfe113 906
el14dg 5:41cb88f47f42 907 state_6_screen();
el14dg 2:e504a3cfe113 908
el14dg 2:e504a3cfe113 909 }
el14dg 2:e504a3cfe113 910
el14dg 3:70a7b64fbd98 911 else if (g_next_state == 7) {
el14dg 2:e504a3cfe113 912
el14dg 5:41cb88f47f42 913 state_7_screen();
el14dg 2:e504a3cfe113 914
el14dg 2:e504a3cfe113 915 }
el14dg 2:e504a3cfe113 916
el14dg 2:e504a3cfe113 917 else {
el14dg 2:e504a3cfe113 918
el14dg 2:e504a3cfe113 919 state_8_screen();
el14dg 2:e504a3cfe113 920
el14dg 2:e504a3cfe113 921 }
el14dg 5:41cb88f47f42 922
el14dg 2:e504a3cfe113 923 }
el14dg 3:70a7b64fbd98 924
el14dg 3:70a7b64fbd98 925 void screen_5_transition()
el14dg 3:70a7b64fbd98 926 {
el14dg 4:9cac024c057c 927 g_next_state = 5;
el14dg 4:9cac024c057c 928
el14dg 3:70a7b64fbd98 929 screen_selection();
el14dg 3:70a7b64fbd98 930
el14dg 3:70a7b64fbd98 931 g_current_state = 5;
el14dg 4:9cac024c057c 932
el14dg 4:9cac024c057c 933 setting_distance_ticker_status = 0;
el14dg 3:70a7b64fbd98 934
el14dg 3:70a7b64fbd98 935 intruder_distance.attach(&intruder_distance_isr,0.1);
el14dg 4:9cac024c057c 936
el14dg 3:70a7b64fbd98 937 }
el14dg 3:70a7b64fbd98 938
el14dg 4:9cac024c057c 939 void screen_progression()
el14dg 4:9cac024c057c 940 {
el14dg 4:9cac024c057c 941 if (g_current_state == 3) {
el14dg 4:9cac024c057c 942
el14dg 4:9cac024c057c 943 if (pin_counter > 3) {
el14dg 4:9cac024c057c 944
el14dg 4:9cac024c057c 945 change_pin();
el14dg 4:9cac024c057c 946
el14dg 4:9cac024c057c 947 read_pin();
el14dg 4:9cac024c057c 948
el14dg 4:9cac024c057c 949 g_next_state = fsm[g_current_state].nextState[2];
el14dg 4:9cac024c057c 950
el14dg 4:9cac024c057c 951 }
el14dg 4:9cac024c057c 952 else {
el14dg 4:9cac024c057c 953
el14dg 4:9cac024c057c 954 g_next_state = fsm[g_current_state].nextState[3];
el14dg 4:9cac024c057c 955
el14dg 4:9cac024c057c 956 }
el14dg 4:9cac024c057c 957 }
el14dg 4:9cac024c057c 958
el14dg 4:9cac024c057c 959 else {
el14dg 4:9cac024c057c 960
el14dg 4:9cac024c057c 961 check_pin();
el14dg 4:9cac024c057c 962
el14dg 4:9cac024c057c 963 if (incorrect_pin_flag == 1) {
el14dg 4:9cac024c057c 964
el14dg 4:9cac024c057c 965 incorrect_pin_flag = 0;
el14dg 4:9cac024c057c 966
el14dg 4:9cac024c057c 967 g_next_state = fsm[g_current_state].nextState[3];
el14dg 4:9cac024c057c 968
el14dg 4:9cac024c057c 969 pc.printf("g_next_state = %d\n",g_next_state);
el14dg 4:9cac024c057c 970
el14dg 4:9cac024c057c 971 }
el14dg 4:9cac024c057c 972
el14dg 4:9cac024c057c 973 else {
el14dg 4:9cac024c057c 974
el14dg 4:9cac024c057c 975 g_next_state = fsm[g_current_state].nextState[2];
el14dg 4:9cac024c057c 976
el14dg 4:9cac024c057c 977 pc.printf("g_next_state = %d\n",g_next_state);
el14dg 4:9cac024c057c 978
el14dg 4:9cac024c057c 979 }
el14dg 4:9cac024c057c 980
el14dg 4:9cac024c057c 981 }
el14dg 4:9cac024c057c 982
el14dg 5:41cb88f47f42 983 }
el14dg 5:41cb88f47f42 984
el14dg 5:41cb88f47f42 985 void alarm_setting_buzz()
el14dg 5:41cb88f47f42 986 {
el14dg 5:41cb88f47f42 987
el14dg 5:41cb88f47f42 988 buzzer.write(0.0);
el14dg 5:41cb88f47f42 989
el14dg 5:41cb88f47f42 990 }
el14dg 5:41cb88f47f42 991
el14dg 5:41cb88f47f42 992 void lcd_border()
el14dg 5:41cb88f47f42 993 {
el14dg 5:41cb88f47f42 994 lcd.drawRect(0,0,83,47,0);
el14dg 5:41cb88f47f42 995
el14dg 5:41cb88f47f42 996 lcd.drawRect(1,1,81,45,0);
el14dg 5:41cb88f47f42 997
el14dg 5:41cb88f47f42 998 }
el14dg 5:41cb88f47f42 999
el14dg 5:41cb88f47f42 1000 void pin_text_box()
el14dg 5:41cb88f47f42 1001 {
el14dg 5:41cb88f47f42 1002 lcd.drawRect(15,30,15,10,0); // transparent, just outline
el14dg 5:41cb88f47f42 1003 lcd.drawRect(29,30,15,10,0); // transparent, just outline
el14dg 5:41cb88f47f42 1004 lcd.drawRect(43,30,15,10,0); // transparent, just outline
el14dg 5:41cb88f47f42 1005 lcd.drawRect(57,30,15,10,0); // transparent, just outline
el14dg 5:41cb88f47f42 1006
el14dg 5:41cb88f47f42 1007 }
el14dg 4:9cac024c057c 1008
el14dg 4:9cac024c057c 1009 void enter_pin()
el14dg 4:9cac024c057c 1010 {
el14dg 4:9cac024c057c 1011 if (pin_counter == 1) {
el14dg 4:9cac024c057c 1012
el14dg 5:41cb88f47f42 1013 lcd.printString("*",20,4);
el14dg 4:9cac024c057c 1014
el14dg 4:9cac024c057c 1015 }
el14dg 4:9cac024c057c 1016
el14dg 4:9cac024c057c 1017 else if (pin_counter == 2) {
el14dg 4:9cac024c057c 1018
el14dg 4:9cac024c057c 1019 lcd.printString("*",34,4);
el14dg 4:9cac024c057c 1020
el14dg 4:9cac024c057c 1021 }
el14dg 4:9cac024c057c 1022
el14dg 4:9cac024c057c 1023 else if (pin_counter == 3) {
el14dg 4:9cac024c057c 1024
el14dg 5:41cb88f47f42 1025 lcd.printString("*",48,4);
el14dg 4:9cac024c057c 1026
el14dg 4:9cac024c057c 1027 }
el14dg 4:9cac024c057c 1028
el14dg 4:9cac024c057c 1029 else if (pin_counter == 4) {
el14dg 4:9cac024c057c 1030
el14dg 5:41cb88f47f42 1031 lcd.printString("*",62,4);
el14dg 4:9cac024c057c 1032
el14dg 4:9cac024c057c 1033 }
el14dg 4:9cac024c057c 1034
el14dg 4:9cac024c057c 1035 }
el14dg 4:9cac024c057c 1036
el14dg 4:9cac024c057c 1037 void check_pin()
el14dg 4:9cac024c057c 1038 {
el14dg 4:9cac024c057c 1039 for (int i = 0; i < 4; i++) {
el14dg 4:9cac024c057c 1040
el14dg 4:9cac024c057c 1041 if (entered_pin[i] != set_pin[i]) {
el14dg 4:9cac024c057c 1042
el14dg 4:9cac024c057c 1043 pc.printf("entered pin doesn't match set pin...");
el14dg 4:9cac024c057c 1044
el14dg 4:9cac024c057c 1045 incorrect_pin_flag = 1;
el14dg 4:9cac024c057c 1046
el14dg 4:9cac024c057c 1047 break;
el14dg 4:9cac024c057c 1048
el14dg 4:9cac024c057c 1049 }
el14dg 4:9cac024c057c 1050
el14dg 4:9cac024c057c 1051 }
el14dg 4:9cac024c057c 1052
el14dg 5:41cb88f47f42 1053 }
el14dg 5:41cb88f47f42 1054
el14dg 5:41cb88f47f42 1055 void reset_entered_pin()
el14dg 5:41cb88f47f42 1056 {
el14dg 5:41cb88f47f42 1057 for (int i = 0; i < 4; i++) {
el14dg 5:41cb88f47f42 1058
el14dg 5:41cb88f47f42 1059 entered_pin[i] = -1;
el14dg 5:41cb88f47f42 1060
el14dg 5:41cb88f47f42 1061 }
el14dg 5:41cb88f47f42 1062
el14dg 5:41cb88f47f42 1063 pin_counter = 0;
el14dg 5:41cb88f47f42 1064
el14dg 5:41cb88f47f42 1065 }
el14dg 4:9cac024c057c 1066
el14dg 3:70a7b64fbd98 1067 void change_pin()
el14dg 3:70a7b64fbd98 1068 {
el14dg 3:70a7b64fbd98 1069 delete_file("/sd/test.txt");
el14dg 3:70a7b64fbd98 1070
el14dg 3:70a7b64fbd98 1071 pin = fopen("/sd/test.txt", "a");
el14dg 3:70a7b64fbd98 1072
el14dg 3:70a7b64fbd98 1073 if (pin == NULL) { // if it can't open the file then print error message
el14dg 3:70a7b64fbd98 1074
el14dg 3:70a7b64fbd98 1075 pc.printf("Error! Unable to open file!\n");
el14dg 3:70a7b64fbd98 1076
el14dg 3:70a7b64fbd98 1077 }
el14dg 3:70a7b64fbd98 1078
el14dg 3:70a7b64fbd98 1079 else {
el14dg 3:70a7b64fbd98 1080
el14dg 4:9cac024c057c 1081 pc.printf("Writing to file....\n");
el14dg 3:70a7b64fbd98 1082
el14dg 3:70a7b64fbd98 1083 for(int i = 0; i < 4; i++) {
el14dg 3:70a7b64fbd98 1084
el14dg 3:70a7b64fbd98 1085 int pin_element = entered_pin[i];; // pin_element variable
el14dg 3:70a7b64fbd98 1086
el14dg 3:70a7b64fbd98 1087 fprintf(pin, "%d,%d\n",i,pin_element); // print formatted string to file (CSV)
el14dg 3:70a7b64fbd98 1088 }
el14dg 3:70a7b64fbd98 1089
el14dg 3:70a7b64fbd98 1090 for(int i = 0; i < 4; i++) {
el14dg 3:70a7b64fbd98 1091
el14dg 3:70a7b64fbd98 1092 pc.printf("[%d] %d\n",i,entered_pin[i]);
el14dg 3:70a7b64fbd98 1093 }
el14dg 3:70a7b64fbd98 1094
el14dg 3:70a7b64fbd98 1095 pc.printf("Done.\n");
el14dg 3:70a7b64fbd98 1096
el14dg 3:70a7b64fbd98 1097 fclose(pin); // ensure you close the file after writing
el14dg 3:70a7b64fbd98 1098
el14dg 3:70a7b64fbd98 1099 }
el14dg 3:70a7b64fbd98 1100
el14dg 3:70a7b64fbd98 1101 }
el14dg 3:70a7b64fbd98 1102
el14dg 3:70a7b64fbd98 1103 void read_pin()
el14dg 3:70a7b64fbd98 1104 {
el14dg 3:70a7b64fbd98 1105 pin = fopen("/sd/test.txt", "r");
el14dg 3:70a7b64fbd98 1106
el14dg 3:70a7b64fbd98 1107 int i = 0;
el14dg 3:70a7b64fbd98 1108
el14dg 3:70a7b64fbd98 1109 pc.printf("Reading into set_pin array...\n");
el14dg 3:70a7b64fbd98 1110
el14dg 3:70a7b64fbd98 1111 while (fscanf(pin, "%d,%d",&index_array[i],&set_pin[i]) != EOF) {
el14dg 3:70a7b64fbd98 1112 i++; // read data into array and increment index
el14dg 3:70a7b64fbd98 1113 }
el14dg 3:70a7b64fbd98 1114
el14dg 3:70a7b64fbd98 1115 fclose(pin); // ensure you close the file after reading
el14dg 3:70a7b64fbd98 1116
el14dg 3:70a7b64fbd98 1117 for(int i = 0; i < 4 ; i++) {
el14dg 3:70a7b64fbd98 1118
el14dg 3:70a7b64fbd98 1119 pc.printf("[%d] %d\n",i,set_pin[i]);
el14dg 3:70a7b64fbd98 1120
el14dg 3:70a7b64fbd98 1121 }
el14dg 3:70a7b64fbd98 1122
el14dg 3:70a7b64fbd98 1123 pc.printf("Done.\n");
el14dg 3:70a7b64fbd98 1124
el14dg 3:70a7b64fbd98 1125 }
el14dg 3:70a7b64fbd98 1126
el14dg 3:70a7b64fbd98 1127 void delete_file(char filename[])
el14dg 3:70a7b64fbd98 1128 {
el14dg 3:70a7b64fbd98 1129 pc.printf("Deleting file '%s'...",filename);
el14dg 3:70a7b64fbd98 1130 FILE *fp = fopen(filename, "r"); // try and open file
el14dg 3:70a7b64fbd98 1131 if (fp != NULL) { // if it does open...
el14dg 3:70a7b64fbd98 1132 fclose(fp); // close it
el14dg 3:70a7b64fbd98 1133 remove(filename); // and then delete
el14dg 3:70a7b64fbd98 1134 pc.printf("Done!\n");
el14dg 3:70a7b64fbd98 1135 }
el14dg 3:70a7b64fbd98 1136 // if we can't open it, it doesn't exist and so we can't delete it
el14dg 3:70a7b64fbd98 1137 }