Mobile Security System - Revision 1.0
Dependencies: FXOS8700Q N5110 SDFileSystem SRF02 mbed
main.cpp@2:e504a3cfe113, 2016-04-02 (annotated)
- 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?
User | Revision | Line number | New 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 | } |