ECE 4180 Georiga Tech - Smart House Project: mbed1 (v1)

Dependencies:   Camera_LS_Y201 Servo mbed

Fork of mbed1 by Joe Greubel

Committer:
Jgreub
Date:
Mon Apr 22 18:38:07 2013 +0000
Revision:
1:547b5918a132
Parent:
0:0b4164532b17
Test 2

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jgreub 0:0b4164532b17 1 /**********************************
Jgreub 0:0b4164532b17 2 MBED1: Contains code for ->
Jgreub 0:0b4164532b17 3 1) Servo for Door Lock
Jgreub 0:0b4164532b17 4 2) JPG Camera (URL: http://mbed.org/cookbook/Camera_LS_Y201)
Jgreub 0:0b4164532b17 5 3) Distance Sensor
Jgreub 0:0b4164532b17 6 4) Lock LED / Pushbutton
Jgreub 0:0b4164532b17 7
Jgreub 0:0b4164532b17 8 Sends to Atom w/o Command:
Jgreub 0:0b4164532b17 9 1) BreakIn -> Signal and Pic
Jgreub 0:0b4164532b17 10 2) Door Open
Jgreub 0:0b4164532b17 11 3) Door Close
Jgreub 0:0b4164532b17 12 ***********************************/
Jgreub 0:0b4164532b17 13 #include "mbed.h"
Jgreub 0:0b4164532b17 14 #include "Camera_LS_Y201.h"
Jgreub 0:0b4164532b17 15 #include "Servo.h"
Jgreub 0:0b4164532b17 16
Jgreub 0:0b4164532b17 17 Serial pc(USBTX,USBRX);
Jgreub 0:0b4164532b17 18 Servo servo(p21);
Jgreub 0:0b4164532b17 19 AnalogIn door(p20);
Jgreub 0:0b4164532b17 20 Camera_LS_Y201 cam(p9, p10);
Jgreub 0:0b4164532b17 21 DigitalOut lockLED(p11); //1 = locked
Jgreub 0:0b4164532b17 22
Jgreub 0:0b4164532b17 23 //Pushbuttons
Jgreub 1:547b5918a132 24 InterruptIn lockPB(p13);
Jgreub 0:0b4164532b17 25
Jgreub 0:0b4164532b17 26 //Globals
Jgreub 0:0b4164532b17 27 char signal;
Jgreub 0:0b4164532b17 28 int isDoorOpen;
Jgreub 0:0b4164532b17 29 int isDoorLocked;
Jgreub 0:0b4164532b17 30
Jgreub 0:0b4164532b17 31
Jgreub 0:0b4164532b17 32
Jgreub 0:0b4164532b17 33
Jgreub 0:0b4164532b17 34
Jgreub 0:0b4164532b17 35
Jgreub 0:0b4164532b17 36
Jgreub 0:0b4164532b17 37
Jgreub 0:0b4164532b17 38 /***************************************/
Jgreub 0:0b4164532b17 39 /* HELPER FUNCTIONS */
Jgreub 0:0b4164532b17 40 /***************************************/
Jgreub 1:547b5918a132 41 inline void servoLockDoor() {servo = .5;lockLED = 1;}
Jgreub 1:547b5918a132 42 inline void servoUnlockDoor() {servo = .8;lockLED = 0;}
Jgreub 1:547b5918a132 43 inline void sendID() {pc.printf("1\n\r");}
Jgreub 1:547b5918a132 44 inline int checkLock() {return isDoorLocked;}
Jgreub 1:547b5918a132 45 inline float checkDist() {return door;}
Jgreub 1:547b5918a132 46 int i;
Jgreub 1:547b5918a132 47
Jgreub 1:547b5918a132 48 void writePic(int done, int total, uint8_t *buf, size_t siz) {
Jgreub 1:547b5918a132 49 pc.printf("HERE\n\r");
Jgreub 1:547b5918a132 50 pc.printf((char*)buf);
Jgreub 0:0b4164532b17 51 }
Jgreub 0:0b4164532b17 52
Jgreub 1:547b5918a132 53 void capture(Camera_LS_Y201 *cam1) {
Jgreub 1:547b5918a132 54 if((i=cam1->takePicture()) != 0) {
Jgreub 1:547b5918a132 55 pc.printf("ERROR TAKEPIC = %d\n\r", i);
Jgreub 1:547b5918a132 56 return;
Jgreub 1:547b5918a132 57 }
Jgreub 1:547b5918a132 58 if(cam1->readJpegFileContent(writePic) != 0) {
Jgreub 1:547b5918a132 59 pc.printf("ERROR FILECONTENT\n\r");
Jgreub 1:547b5918a132 60 return;
Jgreub 1:547b5918a132 61 }
Jgreub 1:547b5918a132 62 cam1->stopTakingPictures();
Jgreub 0:0b4164532b17 63 }
Jgreub 0:0b4164532b17 64
Jgreub 0:0b4164532b17 65 void lockPushed() {
Jgreub 0:0b4164532b17 66 char out[50];
Jgreub 0:0b4164532b17 67 if(checkLock()) {
Jgreub 0:0b4164532b17 68 servoUnlockDoor();
Jgreub 0:0b4164532b17 69 isDoorLocked = 0;
Jgreub 0:0b4164532b17 70 sprintf(out, "USERUNLOCK\n\r");
Jgreub 0:0b4164532b17 71 }
Jgreub 0:0b4164532b17 72 else {
Jgreub 0:0b4164532b17 73 servoLockDoor();
Jgreub 0:0b4164532b17 74 isDoorLocked = 1;
Jgreub 0:0b4164532b17 75 sprintf(out, "USERLOCK\n\r");
Jgreub 0:0b4164532b17 76 }
Jgreub 1:547b5918a132 77 pc.printf(out);
Jgreub 0:0b4164532b17 78 }
Jgreub 0:0b4164532b17 79
Jgreub 0:0b4164532b17 80 void sendCurrPic() {
Jgreub 0:0b4164532b17 81 pc.printf("SENDINGPIC\n\r");
Jgreub 1:547b5918a132 82 capture(&cam);
Jgreub 0:0b4164532b17 83 pc.printf("PICSENT\n\r");
Jgreub 0:0b4164532b17 84 }
Jgreub 0:0b4164532b17 85
Jgreub 0:0b4164532b17 86 void breakIn() {
Jgreub 0:0b4164532b17 87 char out[50];
Jgreub 0:0b4164532b17 88 sprintf(out, "BREAKIN\n\r");
Jgreub 0:0b4164532b17 89 pc.printf(out);
Jgreub 0:0b4164532b17 90 sendCurrPic();
Jgreub 1:547b5918a132 91 //ADD ALARM
Jgreub 1:547b5918a132 92 while(1);
Jgreub 0:0b4164532b17 93 }
Jgreub 0:0b4164532b17 94
Jgreub 0:0b4164532b17 95 void lockDoor() {
Jgreub 0:0b4164532b17 96 char out[50];
Jgreub 0:0b4164532b17 97 if(isDoorLocked) {
Jgreub 0:0b4164532b17 98 sprintf(out, "ALREADYLOCKED\n\r");
Jgreub 0:0b4164532b17 99 }
Jgreub 0:0b4164532b17 100 else {
Jgreub 0:0b4164532b17 101 servoLockDoor();
Jgreub 0:0b4164532b17 102 isDoorLocked = 1;
Jgreub 0:0b4164532b17 103 sprintf(out, "NOWLOCKED\n\r");
Jgreub 0:0b4164532b17 104 }
Jgreub 0:0b4164532b17 105 pc.printf(out);
Jgreub 0:0b4164532b17 106 }
Jgreub 0:0b4164532b17 107
Jgreub 0:0b4164532b17 108 void unlockDoor() {
Jgreub 0:0b4164532b17 109 char out[50];
Jgreub 0:0b4164532b17 110 if(!isDoorLocked) {
Jgreub 0:0b4164532b17 111 sprintf(out, "ALREADYUNLOCKED\n\r");
Jgreub 0:0b4164532b17 112 }
Jgreub 0:0b4164532b17 113 else {
Jgreub 0:0b4164532b17 114 servoUnlockDoor();
Jgreub 0:0b4164532b17 115 isDoorLocked = 0;
Jgreub 0:0b4164532b17 116 sprintf(out, "NOWUNLOCKED\n\r");
Jgreub 0:0b4164532b17 117 }
Jgreub 0:0b4164532b17 118 pc.printf(out);
Jgreub 0:0b4164532b17 119 }
Jgreub 0:0b4164532b17 120
Jgreub 0:0b4164532b17 121 void sendCheckLock() {
Jgreub 0:0b4164532b17 122 char out[50];
Jgreub 0:0b4164532b17 123 sprintf(out,"LOCK:%d\n\r", checkLock());
Jgreub 0:0b4164532b17 124 pc.printf(out);
Jgreub 0:0b4164532b17 125 }
Jgreub 0:0b4164532b17 126
Jgreub 0:0b4164532b17 127 void sendCheckDist() {
Jgreub 0:0b4164532b17 128 char out[50];
Jgreub 0:0b4164532b17 129 sprintf(out,"DIST:%0.3f\n\r", checkDist());
Jgreub 0:0b4164532b17 130 pc.printf(out);
Jgreub 0:0b4164532b17 131 }
Jgreub 0:0b4164532b17 132
Jgreub 0:0b4164532b17 133 void sendFullStatus() {
Jgreub 0:0b4164532b17 134 char out[50];
Jgreub 0:0b4164532b17 135 sprintf(out,"LOCK:%d|DIST:%0.3f\n\r", checkLock(), checkDist());
Jgreub 0:0b4164532b17 136 pc.printf(out);
Jgreub 0:0b4164532b17 137 }
Jgreub 0:0b4164532b17 138
Jgreub 0:0b4164532b17 139 void getMessage() {
Jgreub 0:0b4164532b17 140 //Check for Message
Jgreub 0:0b4164532b17 141 signal = pc.getc();
Jgreub 0:0b4164532b17 142
Jgreub 0:0b4164532b17 143 //Switch on Buffer
Jgreub 0:0b4164532b17 144 switch(signal) {
Jgreub 1:547b5918a132 145 case 'o':
Jgreub 0:0b4164532b17 146 sendID();
Jgreub 0:0b4164532b17 147 break;
Jgreub 1:547b5918a132 148 case 'p':
Jgreub 0:0b4164532b17 149 sendFullStatus();
Jgreub 0:0b4164532b17 150 break;
Jgreub 1:547b5918a132 151 case 'q':
Jgreub 0:0b4164532b17 152 sendCheckDist();
Jgreub 0:0b4164532b17 153 break;
Jgreub 1:547b5918a132 154 case 'w':
Jgreub 0:0b4164532b17 155 sendCheckLock();
Jgreub 0:0b4164532b17 156 break;
Jgreub 1:547b5918a132 157 case 's':
Jgreub 0:0b4164532b17 158 lockDoor();
Jgreub 0:0b4164532b17 159 break;
Jgreub 1:547b5918a132 160 case 'x':
Jgreub 0:0b4164532b17 161 unlockDoor();
Jgreub 0:0b4164532b17 162 break;
Jgreub 1:547b5918a132 163 case 't':
Jgreub 0:0b4164532b17 164 sendCurrPic();
Jgreub 0:0b4164532b17 165 break;
Jgreub 0:0b4164532b17 166 default:
Jgreub 0:0b4164532b17 167 pc.printf("BADCOMMAND\n\r");
Jgreub 0:0b4164532b17 168 break;
Jgreub 0:0b4164532b17 169 }
Jgreub 0:0b4164532b17 170 }
Jgreub 0:0b4164532b17 171
Jgreub 0:0b4164532b17 172
Jgreub 0:0b4164532b17 173
Jgreub 0:0b4164532b17 174
Jgreub 0:0b4164532b17 175
Jgreub 0:0b4164532b17 176
Jgreub 0:0b4164532b17 177
Jgreub 0:0b4164532b17 178
Jgreub 0:0b4164532b17 179
Jgreub 0:0b4164532b17 180
Jgreub 0:0b4164532b17 181 /***************************************/
Jgreub 0:0b4164532b17 182 /* MAIN */
Jgreub 0:0b4164532b17 183 /***************************************/
Jgreub 0:0b4164532b17 184 int main() {
Jgreub 0:0b4164532b17 185 //Variables
Jgreub 0:0b4164532b17 186 int DOOR_DISTANCE = door + .05;
Jgreub 0:0b4164532b17 187
Jgreub 0:0b4164532b17 188 //Setup
Jgreub 1:547b5918a132 189 lockLED = 1;
Jgreub 1:547b5918a132 190 isDoorLocked = 1;
Jgreub 1:547b5918a132 191 servo = .5;
Jgreub 0:0b4164532b17 192
Jgreub 0:0b4164532b17 193 //Setup for freopen
Jgreub 1:547b5918a132 194 pc.baud(9600);
Jgreub 1:547b5918a132 195 pc.attach(&getMessage);
Jgreub 1:547b5918a132 196 pc.printf("It is connected\n\r");
Jgreub 0:0b4164532b17 197
Jgreub 0:0b4164532b17 198 //Setup Interrupts
Jgreub 1:547b5918a132 199 lockPB.mode(PullUp);
Jgreub 1:547b5918a132 200 wait(0.1);
Jgreub 1:547b5918a132 201 lockPB.fall(&lockPushed);
Jgreub 0:0b4164532b17 202
Jgreub 1:547b5918a132 203 //Camera
Jgreub 1:547b5918a132 204 wait(1);
Jgreub 1:547b5918a132 205 pc.printf("Reseting Camera...\n\r");
Jgreub 1:547b5918a132 206 if(cam.reset() != 0) {
Jgreub 1:547b5918a132 207 pc.printf("RESET ERROR\n\r");
Jgreub 1:547b5918a132 208 return 1;
Jgreub 1:547b5918a132 209 }
Jgreub 1:547b5918a132 210 wait(1);
Jgreub 1:547b5918a132 211
Jgreub 1:547b5918a132 212 while(1);// {
Jgreub 1:547b5918a132 213 /*
Jgreub 0:0b4164532b17 214 //Check Door Dist and Send if needed
Jgreub 0:0b4164532b17 215 if(isDoorOpen) {
Jgreub 0:0b4164532b17 216 if(door < DOOR_DISTANCE) {
Jgreub 0:0b4164532b17 217 isDoorOpen = 0;
Jgreub 1:547b5918a132 218 pc.printf("DOORCLOSE\n\r");
Jgreub 0:0b4164532b17 219 }
Jgreub 0:0b4164532b17 220 }
Jgreub 0:0b4164532b17 221 else {
Jgreub 0:0b4164532b17 222 if(door > DOOR_DISTANCE) {
Jgreub 0:0b4164532b17 223 isDoorOpen = 1;
Jgreub 0:0b4164532b17 224 if(isDoorLocked) {
Jgreub 0:0b4164532b17 225 breakIn(); //Break In!
Jgreub 0:0b4164532b17 226 }
Jgreub 0:0b4164532b17 227 else {
Jgreub 1:547b5918a132 228 pc.printf("DOOROPEN\n\r");
Jgreub 0:0b4164532b17 229 }
Jgreub 0:0b4164532b17 230 }
Jgreub 0:0b4164532b17 231 }
Jgreub 0:0b4164532b17 232 wait_ms(50);
Jgreub 1:547b5918a132 233 */
Jgreub 1:547b5918a132 234 //} // End While(1)
Jgreub 0:0b4164532b17 235 }