Seminar 9: Case Study: Intruder Alarm System ppsx

22 210 0
Seminar 9: Case Study: Intruder Alarm System ppsx

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 241 Seminar 9: Case Study: Intruder Alarm System Window Bell box Control panel W W W W W Door D Statue COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 242 Introduction Window Bell box Control panel W W W W W Door D Statue 1 32 4 65 7 98 * #0 COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 243 System Operation • When initially activated, the system is in ‘Disarmed’ state. • In Disarmed state, the sensors are ignored. The alarm does not sound. The system remains in this state until the user enters a valid password via the keypad (in our demonstration system, the password is “1234”). When a valid password is entered, the systems enters ‘Arming’ state. • In Arming state, the system waits for 60 seconds, to allow the user to leave the area before the monitoring process begins. After 60 seconds, the system enters ‘Armed ’ state. • In Armed state, the status of the various system sensors is monitored. If a window sensor is tripped, the system enters ‘Intruder’ state. If the door sensor is tripped, the system enters ‘Disarming’ state. The keypad activity is also monitored: if a correct password is typed in, the system enters ‘Disarmed’ state. • In Disarming state, we assume that the door has been opened by someone who may be an authorised system user. The system remains in this state for up to 60 seconds, after which - by default - it enters Intruder state. If, during the 60- second period, the user enters the correct password, the system enters ‘Disarmed ’ state. • In Intruder state, an alarm will sound. The alarm will keep sounding (indefinitely), until the correct password is entered. COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 244 Key software components used in this example This case study uses the following software components: • Software to control external port pins (to activate the external bell), as introduced in “Embedded C” Chapter 3. • Switch reading, as discussed in “Embedded C” Chapter 4, to process the inputs from the door and window sensors. Note that - in this simple example (intended for use in the simulator) - no switch debouncing is carried out. This feature can be added, if required, without difficulty. • The embedded operating system, sEOS, introduced in “Embedded C” Chapter 7. • A simple ‘keypad’ library, based on a bank of switches. Note that - to simplify the use of the keypad library in the simulator - we have assumed the presence of only eight keys in the example program (0 - 7). This final system would probably use at least 10 keys: support for additional keys can be easily added if required. • The RS-232 library (from “Embedded C” Chapter 9) is used to illustrate the operation of the program. This library would not be necessary in the final system (but it might be useful to retain it, to support system maintenance). COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 245 Running the program COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 246 The software /* *- Port.H (v1.00) 'Port Header' (see Chap 5) for project INTRUDER (see Chap 10) -* */ /* Keypad.C */ #define KEYPAD_PORT P2 sbit K0 = KEYPAD_PORT^0; sbit K1 = KEYPAD_PORT^1; sbit K2 = KEYPAD_PORT^2; sbit K3 = KEYPAD_PORT^3; sbit K4 = KEYPAD_PORT^4; sbit K5 = KEYPAD_PORT^5; sbit K6 = KEYPAD_PORT^6; sbit K7 = KEYPAD_PORT^7; /* Intruder.C */ sbit Sensor_pin = P1^0; sbit Sounder_pin = P1^7; /* Lnk_O.C */ /* Pins 3.0 and 3.1 used for RS-232 interface */ /* *- END OF FILE -* */ COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 247 /* *- Main.c (v1.00) Simple intruder alarm system. -* */ #include "Main.H" #include "Port.H" #include "Simple_EOS.H" #include "PC_O_T1.h" #include "Keypad.h" #include "Intruder.h" /* */ void main(void) { /* Set baud rate to 9600 */ PC_LINK_O_Init_T1(9600); /* Prepare the keypad */ KEYPAD_Init(); /* Prepare the intruder alarm */ INTRUDER_Init(); /* Set up simple EOS (5ms tick) */ sEOS_Init_Timer2(5); while(1) /* Super Loop */ { sEOS_Go_To_Sleep(); /* Enter idle mode to save power */ } } /* *- END OF FILE -* */ COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 248 /* *- Intruder.C (v1.00) -* */ /* Private data type declarations */ /* Possible system states */ typedef enum {DISARMED, ARMING, ARMED, DISARMING, INTRUDER} eSystem_state; /* Private function prototypes */ bit INTRUDER_Get_Password_G(void); bit INTRUDER_Check_Window_Sensors(void); bit INTRUDER_Check_Door_Sensor(void); void INTRUDER_Sound_Alarm(void); /* */ void INTRUDER_Init(void) { /* Set the initial system state (DISARMED) */ System_state_G = DISARMED; /* Set the 'time in state' variable to 0 */ State_call_count_G = 0; /* Clear the keypad buffer */ KEYPAD_Clear_Buffer(); /* Set the 'New state' flag */ New_state_G = 1; /* Set the (two) sensor pins to 'read' mode */ Window_sensor_pin = 1; Sounder_pin = 1; } COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 249 void INTRUDER_Update(void) { /* Incremented every time */ if (State_call_count_G < 65534) { State_call_count_G++; } /* Call every 50 ms */ switch (System_state_G) { case DISARMED: { if (New_state_G) { PC_LINK_O_Write_String_To_Buffer("\nDisarmed"); New_state_G = 0; } /* Make sure alarm is switched off */ Sounder_pin = 1; /* Wait for correct password */ if (INTRUDER_Get_Password_G() == 1) { System_state_G = ARMING; New_state_G = 1; State_call_count_G = 0; break; } break; } COPYRIGHT © MICHAEL J. PONT, 2001-2006. Contains material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 250 case ARMING: { if (New_state_G) { PC_LINK_O_Write_String_To_Buffer("\nArming "); New_state_G = 0; } /* Remain here for 60 seconds (50 ms tick assumed) */ if (++State_call_count_G > 1200) { System_state_G = ARMED; New_state_G = 1; State_call_count_G = 0; break; } break; } [...]... sound alarm */ if (++State_call_count_G > 1200) { System_ state_G = INTRUDER; New_state_G = 1; State_call_count_G = 0; break; } /* Still need to check the window sensors */ if (INTRUDER_ Check_Window_Sensors() == 1) { /* An intruder detected */ System_ state_G = INTRUDER; New_state_G = 1; State_call_count_G = 0; break; } /* Finally, check for correct password */ if (INTRUDER_ Get_Password_G() == 1) { System_ state_G... Contains material from: Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I - 252 case INTRUDER: { if (New_state_G) { PC_LINK_O_Write_String_To_Buffer("\n** INTRUDER! **"); New_state_G = 0; } /* Sound the alarm! */ INTRUDER_ Sound _Alarm( ); /* Keep sounding alarm until we get correct password */ if (INTRUDER_ Get_Password_G() == 1) { System_ state_G = DISARMED; New_state_G = 1; State_call_count_G = 0; } break;.. .case ARMED: { if (New_state_G) { PC_LINK_O_Write_String_To_Buffer("\nArmed"); New_state_G = 0; } /* First, check the window sensors */ if (INTRUDER_ Check_Window_Sensors() == 1) { /* An intruder detected */ System_ state_G = INTRUDER; New_state_G = 1; State_call_count_G = 0; break; } /* Next, check the door sensors */ if (INTRUDER_ Check_Door_Sensor() == 1) { /*... PC_LINK_O_Write_String_To_Buffer("\nDoor open"); return 1; } /* Default */ return 0; } /* - */ void INTRUDER_ Sound _Alarm( void) { if (Alarm_ bit) { /* Alarm connected to this pin */ Sounder_pin = 0; Alarm_ bit = 0; } else { Sounder_pin = 1; Alarm_ bit = 1; } } COPYRIGHT © MICHAEL J PONT, 2001-2006 Contains material from: Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I... want to update intruder every 50 ms */ if (++Call_count_G == 10) { /* Time to update intruder alarm */ Call_count_G = 0; /* Call intruder update function */ INTRUDER_ Update(); } /*===== USER CODE - End ==================================== */ } COPYRIGHT © MICHAEL J PONT, 2001-2006 Contains material from: Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I - 259 Extending and modifying the system • How... 'Disarming' state */ System_ state_G = DISARMING; New_state_G = 1; State_call_count_G = 0; break; } /* Finally, check for correct password */ if (INTRUDER_ Get_Password_G() == 1) { System_ state_G = DISARMED; New_state_G = 1; State_call_count_G = 0; break; } break; } COPYRIGHT © MICHAEL J PONT, 2001-2006 Contains material from: Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I - 251 case DISARMING: { if... for Time-Triggered Embedded Systems, Chap 20) • How would you add an LCD display? (See “Patterns for Time-Triggered Embedded Systems, Chap 22) • How would you add additional nodes? (See “Patterns for Time-Triggered Embedded Systems, Part F) COPYRIGHT © MICHAEL J PONT, 2001-2006 Contains material from: Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I - 260 Conclusions This case study has illustrated... Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I - 255 bit INTRUDER_ Check_Window_Sensors(void) { /* Just a single window 'sensor' here - easily extended */ if (Window_sensor_pin == 0) { /* Intruder detected */ PC_LINK_O_Write_String_To_Buffer("\nWindow damaged"); return 1; } /* Default */ return 0; } /* - */ bit INTRUDER_ Check_Door_Sensor(void) { /* Single door sensor... Addison-Wesley PES I - 260 Conclusions This case study has illustrated most of the key features of embedded C, as discussed throughout the earlier sessions in this course We’ll consider a final case study in the next seminar COPYRIGHT © MICHAEL J PONT, 2001-2006 Contains material from: Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I - 261 COPYRIGHT © MICHAEL J PONT, 2001-2006 Contains material from:... System_ state_G = DISARMED; New_state_G = 1; State_call_count_G = 0; } break; } } } COPYRIGHT © MICHAEL J PONT, 2001-2006 Contains material from: Pont, M.J (2002) “Embedded C”, Addison-Wesley PES I - 253 bit INTRUDER_ Get_Password_G(void) { signed char Key; tByte Password_G_count = 0; tByte i; /* Update the keypad buffer */ KEYPAD_Update(); /* Are there any new data in the keypad buffer? */ if (KEYPAD_Get_Data_From_Buffer(&Key) . material from: Pont, M.J. (2002) “Embedded C”, Addison-Wesley. PES I - 241 Seminar 9: Case Study: Intruder Alarm System Window Bell box Control panel W W W W W Door D Statue COPYRIGHT. prototypes */ bit INTRUDER_ Get_Password_G(void); bit INTRUDER_ Check_Window_Sensors(void); bit INTRUDER_ Check_Door_Sensor(void); void INTRUDER_ Sound _Alarm( void); /* */ void INTRUDER_ Init(void). 253 case INTRUDER: { if (New_state_G) { PC_LINK_O_Write_String_To_Buffer(" ** INTRUDER! **"); New_state_G = 0; } /* Sound the alarm! */ INTRUDER_ Sound _Alarm( );

Ngày đăng: 10/07/2014, 18:20

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan