Georgia Tech ECE 4180 Final Project
Dependencies: Camera_LS_Y201 FatFileSystem MODSERIAL SDFileSystem SHTx Servo TextLCD mbed
project_defines.hpp@0:a33b2a7b4222, 2012-12-07 (annotated)
- 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?
User | Revision | Line number | New 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 | } |