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 1:3ae4192d0c25 1 /**
el14dg 1:3ae4192d0c25 2 @file main.h
el14dg 1:3ae4192d0c25 3 @brief Header file containing functions prototypes, defines and global variables.
el14dg 1:3ae4192d0c25 4 @brief Revision 1.0.
el14dg 1:3ae4192d0c25 5 @author Daniel Gibbons
el14dg 1:3ae4192d0c25 6 @date March 2016
el14dg 1:3ae4192d0c25 7 */
el14dg 1:3ae4192d0c25 8
el14dg 1:3ae4192d0c25 9 #ifndef MAIN_H
el14dg 1:3ae4192d0c25 10 #define MAIN_H
el14dg 1:3ae4192d0c25 11
el14dg 1:3ae4192d0c25 12 #define PI 3.14159265359
el14dg 1:3ae4192d0c25 13
el14dg 1:3ae4192d0c25 14 #include "mbed.h"
el14dg 1:3ae4192d0c25 15 #include "N5110.h"
el14dg 1:3ae4192d0c25 16 #include "SRF02.h"
el14dg 1:3ae4192d0c25 17
el14dg 2:e504a3cfe113 18
el14dg 1:3ae4192d0c25 19 /**
el14dg 2:e504a3cfe113 20 @namespace lcd
el14dg 2:e504a3cfe113 21 @brief N5110 LCD connections
el14dg 1:3ae4192d0c25 22 @namespace srf02
el14dg 2:e504a3cfe113 23 @brief SRF02 sensor connections
el14dg 1:3ae4192d0c25 24 @namespace pc
el14dg 2:e504a3cfe113 25 @brief UART connection to PC for debugging
el14dg 2:e504a3cfe113 26 @namespace led_alarm
el14dg 2:e504a3cfe113 27 @brief LED to indicate status of the alarm: flashing -> setting or triggered ; constant -> set
el14dg 2:e504a3cfe113 28 @namespace buzzer
el14dg 2:e504a3cfe113 29 @brief indicates status of the alarm: buzzes when alarm is setting and when triggered
el14dg 2:e504a3cfe113 30 @namespace zero
el14dg 2:e504a3cfe113 31 @brief first button input
el14dg 2:e504a3cfe113 32 @namespace one
el14dg 2:e504a3cfe113 33 @brief second button input
el14dg 2:e504a3cfe113 34 @namespace confirm
el14dg 2:e504a3cfe113 35 @brief third button input
el14dg 2:e504a3cfe113 36 @namespace read_distance
el14dg 2:e504a3cfe113 37 @brief K64F fires to read distance
el14dg 2:e504a3cfe113 38 @namespace sw2
el14dg 2:e504a3cfe113 39 @brief K64F on-board switch
el14dg 2:e504a3cfe113 40 @namespace sw3
el14dg 2:e504a3cfe113 41 @brief K64F on-board switch
el14dg 1:3ae4192d0c25 42 @namespace r_led
el14dg 2:e504a3cfe113 43 @brief K64F on-board red LED
el14dg 1:3ae4192d0c25 44 @namespace g_led
el14dg 2:e504a3cfe113 45 @brief K64F on-board green LED
el14dg 1:3ae4192d0c25 46 @namespace b_led
el14dg 2:e504a3cfe113 47 @brief K64F on-board blue LED
el14dg 2:e504a3cfe113 48
el14dg 1:3ae4192d0c25 49 */
el14dg 1:3ae4192d0c25 50
el14dg 2:e504a3cfe113 51 // VCC, SCE, RST, D/C, MOSI, SCLK, LED
el14dg 2:e504a3cfe113 52 N5110 lcd(PTE26,PTA0,PTC4,PTD0,PTD2,PTD1,PTC3);
el14dg 1:3ae4192d0c25 53 SRF02 srf02(I2C_SDA,I2C_SCL);
el14dg 1:3ae4192d0c25 54 Serial pc(USBTX,USBRX);
el14dg 2:e504a3cfe113 55 PwmOut led_alarm(PTC10);
el14dg 2:e504a3cfe113 56 PwmOut buzzer(PTC11);
el14dg 2:e504a3cfe113 57 InterruptIn button_0(PTB23);
el14dg 2:e504a3cfe113 58 InterruptIn button_1(PTA2);
el14dg 2:e504a3cfe113 59 InterruptIn button_c(PTC2);
el14dg 2:e504a3cfe113 60 Ticker read_distance;
el14dg 2:e504a3cfe113 61
el14dg 2:e504a3cfe113 62 InterruptIn sw2(SW2);
el14dg 2:e504a3cfe113 63 InterruptIn sw3(SW3);
el14dg 1:3ae4192d0c25 64 DigitalOut r_led(LED_RED);
el14dg 1:3ae4192d0c25 65 DigitalOut g_led(LED_GREEN);
el14dg 1:3ae4192d0c25 66 DigitalOut b_led(LED_BLUE);
el14dg 2:e504a3cfe113 67
el14dg 2:e504a3cfe113 68 struct State {
el14dg 2:e504a3cfe113 69 int nextState[3]; // array of next states which depend on which button was pressed
el14dg 2:e504a3cfe113 70 };
el14dg 2:e504a3cfe113 71 typedef const struct State STyp;
el14dg 2:e504a3cfe113 72
el14dg 2:e504a3cfe113 73 STyp fsm[9] = {
el14dg 2:e504a3cfe113 74 {0,0,0}, // 0 - initialisation (title screen)
el14dg 2:e504a3cfe113 75 {2,1,3}, // 1 - main menu (Set alarm or set new password)
el14dg 2:e504a3cfe113 76 {2,2,4}, // 2 - set alarm
el14dg 2:e504a3cfe113 77 {3,3,1}, // 3 - set new password
el14dg 2:e504a3cfe113 78 {4,4,5}, // 4 - setting calibration
el14dg 2:e504a3cfe113 79 {7,5,6}, // 5 - alarm activated
el14dg 2:e504a3cfe113 80 {6,6,1}, // 6 - deactivate without triggering (enter password)
el14dg 2:e504a3cfe113 81 {7,7,1}, // 7 - alarm triggered (enter password)
el14dg 2:e504a3cfe113 82 {8,8,1} // 8 - display time when alarm was triggered
el14dg 2:e504a3cfe113 83 };
el14dg 2:e504a3cfe113 84
el14dg 2:e504a3cfe113 85 int g_current_state;
el14dg 2:e504a3cfe113 86
el14dg 2:e504a3cfe113 87 int distance[10]; /*!< Stores 10 distance readings from SRF02 */
el14dg 2:e504a3cfe113 88 int one_second_distance = 0;
el14dg 2:e504a3cfe113 89 float one_second_avg_distance = 0;
el14dg 2:e504a3cfe113 90 int read_distance_counter = 0;
el14dg 2:e504a3cfe113 91
el14dg 2:e504a3cfe113 92 volatile int g_read_distance_flag; /*!< Flag in read_distance_isr */
el14dg 2:e504a3cfe113 93 volatile int g_button_0_flag; /*!< Flag in button_0_isr */
el14dg 2:e504a3cfe113 94 volatile int g_button_1_flag; /*!< Flag in button_1_isr */
el14dg 2:e504a3cfe113 95 volatile int g_button_c_flag; /*!< Flag in button_c_isr */
el14dg 2:e504a3cfe113 96
el14dg 2:e504a3cfe113 97 char buffer[14]; /*!< Stores any string that is going to be displayed on the LCD */
el14dg 2:e504a3cfe113 98 int length; /*!< Stores the length of any string that is going to be displayed on the LCD */
el14dg 1:3ae4192d0c25 99
el14dg 1:3ae4192d0c25 100
el14dg 2:e504a3cfe113 101
el14dg 2:e504a3cfe113 102 void error(); /*!< Hangs flashing on_board LED */
el14dg 2:e504a3cfe113 103
el14dg 2:e504a3cfe113 104 void init_serial(); /*!< Set-up the serial port */
el14dg 2:e504a3cfe113 105
el14dg 2:e504a3cfe113 106 void init_K64F(); /*!< Set-up the on-board LEDs and switches */
el14dg 2:e504a3cfe113 107
el14dg 2:e504a3cfe113 108 void init_buttons(); /*!< Set-up the three external buttons */
el14dg 2:e504a3cfe113 109
el14dg 2:e504a3cfe113 110 void read_distance_isr(); /*!< Interrupt that triggers when read_distance ticker fires */
el14dg 2:e504a3cfe113 111
el14dg 2:e504a3cfe113 112 void button_0_isr(); /*!< Interrupt that triggers when button_0 is pressed by the user */
el14dg 2:e504a3cfe113 113
el14dg 2:e504a3cfe113 114 void button_1_isr(); /*!< Interrupt that triggers when button_1 is pressed by the user */
el14dg 1:3ae4192d0c25 115
el14dg 2:e504a3cfe113 116 void button_c_isr(); /*!< Interrupt that triggers when button_c is pressed by the user */
el14dg 2:e504a3cfe113 117
el14dg 2:e504a3cfe113 118 void get_distance(); /*!< Gets the average distance in cm from the last 10 readings from the SRF02 */
el14dg 2:e504a3cfe113 119
el14dg 2:e504a3cfe113 120 void state_0_screen();
el14dg 2:e504a3cfe113 121
el14dg 2:e504a3cfe113 122 void state_1_screen();
el14dg 2:e504a3cfe113 123
el14dg 2:e504a3cfe113 124 void state_2_3_6_7_screen();
el14dg 2:e504a3cfe113 125
el14dg 2:e504a3cfe113 126 void state_4_screen();
el14dg 2:e504a3cfe113 127
el14dg 2:e504a3cfe113 128 void state_5_screen();
el14dg 2:e504a3cfe113 129
el14dg 2:e504a3cfe113 130 void state_8_screen();
el14dg 2:e504a3cfe113 131
el14dg 2:e504a3cfe113 132 void screen_selection();
el14dg 1:3ae4192d0c25 133
el14dg 1:3ae4192d0c25 134 /**
el14dg 2:e504a3cfe113 135
el14dg 1:3ae4192d0c25 136 */
el14dg 1:3ae4192d0c25 137
el14dg 1:3ae4192d0c25 138 #endif