Mobile Security System - Revision 1.0

Dependencies:   FXOS8700Q N5110 SDFileSystem SRF02 mbed

Committer:
el14dg
Date:
Sat Apr 02 13:50:00 2016 +0000
Revision:
2:e504a3cfe113
Parent:
1:3ae4192d0c25
Child:
3:70a7b64fbd98
Interrupts navigate through all states as intended.

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 2:e504a3cfe113 24
el14dg 2:e504a3cfe113 25 g_button_0_flag = 0;
el14dg 2:e504a3cfe113 26 g_button_1_flag = 0;
el14dg 2:e504a3cfe113 27 g_button_c_flag = 0;
el14dg 2:e504a3cfe113 28
el14dg 2:e504a3cfe113 29 g_current_state = 0;
el14dg 2:e504a3cfe113 30
el14dg 2:e504a3cfe113 31 screen_selection();
el14dg 2:e504a3cfe113 32
el14dg 2:e504a3cfe113 33 wait(4);
el14dg 2:e504a3cfe113 34
el14dg 2:e504a3cfe113 35 g_current_state = 1;
el14dg 2:e504a3cfe113 36
el14dg 2:e504a3cfe113 37
el14dg 0:12ae42019e9f 38 while (1) {
el14dg 0:12ae42019e9f 39
el14dg 2:e504a3cfe113 40 pc.printf("g_current_state0 = %d ",g_current_state);
el14dg 2:e504a3cfe113 41
el14dg 2:e504a3cfe113 42 if (g_button_0_flag) {
el14dg 2:e504a3cfe113 43
el14dg 2:e504a3cfe113 44 pc.printf("g_button_0_flag = %d ",g_button_0_flag);
el14dg 2:e504a3cfe113 45
el14dg 2:e504a3cfe113 46 g_button_0_flag = 0;
el14dg 2:e504a3cfe113 47
el14dg 2:e504a3cfe113 48 g_current_state = fsm[g_current_state].nextState[0];
el14dg 2:e504a3cfe113 49
el14dg 0:12ae42019e9f 50 }
el14dg 2:e504a3cfe113 51
el14dg 2:e504a3cfe113 52 pc.printf("g_current_state1 = %d ",g_current_state);
el14dg 2:e504a3cfe113 53
el14dg 2:e504a3cfe113 54 if (g_button_1_flag) {
el14dg 2:e504a3cfe113 55
el14dg 2:e504a3cfe113 56 pc.printf("g_button_1_flag = %d ",g_button_1_flag);
el14dg 2:e504a3cfe113 57
el14dg 2:e504a3cfe113 58 g_button_1_flag = 0;
el14dg 2:e504a3cfe113 59
el14dg 2:e504a3cfe113 60 g_current_state = fsm[g_current_state].nextState[1];
el14dg 0:12ae42019e9f 61
el14dg 2:e504a3cfe113 62 }
el14dg 2:e504a3cfe113 63
el14dg 2:e504a3cfe113 64 pc.printf("g_current_state2 = %d ",g_current_state);
el14dg 2:e504a3cfe113 65
el14dg 2:e504a3cfe113 66 if (g_button_c_flag) {
el14dg 2:e504a3cfe113 67
el14dg 2:e504a3cfe113 68 pc.printf("g_button_c_flag = %d ",g_button_c_flag);
el14dg 2:e504a3cfe113 69
el14dg 2:e504a3cfe113 70 g_button_c_flag = 0;
el14dg 2:e504a3cfe113 71
el14dg 2:e504a3cfe113 72 g_current_state = fsm[g_current_state].nextState[2];
el14dg 0:12ae42019e9f 73
el14dg 2:e504a3cfe113 74 }
el14dg 2:e504a3cfe113 75
el14dg 2:e504a3cfe113 76 pc.printf("g_current_state3 = %d ",g_current_state);
el14dg 2:e504a3cfe113 77
el14dg 2:e504a3cfe113 78 screen_selection(); // the screen is determined by the current value of g_current_state
el14dg 1:3ae4192d0c25 79
el14dg 2:e504a3cfe113 80 sleep();
el14dg 2:e504a3cfe113 81
el14dg 0:12ae42019e9f 82 }
el14dg 2:e504a3cfe113 83
el14dg 0:12ae42019e9f 84 }
el14dg 0:12ae42019e9f 85
el14dg 2:e504a3cfe113 86
el14dg 0:12ae42019e9f 87 void init_serial()
el14dg 0:12ae42019e9f 88 {
el14dg 2:e504a3cfe113 89 // Ensure terminal software matches
el14dg 2:e504a3cfe113 90 pc.baud(9600);
el14dg 0:12ae42019e9f 91 }
el14dg 0:12ae42019e9f 92
el14dg 0:12ae42019e9f 93 void init_K64F()
el14dg 0:12ae42019e9f 94 {
el14dg 0:12ae42019e9f 95 // on-board LEDs are active-low, so set pin high to turn them off.
el14dg 0:12ae42019e9f 96 r_led = 1;
el14dg 0:12ae42019e9f 97 g_led = 1;
el14dg 0:12ae42019e9f 98 b_led = 1;
el14dg 0:12ae42019e9f 99
el14dg 0:12ae42019e9f 100 // since the on-board switches have external pull-ups, we should disable the internal pull-down
el14dg 0:12ae42019e9f 101 // resistors that are enabled by default using InterruptIn
el14dg 0:12ae42019e9f 102 sw2.mode(PullNone);
el14dg 0:12ae42019e9f 103 sw3.mode(PullNone);
el14dg 0:12ae42019e9f 104
el14dg 0:12ae42019e9f 105 }
el14dg 2:e504a3cfe113 106
el14dg 2:e504a3cfe113 107 void init_buttons()
el14dg 2:e504a3cfe113 108 {
el14dg 2:e504a3cfe113 109
el14dg 2:e504a3cfe113 110 button_0.fall(&button_0_isr);
el14dg 2:e504a3cfe113 111 button_1.fall(&button_1_isr);
el14dg 2:e504a3cfe113 112 button_c.fall(&button_c_isr);
el14dg 2:e504a3cfe113 113
el14dg 2:e504a3cfe113 114 button_0.mode(PullDown);
el14dg 2:e504a3cfe113 115 button_1.mode(PullDown);
el14dg 2:e504a3cfe113 116 button_c.mode(PullDown);
el14dg 2:e504a3cfe113 117
el14dg 2:e504a3cfe113 118 }
el14dg 2:e504a3cfe113 119
el14dg 2:e504a3cfe113 120 void read_distance_isr()
el14dg 2:e504a3cfe113 121 {
el14dg 2:e504a3cfe113 122 g_read_distance_flag = 1;
el14dg 2:e504a3cfe113 123
el14dg 2:e504a3cfe113 124 }
el14dg 2:e504a3cfe113 125
el14dg 2:e504a3cfe113 126 void button_0_isr()
el14dg 2:e504a3cfe113 127 {
el14dg 2:e504a3cfe113 128 g_button_0_flag = 1;
el14dg 2:e504a3cfe113 129
el14dg 2:e504a3cfe113 130 }
el14dg 2:e504a3cfe113 131
el14dg 2:e504a3cfe113 132 void button_1_isr()
el14dg 2:e504a3cfe113 133 {
el14dg 2:e504a3cfe113 134 g_button_1_flag = 1;
el14dg 2:e504a3cfe113 135
el14dg 2:e504a3cfe113 136 }
el14dg 2:e504a3cfe113 137
el14dg 2:e504a3cfe113 138 void button_c_isr()
el14dg 2:e504a3cfe113 139 {
el14dg 2:e504a3cfe113 140 g_button_c_flag = 1;
el14dg 2:e504a3cfe113 141
el14dg 2:e504a3cfe113 142 }
el14dg 2:e504a3cfe113 143
el14dg 2:e504a3cfe113 144 void get_distance()
el14dg 2:e504a3cfe113 145 {
el14dg 2:e504a3cfe113 146 distance[read_distance_counter] = srf02.getDistanceCm();
el14dg 2:e504a3cfe113 147
el14dg 2:e504a3cfe113 148 read_distance_counter++;
el14dg 2:e504a3cfe113 149
el14dg 2:e504a3cfe113 150 if (read_distance_counter == 10) {
el14dg 2:e504a3cfe113 151
el14dg 2:e504a3cfe113 152 for (int i = 0; i < 10; i++) {
el14dg 2:e504a3cfe113 153
el14dg 2:e504a3cfe113 154 one_second_distance = one_second_distance + distance[i];
el14dg 2:e504a3cfe113 155
el14dg 2:e504a3cfe113 156 }
el14dg 2:e504a3cfe113 157
el14dg 2:e504a3cfe113 158 one_second_avg_distance = one_second_distance / 10;
el14dg 2:e504a3cfe113 159
el14dg 2:e504a3cfe113 160 length = sprintf(buffer,"D = %.f cm",one_second_avg_distance);
el14dg 2:e504a3cfe113 161 if (length <= 14)
el14dg 2:e504a3cfe113 162 lcd.printString(buffer,0,2);
el14dg 2:e504a3cfe113 163
el14dg 2:e504a3cfe113 164 lcd.refresh();
el14dg 2:e504a3cfe113 165
el14dg 2:e504a3cfe113 166 read_distance_counter = 0;
el14dg 2:e504a3cfe113 167 one_second_distance = 0;
el14dg 2:e504a3cfe113 168 }
el14dg 2:e504a3cfe113 169
el14dg 2:e504a3cfe113 170 }
el14dg 2:e504a3cfe113 171
el14dg 2:e504a3cfe113 172 void state_0_screen()
el14dg 2:e504a3cfe113 173 {
el14dg 2:e504a3cfe113 174 lcd.clear();
el14dg 2:e504a3cfe113 175
el14dg 2:e504a3cfe113 176 lcd.printString("MobileSecurity",0,0);
el14dg 2:e504a3cfe113 177
el14dg 2:e504a3cfe113 178 lcd.printString("System",27,1);
el14dg 2:e504a3cfe113 179
el14dg 2:e504a3cfe113 180 lcd.printString("Daniel Gibbons",0,4);
el14dg 2:e504a3cfe113 181
el14dg 2:e504a3cfe113 182 lcd.refresh();
el14dg 2:e504a3cfe113 183
el14dg 2:e504a3cfe113 184 }
el14dg 2:e504a3cfe113 185
el14dg 2:e504a3cfe113 186 void state_1_screen()
el14dg 2:e504a3cfe113 187 {
el14dg 2:e504a3cfe113 188 lcd.clear();
el14dg 2:e504a3cfe113 189
el14dg 2:e504a3cfe113 190 lcd.printString("Set Alarm",15,1);
el14dg 2:e504a3cfe113 191
el14dg 2:e504a3cfe113 192 lcd.printString("Set New Pin",9,4);
el14dg 2:e504a3cfe113 193
el14dg 2:e504a3cfe113 194 lcd.refresh();
el14dg 2:e504a3cfe113 195
el14dg 2:e504a3cfe113 196 }
el14dg 2:e504a3cfe113 197
el14dg 2:e504a3cfe113 198 void state_2_3_6_7_screen()
el14dg 2:e504a3cfe113 199 {
el14dg 2:e504a3cfe113 200 lcd.clear();
el14dg 2:e504a3cfe113 201
el14dg 2:e504a3cfe113 202 lcd.printString("Enter 4 Digit",3,1);
el14dg 2:e504a3cfe113 203
el14dg 2:e504a3cfe113 204 lcd.printString("Pin Below",15,2);
el14dg 2:e504a3cfe113 205
el14dg 2:e504a3cfe113 206 lcd.refresh();
el14dg 2:e504a3cfe113 207
el14dg 2:e504a3cfe113 208 }
el14dg 2:e504a3cfe113 209
el14dg 2:e504a3cfe113 210 void state_4_screen()
el14dg 2:e504a3cfe113 211 {
el14dg 2:e504a3cfe113 212 lcd.clear();
el14dg 2:e504a3cfe113 213
el14dg 2:e504a3cfe113 214 lcd.printString("Setting",21,1);
el14dg 2:e504a3cfe113 215
el14dg 2:e504a3cfe113 216 lcd.refresh();
el14dg 2:e504a3cfe113 217
el14dg 2:e504a3cfe113 218 }
el14dg 2:e504a3cfe113 219
el14dg 2:e504a3cfe113 220 void state_5_screen()
el14dg 2:e504a3cfe113 221 {
el14dg 2:e504a3cfe113 222 lcd.clear();
el14dg 2:e504a3cfe113 223
el14dg 2:e504a3cfe113 224 lcd.printString("Alarm Set",15,1);
el14dg 2:e504a3cfe113 225
el14dg 2:e504a3cfe113 226 lcd.printString("DEACTIVATE?",9,4);
el14dg 2:e504a3cfe113 227
el14dg 2:e504a3cfe113 228 lcd.refresh();
el14dg 2:e504a3cfe113 229
el14dg 2:e504a3cfe113 230 }
el14dg 2:e504a3cfe113 231
el14dg 2:e504a3cfe113 232 void state_8_screen()
el14dg 2:e504a3cfe113 233 {
el14dg 2:e504a3cfe113 234 lcd.clear();
el14dg 2:e504a3cfe113 235
el14dg 2:e504a3cfe113 236 lcd.printString("ALARM",27,1);
el14dg 2:e504a3cfe113 237
el14dg 2:e504a3cfe113 238 lcd.printString("TRIGGERED",15,2);
el14dg 2:e504a3cfe113 239
el14dg 2:e504a3cfe113 240 lcd.refresh();
el14dg 2:e504a3cfe113 241 }
el14dg 2:e504a3cfe113 242
el14dg 2:e504a3cfe113 243 void screen_selection()
el14dg 2:e504a3cfe113 244 {
el14dg 2:e504a3cfe113 245
el14dg 2:e504a3cfe113 246 if (g_current_state == 0) {
el14dg 2:e504a3cfe113 247
el14dg 2:e504a3cfe113 248 state_0_screen();
el14dg 2:e504a3cfe113 249
el14dg 2:e504a3cfe113 250 lcd.printString("0",0,0);
el14dg 2:e504a3cfe113 251
el14dg 2:e504a3cfe113 252 }
el14dg 2:e504a3cfe113 253
el14dg 2:e504a3cfe113 254 else if (g_current_state == 1) {
el14dg 2:e504a3cfe113 255
el14dg 2:e504a3cfe113 256 state_1_screen();
el14dg 2:e504a3cfe113 257
el14dg 2:e504a3cfe113 258 lcd.printString("1",0,0);
el14dg 2:e504a3cfe113 259
el14dg 2:e504a3cfe113 260 }
el14dg 2:e504a3cfe113 261
el14dg 2:e504a3cfe113 262 else if (g_current_state == 2) {
el14dg 2:e504a3cfe113 263
el14dg 2:e504a3cfe113 264 state_2_3_6_7_screen();
el14dg 2:e504a3cfe113 265
el14dg 2:e504a3cfe113 266 lcd.printString("2",0,0);
el14dg 2:e504a3cfe113 267
el14dg 2:e504a3cfe113 268 }
el14dg 2:e504a3cfe113 269
el14dg 2:e504a3cfe113 270 else if (g_current_state == 3) {
el14dg 2:e504a3cfe113 271
el14dg 2:e504a3cfe113 272 state_2_3_6_7_screen();
el14dg 2:e504a3cfe113 273
el14dg 2:e504a3cfe113 274 lcd.printString("3",0,0);
el14dg 2:e504a3cfe113 275
el14dg 2:e504a3cfe113 276 }
el14dg 2:e504a3cfe113 277
el14dg 2:e504a3cfe113 278 else if (g_current_state == 4) {
el14dg 2:e504a3cfe113 279
el14dg 2:e504a3cfe113 280 state_4_screen();
el14dg 2:e504a3cfe113 281
el14dg 2:e504a3cfe113 282 lcd.printString("4",0,0);
el14dg 2:e504a3cfe113 283
el14dg 2:e504a3cfe113 284 }
el14dg 2:e504a3cfe113 285
el14dg 2:e504a3cfe113 286 else if (g_current_state == 5) {
el14dg 2:e504a3cfe113 287
el14dg 2:e504a3cfe113 288 state_5_screen();
el14dg 2:e504a3cfe113 289
el14dg 2:e504a3cfe113 290 lcd.printString("5",0,0);
el14dg 2:e504a3cfe113 291
el14dg 2:e504a3cfe113 292 }
el14dg 2:e504a3cfe113 293
el14dg 2:e504a3cfe113 294 else if (g_current_state == 6) {
el14dg 2:e504a3cfe113 295
el14dg 2:e504a3cfe113 296 state_2_3_6_7_screen();
el14dg 2:e504a3cfe113 297
el14dg 2:e504a3cfe113 298 lcd.printString("6",0,0);
el14dg 2:e504a3cfe113 299
el14dg 2:e504a3cfe113 300 }
el14dg 2:e504a3cfe113 301
el14dg 2:e504a3cfe113 302 else if (g_current_state == 7) {
el14dg 2:e504a3cfe113 303
el14dg 2:e504a3cfe113 304 state_2_3_6_7_screen();
el14dg 2:e504a3cfe113 305
el14dg 2:e504a3cfe113 306 lcd.printString("7",0,0);
el14dg 2:e504a3cfe113 307
el14dg 2:e504a3cfe113 308 }
el14dg 2:e504a3cfe113 309
el14dg 2:e504a3cfe113 310 else {
el14dg 2:e504a3cfe113 311
el14dg 2:e504a3cfe113 312 state_8_screen();
el14dg 2:e504a3cfe113 313
el14dg 2:e504a3cfe113 314 lcd.printString("8",0,0);
el14dg 2:e504a3cfe113 315
el14dg 2:e504a3cfe113 316 }
el14dg 2:e504a3cfe113 317
el14dg 2:e504a3cfe113 318
el14dg 2:e504a3cfe113 319
el14dg 2:e504a3cfe113 320 }