Home Base for the home security system

Fork of rtos_basic by Mbed

Committer:
natschwa
Date:
Mon Apr 30 17:12:34 2018 +0000
Revision:
11:e28ffa142a7b
Parent:
10:dc33cd3f4eb9
Working Home Base

Who changed what in which revision?

UserRevisionLine numberNew contents of line
natschwa 11:e28ffa142a7b 1 //Final_Home_Base
natschwa 11:e28ffa142a7b 2
emilmont 1:491820ee784d 3 #include "mbed.h"
natschwa 11:e28ffa142a7b 4 #include "rtos.h"
natschwa 11:e28ffa142a7b 5
natschwa 11:e28ffa142a7b 6 #define RX_MC PTC14
natschwa 11:e28ffa142a7b 7 #define TX_MC PTC15
natschwa 11:e28ffa142a7b 8
natschwa 11:e28ffa142a7b 9 #define RX_HS PTB10
natschwa 11:e28ffa142a7b 10 #define TX_HS PTB11
natschwa 11:e28ffa142a7b 11
natschwa 11:e28ffa142a7b 12 Serial BlueTooth_MC(TX_MC, RX_MC); // bluetooth serial port
natschwa 11:e28ffa142a7b 13 Serial BlueTooth_HS(TX_HS, RX_HS); // bluetooth serial port
natschwa 11:e28ffa142a7b 14
natschwa 11:e28ffa142a7b 15
natschwa 11:e28ffa142a7b 16 Timeout response; // Timer
natschwa 11:e28ffa142a7b 17
natschwa 11:e28ffa142a7b 18 /*GPIO declaration*/
natschwa 11:e28ffa142a7b 19 DigitalOut Green(LED_GREEN);
natschwa 11:e28ffa142a7b 20 DigitalOut Red(LED_RED);
natschwa 11:e28ffa142a7b 21 DigitalOut Blue(LED_BLUE);
natschwa 11:e28ffa142a7b 22
natschwa 11:e28ffa142a7b 23 DigitalIn sw2(SW2);
natschwa 11:e28ffa142a7b 24 DigitalIn sw3(SW3);
natschwa 11:e28ffa142a7b 25 //DigitalIn motion(D8);
natschwa 11:e28ffa142a7b 26
natschwa 11:e28ffa142a7b 27 /*GPIO for keypad*/
natschwa 11:e28ffa142a7b 28 DigitalOut col4(D0);
natschwa 11:e28ffa142a7b 29 DigitalOut col3(D1);
natschwa 11:e28ffa142a7b 30 DigitalOut col2(D2);
natschwa 11:e28ffa142a7b 31 DigitalOut col1(D3);
natschwa 11:e28ffa142a7b 32 DigitalIn row4(D4);
natschwa 11:e28ffa142a7b 33 DigitalIn row3(D5);
natschwa 11:e28ffa142a7b 34 DigitalIn row2(D6);
natschwa 11:e28ffa142a7b 35 DigitalIn row1(D7);
natschwa 11:e28ffa142a7b 36
natschwa 11:e28ffa142a7b 37 //keypad Lookup Table
natschwa 11:e28ffa142a7b 38 char pad[4][4] = {{'1', '2', '3', 'A'},
natschwa 11:e28ffa142a7b 39 {'4', '5', '6', 'B'},
natschwa 11:e28ffa142a7b 40 {'7', '8', '9', 'C'},
natschwa 11:e28ffa142a7b 41 {'*', '0', '#', 'D'}};
natschwa 11:e28ffa142a7b 42
natschwa 11:e28ffa142a7b 43
natschwa 11:e28ffa142a7b 44
natschwa 11:e28ffa142a7b 45 Thread thread1;
natschwa 11:e28ffa142a7b 46 Thread thread2;
natschwa 11:e28ffa142a7b 47
natschwa 11:e28ffa142a7b 48 void LED_Color(char color,int blink);
natschwa 11:e28ffa142a7b 49 void read_BlueTooth();
natschwa 11:e28ffa142a7b 50 void Timer_thread();
natschwa 11:e28ffa142a7b 51 void sendMsg(char msg,int time,char addr);
natschwa 11:e28ffa142a7b 52 int CheckPass(void);
natschwa 11:e28ffa142a7b 53 char getkey(void);
natschwa 11:e28ffa142a7b 54
natschwa 11:e28ffa142a7b 55
natschwa 11:e28ffa142a7b 56 char correct = 'C';
natschwa 11:e28ffa142a7b 57 char alert = 'A';
natschwa 11:e28ffa142a7b 58 char MC_ConnectREQ = 'M'; // connect Request
natschwa 11:e28ffa142a7b 59 char MC_ConnectACK = 'M';
natschwa 11:e28ffa142a7b 60 char HS_ConnectREQ = 'H'; // connect Request
natschwa 11:e28ffa142a7b 61 char HS_ConnectACK = 'H';
natschwa 11:e28ffa142a7b 62 char ReconnectREQ = 'R';
natschwa 11:e28ffa142a7b 63 char IntruderAlert = 'I';
natschwa 11:e28ffa142a7b 64 char Fail = 'F';
natschwa 11:e28ffa142a7b 65 char key = 0;
natschwa 11:e28ffa142a7b 66
natschwa 11:e28ffa142a7b 67 char MonitorCenter = 'M';
natschwa 11:e28ffa142a7b 68 char HomeSystem = 'H';
natschwa 11:e28ffa142a7b 69
natschwa 11:e28ffa142a7b 70 char DefaultPass[4] = {'1','2','3','4'};
natschwa 11:e28ffa142a7b 71 char Password[4] = {0};
natschwa 11:e28ffa142a7b 72
natschwa 11:e28ffa142a7b 73 int timer = 0;
natschwa 11:e28ffa142a7b 74 int entryCount = 0;
natschwa 11:e28ffa142a7b 75
natschwa 11:e28ffa142a7b 76 bool motionFlg = false;
natschwa 11:e28ffa142a7b 77 bool Connect_MC_Flg = false; //connect to monitoring center
natschwa 11:e28ffa142a7b 78 bool Connect_HS_Flg = false; //connect to Home System
natschwa 11:e28ffa142a7b 79 bool ReconnectFlg = true;
natschwa 11:e28ffa142a7b 80 bool intruderFlg = false;
natschwa 11:e28ffa142a7b 81 bool readyFlg = false;
natschwa 11:e28ffa142a7b 82 bool motion = false;
natschwa 11:e28ffa142a7b 83
natschwa 11:e28ffa142a7b 84 int main()
natschwa 11:e28ffa142a7b 85 {
natschwa 11:e28ffa142a7b 86
natschwa 11:e28ffa142a7b 87 BlueTooth_MC.baud(9600);
natschwa 11:e28ffa142a7b 88 BlueTooth_HS.baud(9600);
natschwa 11:e28ffa142a7b 89
natschwa 11:e28ffa142a7b 90 LED_Color('P',0);
natschwa 11:e28ffa142a7b 91
natschwa 11:e28ffa142a7b 92 thread1.start(read_BlueTooth);
natschwa 11:e28ffa142a7b 93 //thread2.start(motion_thread);
natschwa 11:e28ffa142a7b 94
natschwa 11:e28ffa142a7b 95 while(true) // detecting motion
natschwa 11:e28ffa142a7b 96 {
natschwa 11:e28ffa142a7b 97 if(ReconnectFlg){
natschwa 11:e28ffa142a7b 98 /*
natschwa 11:e28ffa142a7b 99 printf("\n\rMaster Connecting to MS:\n\r");
natschwa 11:e28ffa142a7b 100 while (!Connect_MC_Flg){
natschwa 11:e28ffa142a7b 101 sendMsg(MC_ConnectREQ,1,MonitorCenter);
natschwa 11:e28ffa142a7b 102 wait(0.2f); // wait a small period of time
natschwa 11:e28ffa142a7b 103 }
natschwa 11:e28ffa142a7b 104
natschwa 11:e28ffa142a7b 105 printf(">Connected\n\rMaster Connecting to HS:\n\r");
natschwa 11:e28ffa142a7b 106 while (!Connect_HS_Flg){
natschwa 11:e28ffa142a7b 107 sendMsg(HS_ConnectREQ,1,HomeSystem);
natschwa 11:e28ffa142a7b 108 wait(0.2f); // wait a small period of time
natschwa 11:e28ffa142a7b 109 }
natschwa 11:e28ffa142a7b 110 */
natschwa 11:e28ffa142a7b 111
natschwa 11:e28ffa142a7b 112 //Connect_MC_Flg = false; // reset status incase of reconnect request
natschwa 11:e28ffa142a7b 113 printf(">Connected\n\rAck Recieved from Slaves!\n\rSystem Ready\n\r");
natschwa 11:e28ffa142a7b 114 ReconnectFlg = false;
natschwa 11:e28ffa142a7b 115 LED_Color('B',0);
natschwa 11:e28ffa142a7b 116 //thread2.start(motion_thread);
natschwa 11:e28ffa142a7b 117 }
natschwa 11:e28ffa142a7b 118
natschwa 11:e28ffa142a7b 119 if(motion){
natschwa 11:e28ffa142a7b 120 printf("Motion Detected\n\r Alert Sent!\n\r");
natschwa 11:e28ffa142a7b 121 thread1.terminate(); //stop reading bluetooth
natschwa 11:e28ffa142a7b 122 motionFlg = true;
natschwa 11:e28ffa142a7b 123
natschwa 11:e28ffa142a7b 124 while(key != 'D' && motionFlg){
natschwa 11:e28ffa142a7b 125 key = getkey(); //ready keypad
natschwa 11:e28ffa142a7b 126 wait(0.15f); //wait for button debounce
natschwa 11:e28ffa142a7b 127
natschwa 11:e28ffa142a7b 128 if ( key != '!' ){ // use has 10 second window to enter password after motion dection
natschwa 11:e28ffa142a7b 129 Password[entryCount++] = key;
natschwa 11:e28ffa142a7b 130 printf(" key: %c\n",key);
natschwa 11:e28ffa142a7b 131 if(entryCount > 4 )
natschwa 11:e28ffa142a7b 132 entryCount = 0;
natschwa 11:e28ffa142a7b 133 }
natschwa 11:e28ffa142a7b 134 sendMsg(alert,1,MonitorCenter); // send alert to MS
natschwa 11:e28ffa142a7b 135 LED_Color('Y',0);
natschwa 11:e28ffa142a7b 136 printf( "\rTimer: %d", timer/10);
natschwa 11:e28ffa142a7b 137
natschwa 11:e28ffa142a7b 138 if(timer++ >= 100)
natschwa 11:e28ffa142a7b 139 {
natschwa 11:e28ffa142a7b 140 printf("\n\rTimeOut!\n\r");
natschwa 11:e28ffa142a7b 141 LED_Color('R',0);
natschwa 11:e28ffa142a7b 142 sendMsg(Fail,200,MonitorCenter); //send Fail to MS
natschwa 11:e28ffa142a7b 143 sendMsg(Fail,200,HomeSystem); //send Fail to MS
natschwa 11:e28ffa142a7b 144 motionFlg = false; //end of motion session
natschwa 11:e28ffa142a7b 145 }
natschwa 11:e28ffa142a7b 146
natschwa 11:e28ffa142a7b 147 }//end while
natschwa 11:e28ffa142a7b 148
natschwa 11:e28ffa142a7b 149 if( CheckPass() ){
natschwa 11:e28ffa142a7b 150 printf("\n\rCorrect Password!\n\r");
natschwa 11:e28ffa142a7b 151 sendMsg(correct,200,MonitorCenter); // send correct password msg to MC
natschwa 11:e28ffa142a7b 152 sendMsg(correct,200,HomeSystem); // send correct password msg to HS
natschwa 11:e28ffa142a7b 153 LED_Color('G',0);
natschwa 11:e28ffa142a7b 154 }
natschwa 11:e28ffa142a7b 155 else
natschwa 11:e28ffa142a7b 156 {
natschwa 11:e28ffa142a7b 157 printf("\n\rWrong Password!\n\r");
natschwa 11:e28ffa142a7b 158 LED_Color('R',0);
natschwa 11:e28ffa142a7b 159 sendMsg(Fail,200,MonitorCenter); //send Fail to MC
natschwa 11:e28ffa142a7b 160 sendMsg(Fail,200,HomeSystem); // send Fail msg to HS
natschwa 11:e28ffa142a7b 161 }
natschwa 11:e28ffa142a7b 162 motion = false;
natschwa 11:e28ffa142a7b 163 motionFlg = false;
natschwa 11:e28ffa142a7b 164 Password[3] = 0;
natschwa 11:e28ffa142a7b 165 timer = 0;
natschwa 11:e28ffa142a7b 166 entryCount = 0;
natschwa 11:e28ffa142a7b 167 key = '!';
natschwa 11:e28ffa142a7b 168 thread1.start(read_BlueTooth);
natschwa 11:e28ffa142a7b 169 wait(2);
natschwa 11:e28ffa142a7b 170 LED_Color('B',0);
natschwa 11:e28ffa142a7b 171 printf("Checking for motion!\n\r");
natschwa 11:e28ffa142a7b 172
natschwa 11:e28ffa142a7b 173 }// end if(motion)
natschwa 11:e28ffa142a7b 174
natschwa 11:e28ffa142a7b 175 }// while(true)
natschwa 11:e28ffa142a7b 176
natschwa 11:e28ffa142a7b 177 }//end Main --------------------------------
natschwa 11:e28ffa142a7b 178
natschwa 11:e28ffa142a7b 179
natschwa 11:e28ffa142a7b 180 void read_BlueTooth(){
natschwa 11:e28ffa142a7b 181 char data = 0;
natschwa 11:e28ffa142a7b 182 while(true)
natschwa 11:e28ffa142a7b 183 {
natschwa 11:e28ffa142a7b 184 if(BlueTooth_MC.readable()) // read data from the bluetooth serial port
natschwa 11:e28ffa142a7b 185 {
natschwa 11:e28ffa142a7b 186 data = BlueTooth_MC.getc();
natschwa 11:e28ffa142a7b 187 //printf("recieved:%c\n\r",data);
natschwa 11:e28ffa142a7b 188 if( data == MC_ConnectACK )
natschwa 11:e28ffa142a7b 189 {
natschwa 11:e28ffa142a7b 190 Connect_MC_Flg = true; //System Ready
natschwa 11:e28ffa142a7b 191 }
natschwa 11:e28ffa142a7b 192 else if( data == ReconnectREQ )
natschwa 11:e28ffa142a7b 193 {
natschwa 11:e28ffa142a7b 194 printf("\n\rMC loss power\n\r");
natschwa 11:e28ffa142a7b 195 ReconnectFlg = true;
natschwa 11:e28ffa142a7b 196 //Connect_MC_Flg = false;
natschwa 11:e28ffa142a7b 197 //Connect_MC_Flg = false;
natschwa 11:e28ffa142a7b 198 }
natschwa 11:e28ffa142a7b 199
natschwa 11:e28ffa142a7b 200 }//end if(readable)
natschwa 11:e28ffa142a7b 201
natschwa 11:e28ffa142a7b 202 if(BlueTooth_HS.readable()) // read data from the bluetooth serial port
natschwa 11:e28ffa142a7b 203 {
natschwa 11:e28ffa142a7b 204 data = BlueTooth_HS.getc();
natschwa 11:e28ffa142a7b 205 printf("recieved:%c\n\r",data);
natschwa 11:e28ffa142a7b 206 if( data == HS_ConnectACK )
natschwa 11:e28ffa142a7b 207 {
natschwa 11:e28ffa142a7b 208 Connect_HS_Flg = true; //System Ready
natschwa 11:e28ffa142a7b 209 }
natschwa 11:e28ffa142a7b 210 else if( data == ReconnectREQ )
natschwa 11:e28ffa142a7b 211 {
natschwa 11:e28ffa142a7b 212 printf("\n\rHS loss power\n\r");
natschwa 11:e28ffa142a7b 213 ReconnectFlg = true;
natschwa 11:e28ffa142a7b 214 //Connect_MC_Flg = false;
natschwa 11:e28ffa142a7b 215 //Connect_MC_Flg = false;
natschwa 11:e28ffa142a7b 216 }
natschwa 11:e28ffa142a7b 217 else if( data == IntruderAlert )
natschwa 11:e28ffa142a7b 218 {
natschwa 11:e28ffa142a7b 219 motion = true;
natschwa 11:e28ffa142a7b 220 }
natschwa 11:e28ffa142a7b 221
natschwa 11:e28ffa142a7b 222 }//end if(readable)
natschwa 11:e28ffa142a7b 223
natschwa 11:e28ffa142a7b 224 }//end while
natschwa 11:e28ffa142a7b 225
natschwa 11:e28ffa142a7b 226 }// read_BlueTooth
natschwa 11:e28ffa142a7b 227
natschwa 11:e28ffa142a7b 228 void sendMsg(char msg,int time, char Addrs){
natschwa 11:e28ffa142a7b 229
natschwa 11:e28ffa142a7b 230 //printf("send %c\n\r",Addrs);
natschwa 11:e28ffa142a7b 231 if(Addrs == MonitorCenter){
natschwa 11:e28ffa142a7b 232 while(time--)
natschwa 11:e28ffa142a7b 233 BlueTooth_MC.putc(msg);
natschwa 11:e28ffa142a7b 234 }else{
natschwa 11:e28ffa142a7b 235 while(time--)
natschwa 11:e28ffa142a7b 236 BlueTooth_HS.putc(msg);
emilmont 1:491820ee784d 237 }
natschwa 11:e28ffa142a7b 238
natschwa 11:e28ffa142a7b 239 }//end sendMSg
natschwa 11:e28ffa142a7b 240
natschwa 11:e28ffa142a7b 241 void LED_Color(char color,int blink){
natschwa 11:e28ffa142a7b 242
natschwa 11:e28ffa142a7b 243 /*LedsOFF (active low)*/
natschwa 11:e28ffa142a7b 244 Red = 1;
natschwa 11:e28ffa142a7b 245 Green = 1;
natschwa 11:e28ffa142a7b 246 Blue = 1;
natschwa 11:e28ffa142a7b 247 if (color == 'C')
natschwa 11:e28ffa142a7b 248 return;
natschwa 11:e28ffa142a7b 249 else if(color == 'G')
natschwa 11:e28ffa142a7b 250 Green = 0;
natschwa 11:e28ffa142a7b 251 else if(color == 'R')
natschwa 11:e28ffa142a7b 252 Red = 0;
natschwa 11:e28ffa142a7b 253 else if(color == 'B')
natschwa 11:e28ffa142a7b 254 Blue = 0;
natschwa 11:e28ffa142a7b 255 else if(color == 'Y'){
natschwa 11:e28ffa142a7b 256 Red = 0;
natschwa 11:e28ffa142a7b 257 Green = 0;
natschwa 11:e28ffa142a7b 258 }
natschwa 11:e28ffa142a7b 259 else if(color == 'P'){
natschwa 11:e28ffa142a7b 260 Blue = 0;
natschwa 11:e28ffa142a7b 261 Red = 0;
natschwa 11:e28ffa142a7b 262 }
natschwa 11:e28ffa142a7b 263 else if(color == 'W'){
natschwa 11:e28ffa142a7b 264 Blue = 0;
natschwa 11:e28ffa142a7b 265 Red = 0;
natschwa 11:e28ffa142a7b 266 Green = 0;
natschwa 11:e28ffa142a7b 267 }
natschwa 11:e28ffa142a7b 268 else{} // do nothing
emilmont 1:491820ee784d 269
natschwa 11:e28ffa142a7b 270 if(blink){
natschwa 11:e28ffa142a7b 271 wait(0.1f); // wait a small period of time
natschwa 11:e28ffa142a7b 272 Red = 1;
natschwa 11:e28ffa142a7b 273 Green = 1;
natschwa 11:e28ffa142a7b 274 Blue = 1;
natschwa 11:e28ffa142a7b 275 wait(0.1f);
natschwa 11:e28ffa142a7b 276 }
natschwa 11:e28ffa142a7b 277 }//end LED_Color
natschwa 11:e28ffa142a7b 278
natschwa 11:e28ffa142a7b 279 char getkey(void)
natschwa 11:e28ffa142a7b 280 {
natschwa 11:e28ffa142a7b 281 DigitalOut col[4] = {col1, col2, col3, col4};
natschwa 11:e28ffa142a7b 282
natschwa 11:e28ffa142a7b 283 for(int i = 0; i<4; i++)
natschwa 11:e28ffa142a7b 284 col[i] = 1;
natschwa 11:e28ffa142a7b 285
natschwa 11:e28ffa142a7b 286
natschwa 11:e28ffa142a7b 287 for(int i = 0; i<4; i++)
natschwa 11:e28ffa142a7b 288 {
natschwa 11:e28ffa142a7b 289 col[i] = 0;
natschwa 11:e28ffa142a7b 290 //printf("\n\rhere\n\r");
natschwa 11:e28ffa142a7b 291 if(!row1)
natschwa 11:e28ffa142a7b 292 {
natschwa 11:e28ffa142a7b 293 col[i]=1;
natschwa 11:e28ffa142a7b 294 return pad[0][i];//printf("in: %d %c\n\r", i, pad[0][i]);
natschwa 11:e28ffa142a7b 295 }
natschwa 11:e28ffa142a7b 296 else if(!row2)
natschwa 11:e28ffa142a7b 297 {
natschwa 11:e28ffa142a7b 298 col[i]=1;
natschwa 11:e28ffa142a7b 299 return pad[1][i];//printf("in: %d %c\n\r", i, pad[1][i]);
natschwa 11:e28ffa142a7b 300 }
natschwa 11:e28ffa142a7b 301 else if(!row3)
natschwa 11:e28ffa142a7b 302 {
natschwa 11:e28ffa142a7b 303 col[i]=1;
natschwa 11:e28ffa142a7b 304 return pad[2][i];//printf("in: %d %c\n\r", i, pad[2][i]);
natschwa 11:e28ffa142a7b 305 }
natschwa 11:e28ffa142a7b 306 else if(!row4)
natschwa 11:e28ffa142a7b 307 {
natschwa 11:e28ffa142a7b 308 col[i]=1;
natschwa 11:e28ffa142a7b 309 return pad[3][i];//printf("in: %d %c\n\r", i, pad[3][i]);
natschwa 11:e28ffa142a7b 310 }
natschwa 11:e28ffa142a7b 311 else
natschwa 11:e28ffa142a7b 312 {
natschwa 11:e28ffa142a7b 313 //printf("no press\n\r");
natschwa 11:e28ffa142a7b 314 }
natschwa 11:e28ffa142a7b 315 col[i]=1;
natschwa 11:e28ffa142a7b 316 }
natschwa 11:e28ffa142a7b 317 return '!';
natschwa 11:e28ffa142a7b 318 }//end getKey
natschwa 11:e28ffa142a7b 319
natschwa 11:e28ffa142a7b 320 int CheckPass(void)
natschwa 11:e28ffa142a7b 321 {
natschwa 11:e28ffa142a7b 322 for(int i = 0; i < 4; i++){
natschwa 11:e28ffa142a7b 323 if( DefaultPass[i] != Password[i] )
natschwa 11:e28ffa142a7b 324 return 0;
emilmont 1:491820ee784d 325 }
natschwa 11:e28ffa142a7b 326 return 1;
natschwa 11:e28ffa142a7b 327
natschwa 11:e28ffa142a7b 328 }//end CheckPass
natschwa 11:e28ffa142a7b 329
natschwa 11:e28ffa142a7b 330