Georgia Tech ECE 4180 Final Project

Dependencies:   Camera_LS_Y201 FatFileSystem MODSERIAL SDFileSystem SHTx Servo TextLCD mbed

Committer:
kpatel70
Date:
Fri Dec 07 18:53:48 2012 +0000
Revision:
0:a33b2a7b4222
Final ECE-4180 Project libraries

Who changed what in which revision?

UserRevisionLine numberNew contents of line
kpatel70 0:a33b2a7b4222 1 #include "mbed.h"
kpatel70 0:a33b2a7b4222 2 #include "MODSERIAL.h"
kpatel70 0:a33b2a7b4222 3 #include "Camera_LS_Y201.h"
kpatel70 0:a33b2a7b4222 4 #include "SDFileSystem.h"
kpatel70 0:a33b2a7b4222 5 #include "SHTx/sht15.hpp"
kpatel70 0:a33b2a7b4222 6 #include "Servo.h"
kpatel70 0:a33b2a7b4222 7 #include "TextLCD.h"
kpatel70 0:a33b2a7b4222 8
kpatel70 0:a33b2a7b4222 9 #define IR_THRESHOLD 0.009f
kpatel70 0:a33b2a7b4222 10
kpatel70 0:a33b2a7b4222 11 #define DEBMSG printf
kpatel70 0:a33b2a7b4222 12 #define NEWLINE() printf("\r\n")
kpatel70 0:a33b2a7b4222 13
kpatel70 0:a33b2a7b4222 14
kpatel70 0:a33b2a7b4222 15 MODSERIAL sms(p13, p14);
kpatel70 0:a33b2a7b4222 16 Serial pc(USBTX, USBRX);
kpatel70 0:a33b2a7b4222 17 Servo myservo(p22);
kpatel70 0:a33b2a7b4222 18 TextLCD lcd(p15, p16, p17, p18, p19, p21);
kpatel70 0:a33b2a7b4222 19 AnalogIn ir(p20);
kpatel70 0:a33b2a7b4222 20 SHTx::SHT15 temp_sensor(p9, p10);
kpatel70 0:a33b2a7b4222 21 SDFileSystem sd(p5, p6, p7, p8, "sd");
kpatel70 0:a33b2a7b4222 22 Camera_LS_Y201 cam1(p28, p27);
kpatel70 0:a33b2a7b4222 23 DigitalOut light1(p29);
kpatel70 0:a33b2a7b4222 24 DigitalOut light2(p30);
kpatel70 0:a33b2a7b4222 25 PwmOut speaker(p23);
kpatel70 0:a33b2a7b4222 26
kpatel70 0:a33b2a7b4222 27 typedef struct work {
kpatel70 0:a33b2a7b4222 28 FILE *fp;
kpatel70 0:a33b2a7b4222 29 } work_t;
kpatel70 0:a33b2a7b4222 30
kpatel70 0:a33b2a7b4222 31 work_t work;
kpatel70 0:a33b2a7b4222 32
kpatel70 0:a33b2a7b4222 33
kpatel70 0:a33b2a7b4222 34 bool movement = false;
kpatel70 0:a33b2a7b4222 35 float current_avg;
kpatel70 0:a33b2a7b4222 36
kpatel70 0:a33b2a7b4222 37 bool activate = true;
kpatel70 0:a33b2a7b4222 38
kpatel70 0:a33b2a7b4222 39 float current_temperature;
kpatel70 0:a33b2a7b4222 40 float target_temperature;
kpatel70 0:a33b2a7b4222 41 bool heat = true;
kpatel70 0:a33b2a7b4222 42
kpatel70 0:a33b2a7b4222 43 int index = 1;
kpatel70 0:a33b2a7b4222 44
kpatel70 0:a33b2a7b4222 45 //char* mobile_number = "6784628602";
kpatel70 0:a33b2a7b4222 46 //char* mobile_number = "4043887322";
kpatel70 0:a33b2a7b4222 47 char* mobile_number = "4045789581";
kpatel70 0:a33b2a7b4222 48
kpatel70 0:a33b2a7b4222 49
kpatel70 0:a33b2a7b4222 50 DigitalOut led1(LED1);
kpatel70 0:a33b2a7b4222 51 DigitalOut led2(LED2);
kpatel70 0:a33b2a7b4222 52 DigitalOut led3(LED3);
kpatel70 0:a33b2a7b4222 53 DigitalOut led4(LED4);
kpatel70 0:a33b2a7b4222 54
kpatel70 0:a33b2a7b4222 55 bool message_received = false;
kpatel70 0:a33b2a7b4222 56 char message[256];
kpatel70 0:a33b2a7b4222 57 char sms_buffer[256];
kpatel70 0:a33b2a7b4222 58 int message_count = 0;
kpatel70 0:a33b2a7b4222 59
kpatel70 0:a33b2a7b4222 60 void delete_messages()
kpatel70 0:a33b2a7b4222 61 {
kpatel70 0:a33b2a7b4222 62 wait(0.25);
kpatel70 0:a33b2a7b4222 63 sms.printf("AT+CMGF=1%c", 13);
kpatel70 0:a33b2a7b4222 64 wait(0.25);
kpatel70 0:a33b2a7b4222 65 sms.printf("AT+CMGD=1,4%c", 13);
kpatel70 0:a33b2a7b4222 66 while(!sms.txBufferEmpty()) {
kpatel70 0:a33b2a7b4222 67 }
kpatel70 0:a33b2a7b4222 68 wait(2);
kpatel70 0:a33b2a7b4222 69 sms.rxBufferFlush();
kpatel70 0:a33b2a7b4222 70 }
kpatel70 0:a33b2a7b4222 71
kpatel70 0:a33b2a7b4222 72 void send_sms(char * message)
kpatel70 0:a33b2a7b4222 73 {
kpatel70 0:a33b2a7b4222 74 led3 = 1;
kpatel70 0:a33b2a7b4222 75 pc.printf("Sending SMS\n");
kpatel70 0:a33b2a7b4222 76 wait(0.25);
kpatel70 0:a33b2a7b4222 77 sms.printf("AT+CMGF=1%c", 13);
kpatel70 0:a33b2a7b4222 78 wait(.25);
kpatel70 0:a33b2a7b4222 79 sms.printf("AT+CMGS=\"%s\"%c", mobile_number, 13);
kpatel70 0:a33b2a7b4222 80 wait(0.25);
kpatel70 0:a33b2a7b4222 81 sms.printf("%s%c", message ,26);
kpatel70 0:a33b2a7b4222 82 while(!sms.txBufferEmpty()) {
kpatel70 0:a33b2a7b4222 83 }
kpatel70 0:a33b2a7b4222 84 wait(0.5);
kpatel70 0:a33b2a7b4222 85 led3 = 0;
kpatel70 0:a33b2a7b4222 86 }
kpatel70 0:a33b2a7b4222 87
kpatel70 0:a33b2a7b4222 88 void receive_sms()
kpatel70 0:a33b2a7b4222 89 {
kpatel70 0:a33b2a7b4222 90 wait(0.25);
kpatel70 0:a33b2a7b4222 91 sms.printf("AT+CMGF=1%c", 13);
kpatel70 0:a33b2a7b4222 92 wait(0.25);
kpatel70 0:a33b2a7b4222 93 //sms.printf("AT+CMGL=\"ALL\"%c", 13);
kpatel70 0:a33b2a7b4222 94 sms.printf("AT+CMGL=\"REC UNREAD\"%c", 13);
kpatel70 0:a33b2a7b4222 95 while(!sms.txBufferEmpty()) {
kpatel70 0:a33b2a7b4222 96 }
kpatel70 0:a33b2a7b4222 97 }
kpatel70 0:a33b2a7b4222 98
kpatel70 0:a33b2a7b4222 99 void get_data(char *buffer)
kpatel70 0:a33b2a7b4222 100 {
kpatel70 0:a33b2a7b4222 101 int index = 0;
kpatel70 0:a33b2a7b4222 102 char c = sms.getc();
kpatel70 0:a33b2a7b4222 103 while(c != 10) {
kpatel70 0:a33b2a7b4222 104 buffer[index++] = c;
kpatel70 0:a33b2a7b4222 105 c = sms.getc();
kpatel70 0:a33b2a7b4222 106 }
kpatel70 0:a33b2a7b4222 107 buffer[index] = 0;
kpatel70 0:a33b2a7b4222 108 }
kpatel70 0:a33b2a7b4222 109
kpatel70 0:a33b2a7b4222 110 void adjust_temperature(){
kpatel70 0:a33b2a7b4222 111 temp_sensor.update();
kpatel70 0:a33b2a7b4222 112 current_temperature = temp_sensor.getTemperature();
kpatel70 0:a33b2a7b4222 113 if(current_temperature > 85.0f){
kpatel70 0:a33b2a7b4222 114 send_sms("High Temperature Alert!!!");
kpatel70 0:a33b2a7b4222 115 }
kpatel70 0:a33b2a7b4222 116 if(!heat){
kpatel70 0:a33b2a7b4222 117 temp_sensor.setHeater(false);
kpatel70 0:a33b2a7b4222 118 return;
kpatel70 0:a33b2a7b4222 119 }
kpatel70 0:a33b2a7b4222 120 if(current_temperature < target_temperature){
kpatel70 0:a33b2a7b4222 121 temp_sensor.setHeater(true);
kpatel70 0:a33b2a7b4222 122 } else {
kpatel70 0:a33b2a7b4222 123 temp_sensor.setHeater(false);
kpatel70 0:a33b2a7b4222 124 }
kpatel70 0:a33b2a7b4222 125 }
kpatel70 0:a33b2a7b4222 126
kpatel70 0:a33b2a7b4222 127 void read_message()
kpatel70 0:a33b2a7b4222 128 {
kpatel70 0:a33b2a7b4222 129 while(sms.readable()) {
kpatel70 0:a33b2a7b4222 130 get_data(sms_buffer);
kpatel70 0:a33b2a7b4222 131 if(strstr(sms_buffer, "CMGL") != NULL) {
kpatel70 0:a33b2a7b4222 132 for(int i = 0; i < 256; i++) message[i] = 0;
kpatel70 0:a33b2a7b4222 133 get_data(message);
kpatel70 0:a33b2a7b4222 134 message_received = true;
kpatel70 0:a33b2a7b4222 135 delete_messages();
kpatel70 0:a33b2a7b4222 136 return;
kpatel70 0:a33b2a7b4222 137 }
kpatel70 0:a33b2a7b4222 138 sms_buffer[0] = 0;
kpatel70 0:a33b2a7b4222 139 }
kpatel70 0:a33b2a7b4222 140 receive_sms();
kpatel70 0:a33b2a7b4222 141 }
kpatel70 0:a33b2a7b4222 142
kpatel70 0:a33b2a7b4222 143
kpatel70 0:a33b2a7b4222 144
kpatel70 0:a33b2a7b4222 145 void setup_devices()
kpatel70 0:a33b2a7b4222 146 {
kpatel70 0:a33b2a7b4222 147 sms.baud(115200);
kpatel70 0:a33b2a7b4222 148 pc.baud(115200);
kpatel70 0:a33b2a7b4222 149 //pc.printf("\x1B[2J");
kpatel70 0:a33b2a7b4222 150 //pc.printf("\x1B[H");
kpatel70 0:a33b2a7b4222 151 message_received = false;
kpatel70 0:a33b2a7b4222 152 led4 = 1;
kpatel70 0:a33b2a7b4222 153 delete_messages();
kpatel70 0:a33b2a7b4222 154 mkdir("/sd/mydir", 0777);
kpatel70 0:a33b2a7b4222 155 temp_sensor.setScale(true);
kpatel70 0:a33b2a7b4222 156 current_temperature = temp_sensor.getTemperature();
kpatel70 0:a33b2a7b4222 157 target_temperature = current_temperature;
kpatel70 0:a33b2a7b4222 158 }
kpatel70 0:a33b2a7b4222 159
kpatel70 0:a33b2a7b4222 160 bool check_movement()
kpatel70 0:a33b2a7b4222 161 {
kpatel70 0:a33b2a7b4222 162 float value = ir;
kpatel70 0:a33b2a7b4222 163 if (value > (current_avg + IR_THRESHOLD) || value < (current_avg - IR_THRESHOLD)){
kpatel70 0:a33b2a7b4222 164 led1 = 1;
kpatel70 0:a33b2a7b4222 165 printf("MOVEMENT_DETECTED: IR value is %f, Current_avg: %f\r\n",value, current_avg);
kpatel70 0:a33b2a7b4222 166 return true;
kpatel70 0:a33b2a7b4222 167 } else {
kpatel70 0:a33b2a7b4222 168 led1 = 0;
kpatel70 0:a33b2a7b4222 169 //printf("IR value is %f, Current_avg: %f\r\n", value, current_avg);
kpatel70 0:a33b2a7b4222 170 return false;
kpatel70 0:a33b2a7b4222 171 }
kpatel70 0:a33b2a7b4222 172 }
kpatel70 0:a33b2a7b4222 173
kpatel70 0:a33b2a7b4222 174 void calibrate_ir()
kpatel70 0:a33b2a7b4222 175 {
kpatel70 0:a33b2a7b4222 176 float current_sum = 0.0f;
kpatel70 0:a33b2a7b4222 177 for(int i = 0; i < 10000; i++) {
kpatel70 0:a33b2a7b4222 178 current_sum = current_sum + ir;
kpatel70 0:a33b2a7b4222 179 }
kpatel70 0:a33b2a7b4222 180 current_avg = current_sum / 10000.0f;
kpatel70 0:a33b2a7b4222 181 }
kpatel70 0:a33b2a7b4222 182
kpatel70 0:a33b2a7b4222 183 /**
kpatel70 0:a33b2a7b4222 184 * Callback function for readJpegFileContent.
kpatel70 0:a33b2a7b4222 185 *
kpatel70 0:a33b2a7b4222 186 * @param buf A pointer to a buffer.
kpatel70 0:a33b2a7b4222 187 * @param siz A size of the buffer.
kpatel70 0:a33b2a7b4222 188 */
kpatel70 0:a33b2a7b4222 189 void callback_func(int done, int total, uint8_t *buf, size_t siz)
kpatel70 0:a33b2a7b4222 190 {
kpatel70 0:a33b2a7b4222 191 fwrite(buf, siz, 1, work.fp);
kpatel70 0:a33b2a7b4222 192
kpatel70 0:a33b2a7b4222 193 static int n = 0;
kpatel70 0:a33b2a7b4222 194 int tmp = done * 100 / total;
kpatel70 0:a33b2a7b4222 195 if (n != tmp) {
kpatel70 0:a33b2a7b4222 196 n = tmp;
kpatel70 0:a33b2a7b4222 197 DEBMSG("Writing...: %3d%%", n);
kpatel70 0:a33b2a7b4222 198 NEWLINE();
kpatel70 0:a33b2a7b4222 199 }
kpatel70 0:a33b2a7b4222 200 }
kpatel70 0:a33b2a7b4222 201
kpatel70 0:a33b2a7b4222 202
kpatel70 0:a33b2a7b4222 203 /**
kpatel70 0:a33b2a7b4222 204 * Capture.
kpatel70 0:a33b2a7b4222 205 *
kpatel70 0:a33b2a7b4222 206 * @param cam A pointer to a camera object.
kpatel70 0:a33b2a7b4222 207 * @param filename The file name.
kpatel70 0:a33b2a7b4222 208 *
kpatel70 0:a33b2a7b4222 209 * @return Return 0 if it succeed.
kpatel70 0:a33b2a7b4222 210 */
kpatel70 0:a33b2a7b4222 211 int capture(Camera_LS_Y201 *cam, char *filename)
kpatel70 0:a33b2a7b4222 212 {
kpatel70 0:a33b2a7b4222 213 /*
kpatel70 0:a33b2a7b4222 214 * Take a picture.
kpatel70 0:a33b2a7b4222 215 */
kpatel70 0:a33b2a7b4222 216 if (cam->takePicture() != 0) {
kpatel70 0:a33b2a7b4222 217 return -1;
kpatel70 0:a33b2a7b4222 218 }
kpatel70 0:a33b2a7b4222 219 DEBMSG("Captured.");
kpatel70 0:a33b2a7b4222 220 NEWLINE();
kpatel70 0:a33b2a7b4222 221
kpatel70 0:a33b2a7b4222 222 /*
kpatel70 0:a33b2a7b4222 223 * Open file.
kpatel70 0:a33b2a7b4222 224 */
kpatel70 0:a33b2a7b4222 225 work.fp = fopen(filename, "wb");
kpatel70 0:a33b2a7b4222 226 if (work.fp == NULL) {
kpatel70 0:a33b2a7b4222 227 return -2;
kpatel70 0:a33b2a7b4222 228 }
kpatel70 0:a33b2a7b4222 229
kpatel70 0:a33b2a7b4222 230 /*
kpatel70 0:a33b2a7b4222 231 * Read the content.
kpatel70 0:a33b2a7b4222 232 */
kpatel70 0:a33b2a7b4222 233 DEBMSG("%s", filename);
kpatel70 0:a33b2a7b4222 234 NEWLINE();
kpatel70 0:a33b2a7b4222 235 if (cam->readJpegFileContent(callback_func) != 0) {
kpatel70 0:a33b2a7b4222 236 fclose(work.fp);
kpatel70 0:a33b2a7b4222 237 return -3;
kpatel70 0:a33b2a7b4222 238 }
kpatel70 0:a33b2a7b4222 239 fclose(work.fp);
kpatel70 0:a33b2a7b4222 240
kpatel70 0:a33b2a7b4222 241 /*
kpatel70 0:a33b2a7b4222 242 * Stop taking pictures.
kpatel70 0:a33b2a7b4222 243 */
kpatel70 0:a33b2a7b4222 244 cam->stopTakingPictures();
kpatel70 0:a33b2a7b4222 245
kpatel70 0:a33b2a7b4222 246 return 0;
kpatel70 0:a33b2a7b4222 247 }
kpatel70 0:a33b2a7b4222 248
kpatel70 0:a33b2a7b4222 249 void take_picture()
kpatel70 0:a33b2a7b4222 250 {
kpatel70 0:a33b2a7b4222 251
kpatel70 0:a33b2a7b4222 252 myservo.write(0);
kpatel70 0:a33b2a7b4222 253 int a;
kpatel70 0:a33b2a7b4222 254 wait(1);
kpatel70 0:a33b2a7b4222 255 char buffer[25];
kpatel70 0:a33b2a7b4222 256 sprintf(buffer, "/sd/mydir/%d_1.jpg", index);
kpatel70 0:a33b2a7b4222 257 a = capture(&cam1,buffer);
kpatel70 0:a33b2a7b4222 258 switch (a) {
kpatel70 0:a33b2a7b4222 259 case -1:
kpatel70 0:a33b2a7b4222 260 led1=1;
kpatel70 0:a33b2a7b4222 261 break;
kpatel70 0:a33b2a7b4222 262 case -2:
kpatel70 0:a33b2a7b4222 263 //led2=1;
kpatel70 0:a33b2a7b4222 264 break;
kpatel70 0:a33b2a7b4222 265 case -3:
kpatel70 0:a33b2a7b4222 266 led3=1;
kpatel70 0:a33b2a7b4222 267 break;
kpatel70 0:a33b2a7b4222 268 case 0:
kpatel70 0:a33b2a7b4222 269 led4=1;
kpatel70 0:a33b2a7b4222 270 lcd.printf("Took picture 1!\n");
kpatel70 0:a33b2a7b4222 271 break;
kpatel70 0:a33b2a7b4222 272 }
kpatel70 0:a33b2a7b4222 273
kpatel70 0:a33b2a7b4222 274 wait(1);
kpatel70 0:a33b2a7b4222 275 led1=0;
kpatel70 0:a33b2a7b4222 276 //led2=0;
kpatel70 0:a33b2a7b4222 277 led3=0;
kpatel70 0:a33b2a7b4222 278 led4=0;
kpatel70 0:a33b2a7b4222 279
kpatel70 0:a33b2a7b4222 280 myservo.write(0.5);
kpatel70 0:a33b2a7b4222 281 wait(1);
kpatel70 0:a33b2a7b4222 282 sprintf(buffer, "/sd/mydir/%d_2.jpg", index);
kpatel70 0:a33b2a7b4222 283 a= capture(&cam1,buffer);
kpatel70 0:a33b2a7b4222 284
kpatel70 0:a33b2a7b4222 285 switch (a) {
kpatel70 0:a33b2a7b4222 286 case -1:
kpatel70 0:a33b2a7b4222 287 led1=1;
kpatel70 0:a33b2a7b4222 288 break;
kpatel70 0:a33b2a7b4222 289 case -2:
kpatel70 0:a33b2a7b4222 290 //led2=1;
kpatel70 0:a33b2a7b4222 291 break;
kpatel70 0:a33b2a7b4222 292 case -3:
kpatel70 0:a33b2a7b4222 293 led3=1;
kpatel70 0:a33b2a7b4222 294 break;
kpatel70 0:a33b2a7b4222 295 case 0:
kpatel70 0:a33b2a7b4222 296 led4=1;
kpatel70 0:a33b2a7b4222 297 lcd.printf("Took picture 2!\n");
kpatel70 0:a33b2a7b4222 298 break;
kpatel70 0:a33b2a7b4222 299 }
kpatel70 0:a33b2a7b4222 300
kpatel70 0:a33b2a7b4222 301 wait(1);
kpatel70 0:a33b2a7b4222 302 led1=0;
kpatel70 0:a33b2a7b4222 303 //led2=0;
kpatel70 0:a33b2a7b4222 304 led3=0;
kpatel70 0:a33b2a7b4222 305 led4=0;
kpatel70 0:a33b2a7b4222 306 myservo.write(1);
kpatel70 0:a33b2a7b4222 307 wait(1);
kpatel70 0:a33b2a7b4222 308 sprintf(buffer, "/sd/mydir/%d_3.jpg", index++);
kpatel70 0:a33b2a7b4222 309 a= capture(&cam1,buffer);
kpatel70 0:a33b2a7b4222 310 switch (a) {
kpatel70 0:a33b2a7b4222 311 case -1:
kpatel70 0:a33b2a7b4222 312 led1=1;
kpatel70 0:a33b2a7b4222 313 break;
kpatel70 0:a33b2a7b4222 314 case -2:
kpatel70 0:a33b2a7b4222 315 //led2=1;
kpatel70 0:a33b2a7b4222 316 break;
kpatel70 0:a33b2a7b4222 317 case -3:
kpatel70 0:a33b2a7b4222 318 led3=1;
kpatel70 0:a33b2a7b4222 319 break;
kpatel70 0:a33b2a7b4222 320 case 0:
kpatel70 0:a33b2a7b4222 321 led4=1;
kpatel70 0:a33b2a7b4222 322 lcd.printf("Took picture 3!\n");
kpatel70 0:a33b2a7b4222 323 break;
kpatel70 0:a33b2a7b4222 324 }
kpatel70 0:a33b2a7b4222 325
kpatel70 0:a33b2a7b4222 326 wait(1);
kpatel70 0:a33b2a7b4222 327 led1=0;
kpatel70 0:a33b2a7b4222 328 //led2=0;
kpatel70 0:a33b2a7b4222 329 led3=0;
kpatel70 0:a33b2a7b4222 330 led4=0;
kpatel70 0:a33b2a7b4222 331
kpatel70 0:a33b2a7b4222 332 }
kpatel70 0:a33b2a7b4222 333
kpatel70 0:a33b2a7b4222 334
kpatel70 0:a33b2a7b4222 335 void handle_message()
kpatel70 0:a33b2a7b4222 336 {
kpatel70 0:a33b2a7b4222 337 int temp;
kpatel70 0:a33b2a7b4222 338 pc.printf("MESSAGE: %s\n", message);
kpatel70 0:a33b2a7b4222 339 if(strstr(message, "take picture") != NULL){
kpatel70 0:a33b2a7b4222 340 take_picture();
kpatel70 0:a33b2a7b4222 341 } else if(strstr(message, "turn off alarm") != NULL){
kpatel70 0:a33b2a7b4222 342 speaker = 0;
kpatel70 0:a33b2a7b4222 343 } else if(strstr(message, "get status") != NULL){
kpatel70 0:a33b2a7b4222 344 char msg[100];
kpatel70 0:a33b2a7b4222 345 int l1 = light1;
kpatel70 0:a33b2a7b4222 346 int l2 = light2;
kpatel70 0:a33b2a7b4222 347 int spk = speaker > 0.0f;
kpatel70 0:a33b2a7b4222 348 sprintf(msg, "Status: Light1 = %d, Light2 = %d, Temperature = %f, Alarm = %d", l1, l2, temp_sensor.getTemperature(), spk);
kpatel70 0:a33b2a7b4222 349 send_sms(msg);
kpatel70 0:a33b2a7b4222 350 pc.printf(msg);
kpatel70 0:a33b2a7b4222 351 } else if (strstr(message, "deactivate") != NULL){
kpatel70 0:a33b2a7b4222 352 speaker = 0;
kpatel70 0:a33b2a7b4222 353 activate = false;
kpatel70 0:a33b2a7b4222 354 led2 = 0;
kpatel70 0:a33b2a7b4222 355 pc.printf("\nIntrusion alert not active\n");
kpatel70 0:a33b2a7b4222 356 } else if (strstr(message, "activate") != NULL){
kpatel70 0:a33b2a7b4222 357 activate = true;
kpatel70 0:a33b2a7b4222 358 calibrate_ir();
kpatel70 0:a33b2a7b4222 359 light1 = 0;
kpatel70 0:a33b2a7b4222 360 light2 = 0;
kpatel70 0:a33b2a7b4222 361 heat = false;
kpatel70 0:a33b2a7b4222 362 temp_sensor.setHeater(false);
kpatel70 0:a33b2a7b4222 363 led2 = 1;
kpatel70 0:a33b2a7b4222 364 pc.printf("\nIntrusion alert active\n");
kpatel70 0:a33b2a7b4222 365 } else if (strstr(message, "turn off light 1") != NULL){
kpatel70 0:a33b2a7b4222 366 pc.printf("\nTurning off light 1\n");
kpatel70 0:a33b2a7b4222 367 light1 = 0;
kpatel70 0:a33b2a7b4222 368 } else if (strstr(message, "turn off light 2") != NULL){
kpatel70 0:a33b2a7b4222 369 pc.printf("\nTurning off light 2\n");
kpatel70 0:a33b2a7b4222 370 light2 = 0;
kpatel70 0:a33b2a7b4222 371 } else if (strstr(message, "turn on light 1") != NULL){
kpatel70 0:a33b2a7b4222 372 pc.printf("\nTurning on light 1\n");
kpatel70 0:a33b2a7b4222 373 light1 = 1;
kpatel70 0:a33b2a7b4222 374 } else if (strstr(message, "turn on light 2") != NULL){
kpatel70 0:a33b2a7b4222 375 pc.printf("\nTurning on light 2\n");
kpatel70 0:a33b2a7b4222 376 light2 = 1;
kpatel70 0:a33b2a7b4222 377 } else if (strstr(message, "turn off heat") != NULL){
kpatel70 0:a33b2a7b4222 378 heat = false;
kpatel70 0:a33b2a7b4222 379 lcd.printf("Heat off!\n");
kpatel70 0:a33b2a7b4222 380 pc.printf("\nTurning off heat\n");
kpatel70 0:a33b2a7b4222 381 } else if (strstr(message, "get temperature") != NULL){
kpatel70 0:a33b2a7b4222 382 char new_message[30];
kpatel70 0:a33b2a7b4222 383 sprintf(new_message, "Current Temperature is %f", temp_sensor.getTemperature());
kpatel70 0:a33b2a7b4222 384 send_sms(new_message);
kpatel70 0:a33b2a7b4222 385 pc.printf("\nSending current temperature %f\n", temp_sensor.getTemperature());
kpatel70 0:a33b2a7b4222 386 } else if (sscanf(message, "set temperature %d", &temp) >=1){
kpatel70 0:a33b2a7b4222 387 target_temperature = (float)temp;
kpatel70 0:a33b2a7b4222 388 lcd.cls();
kpatel70 0:a33b2a7b4222 389 lcd.printf("Target temp: %d\n", temp);
kpatel70 0:a33b2a7b4222 390 heat = true;
kpatel70 0:a33b2a7b4222 391 if(current_temperature < target_temperature){
kpatel70 0:a33b2a7b4222 392 lcd.printf("Heater ON\n");
kpatel70 0:a33b2a7b4222 393 } else {
kpatel70 0:a33b2a7b4222 394 lcd.printf("Heater OFF\n");
kpatel70 0:a33b2a7b4222 395 }
kpatel70 0:a33b2a7b4222 396 pc.printf("Setting target temperature to %d\n", temp);
kpatel70 0:a33b2a7b4222 397 }
kpatel70 0:a33b2a7b4222 398 message[0] = 0;
kpatel70 0:a33b2a7b4222 399 message_received = false;
kpatel70 0:a33b2a7b4222 400
kpatel70 0:a33b2a7b4222 401 }
kpatel70 0:a33b2a7b4222 402
kpatel70 0:a33b2a7b4222 403 void play_sound(){
kpatel70 0:a33b2a7b4222 404 for(int i = 0; i < 5000; i++){
kpatel70 0:a33b2a7b4222 405 for(float j = 0.0; j <= 1.0; j+=0.1){
kpatel70 0:a33b2a7b4222 406 speaker = j;
kpatel70 0:a33b2a7b4222 407 wait(0.0001);
kpatel70 0:a33b2a7b4222 408
kpatel70 0:a33b2a7b4222 409 }
kpatel70 0:a33b2a7b4222 410 }
kpatel70 0:a33b2a7b4222 411 //speaker = 0.0;
kpatel70 0:a33b2a7b4222 412 }