Xbee-Smart-Home-Inside RX Test

Dependencies:   Si7021 mbed-rtos JPEGCamera mbed

Fork of Xbee-Smart-Home-Inside by prana koirala

Committer:
pkoirala3
Date:
Wed Apr 26 14:51:31 2017 +0000
Revision:
5:81a1920e5f3d
Parent:
4:df159b3382e3
Child:
6:6a43e2fdb8aa
Optimized V2.0

Who changed what in which revision?

UserRevisionLine numberNew contents of line
pkoirala3 1:e9068d048f58 1 #include "mbed.h"
pkoirala3 1:e9068d048f58 2 #include "rtos.h"
pkoirala3 1:e9068d048f58 3 #include "JPEGCamera.h"
pkoirala3 3:415ccd1f7ae1 4 #include "Si7021.h"
pkoirala3 3:415ccd1f7ae1 5 #include "mpr121.h"
pkoirala3 1:e9068d048f58 6
pkoirala3 3:415ccd1f7ae1 7 Serial xbee(p9, p10);
pkoirala3 3:415ccd1f7ae1 8 Serial pc(USBTX, USBRX);
pkoirala3 3:415ccd1f7ae1 9 JPEGCamera camera(p13, p14);
pkoirala3 3:415ccd1f7ae1 10 DigitalOut rst1(p8);
pkoirala3 4:df159b3382e3 11 AnalogIn ambient(p16);
pkoirala3 4:df159b3382e3 12 DigitalOut light(p17);
pkoirala3 3:415ccd1f7ae1 13 Si7021 tempHum(p28, p27);
pkoirala3 0:5b1386641010 14
pkoirala3 3:415ccd1f7ae1 15 DigitalOut led1(LED1);
pkoirala3 3:415ccd1f7ae1 16 DigitalOut led2(LED2);
pkoirala3 5:81a1920e5f3d 17 DigitalOut turnSpkOff(p21);
pkoirala3 5:81a1920e5f3d 18 PwmOut speaker(p22);
pkoirala3 0:5b1386641010 19
pkoirala3 3:415ccd1f7ae1 20 char outBuffer[50];
pkoirala3 3:415ccd1f7ae1 21 // char imageBuff[4800]; // For camera buffer
pkoirala3 3:415ccd1f7ae1 22 char inBuffer;
pkoirala3 5:81a1920e5f3d 23 volatile bool lightOnOff = false;
pkoirala3 3:415ccd1f7ae1 24 volatile bool requestIn = false;
pkoirala3 5:81a1920e5f3d 25 volatile bool intrusion = false;
pkoirala3 0:5b1386641010 26
pkoirala3 4:df159b3382e3 27 // Mutex serialMutex;
pkoirala3 3:415ccd1f7ae1 28 Thread t1;
pkoirala3 5:81a1920e5f3d 29 Thread t2;
pkoirala3 0:5b1386641010 30
pkoirala3 3:415ccd1f7ae1 31 void getcommand()
pkoirala3 3:415ccd1f7ae1 32 {
pkoirala3 3:415ccd1f7ae1 33 while(1) {
pkoirala3 3:415ccd1f7ae1 34 if(xbee.readable()) {
pkoirala3 3:415ccd1f7ae1 35 led1 = 1;
pkoirala3 3:415ccd1f7ae1 36 inBuffer = xbee.getc();
pkoirala3 3:415ccd1f7ae1 37 requestIn = true;
pkoirala3 3:415ccd1f7ae1 38 led1 = 0;
pkoirala3 3:415ccd1f7ae1 39 }
pkoirala3 3:415ccd1f7ae1 40 Thread::wait(1000);
pkoirala3 3:415ccd1f7ae1 41 }
pkoirala3 1:e9068d048f58 42 }
pkoirala3 1:e9068d048f58 43
pkoirala3 3:415ccd1f7ae1 44 void sendcommand(char outBuff[])
pkoirala3 3:415ccd1f7ae1 45 {
pkoirala3 3:415ccd1f7ae1 46 if(xbee.writeable()){
pkoirala3 3:415ccd1f7ae1 47 led2 = 1;
pkoirala3 3:415ccd1f7ae1 48 int i = 0;
pkoirala3 3:415ccd1f7ae1 49 while(outBuff[i] != ','){
pkoirala3 3:415ccd1f7ae1 50 xbee.putc(outBuff[i]);
pkoirala3 3:415ccd1f7ae1 51 i++;
pkoirala3 3:415ccd1f7ae1 52 }
pkoirala3 3:415ccd1f7ae1 53 led2 = 0;
pkoirala3 3:415ccd1f7ae1 54 }
pkoirala3 1:e9068d048f58 55 }
pkoirala3 5:81a1920e5f3d 56
pkoirala3 5:81a1920e5f3d 57 void statusUpdate(){
pkoirala3 5:81a1920e5f3d 58 tempHum.measure();
pkoirala3 5:81a1920e5f3d 59 float temp = (tempHum.get_temperature()/1000.00);
pkoirala3 5:81a1920e5f3d 60 float hum = (tempHum.get_humidity()/1000.00);
pkoirala3 5:81a1920e5f3d 61 float lightStatus = !light;
pkoirala3 5:81a1920e5f3d 62 char delimit = '|';
pkoirala3 5:81a1920e5f3d 63 char terminate = ',';
pkoirala3 5:81a1920e5f3d 64 sprintf(outBuffer, "%2.2f%c%2.1f%c%0.2f%c",temp, delimit, hum, delimit, lightStatus, terminate);
pkoirala3 5:81a1920e5f3d 65 sendcommand(outBuffer);
pkoirala3 5:81a1920e5f3d 66 }
pkoirala3 5:81a1920e5f3d 67
pkoirala3 5:81a1920e5f3d 68
pkoirala3 4:df159b3382e3 69 /*
pkoirala3 3:415ccd1f7ae1 70 // IRS p26, SDA p9, SCL p10 (SDA & SCL Need 4.7Kohm with 3.3, Vcc --> 3.3
pkoirala3 3:415ccd1f7ae1 71 InterruptIn interrupt(p26);
pkoirala3 3:415ccd1f7ae1 72 I2C i2c(p9, p10);
pkoirala3 3:415ccd1f7ae1 73 Mpr121 mpr121(&i2c, Mpr121::ADD_VSS);
pkoirala3 3:415ccd1f7ae1 74
pkoirala3 3:415ccd1f7ae1 75 // Key hit/release interrupt routine
pkoirala3 3:415ccd1f7ae1 76 void fallInterrupt() {
pkoirala3 3:415ccd1f7ae1 77 int key_code=0;
pkoirala3 3:415ccd1f7ae1 78 int i=0;
pkoirala3 3:415ccd1f7ae1 79 int value=mpr121.read(0x00);
pkoirala3 3:415ccd1f7ae1 80 value +=mpr121.read(0x01)<<8;
pkoirala3 3:415ccd1f7ae1 81 // Implemented latter
pkoirala3 5:81a1920e5f3d 82 // If wrong passcode then take pic & send it & play sound
pkoirala3 5:81a1920e5f3d 83 turnSpkOff = 1;
pkoirala3 5:81a1920e5f3d 84 speaker = 0.2;
pkoirala3 5:81a1920e5f3d 85 intrusion = true;
pkoirala3 5:81a1920e5f3d 86 Thread::wait(1000);
pkoirala3 5:81a1920e5f3d 87 speaker = 0;
pkoirala3 5:81a1920e5f3d 88 turnSpkOff = 0;
pkoirala3 3:415ccd1f7ae1 89 }
pkoirala3 4:df159b3382e3 90 */
pkoirala3 3:415ccd1f7ae1 91 /* // Implemented latter
pkoirala3 3:415ccd1f7ae1 92 void cameraImage()
pkoirala3 3:415ccd1f7ae1 93 {
pkoirala3 1:e9068d048f58 94 LocalFileSystem local("local"); //save images on mbed
pkoirala3 1:e9068d048f58 95 camera.setPictureSize(JPEGCamera::SIZE160x120);
pkoirala3 3:415ccd1f7ae1 96 while(1) {
pkoirala3 3:415ccd1f7ae1 97 if (camera.isReady()) {
pkoirala3 1:e9068d048f58 98 char filename[32];
pkoirala3 1:e9068d048f58 99 sprintf(filename, "/local/pict.jpg");
pkoirala3 1:e9068d048f58 100 printf("Picture: %s ", filename);
pkoirala3 3:415ccd1f7ae1 101 if (camera.takePicture(filename)) {
pkoirala3 3:415ccd1f7ae1 102 while (camera.isProcessing()) {
pkoirala3 1:e9068d048f58 103 camera.processPicture();
pkoirala3 1:e9068d048f58 104 }
pkoirala3 1:e9068d048f58 105 }
pkoirala3 1:e9068d048f58 106 }
pkoirala3 3:415ccd1f7ae1 107 // Load image from mbed to imageBuff;
pkoirala3 3:415ccd1f7ae1 108 // Need jpg decoder and scale the image to 80*60
pkoirala3 3:415ccd1f7ae1 109 }
pkoirala3 3:415ccd1f7ae1 110 }
pkoirala3 3:415ccd1f7ae1 111 */
pkoirala3 3:415ccd1f7ae1 112
pkoirala3 3:415ccd1f7ae1 113 int main()
pkoirala3 3:415ccd1f7ae1 114 {
pkoirala3 4:df159b3382e3 115 light = 0;
pkoirala3 3:415ccd1f7ae1 116 rst1 = 0;
pkoirala3 3:415ccd1f7ae1 117 wait_ms(1);
pkoirala3 3:415ccd1f7ae1 118 rst1 = 1;
pkoirala3 3:415ccd1f7ae1 119 wait_ms(1);
pkoirala3 3:415ccd1f7ae1 120 // xbee.baud(115200); // May be need to do this to send image
pkoirala3 3:415ccd1f7ae1 121 t1.start(getcommand);
pkoirala3 5:81a1920e5f3d 122 speaker.period(1.0/800.0);
pkoirala3 5:81a1920e5f3d 123 turnSpkOff = 0;
pkoirala3 3:415ccd1f7ae1 124 // If someone enter key in touchpad this interrupt will be evoked
pkoirala3 4:df159b3382e3 125 // interrupt.fall(&fallInterrupt);
pkoirala3 4:df159b3382e3 126 // interrupt.mode(PullUp);
pkoirala3 5:81a1920e5f3d 127 bool ledUpdate = false;
pkoirala3 3:415ccd1f7ae1 128 while(1){
pkoirala3 5:81a1920e5f3d 129 if(requestIn || ledUpdate || intrusion){ // Check for input request msg
pkoirala3 4:df159b3382e3 130 led1 = 0;
pkoirala3 5:81a1920e5f3d 131 if(inBuffer == 's' || ledUpdate) { // Send the status
pkoirala3 5:81a1920e5f3d 132 statusUpdate();
pkoirala3 5:81a1920e5f3d 133 ledUpdate = false;
pkoirala3 3:415ccd1f7ae1 134 }
pkoirala3 3:415ccd1f7ae1 135 else if(inBuffer == 'l') {
pkoirala3 3:415ccd1f7ae1 136 lightOnOff = !lightOnOff; // Toggle light on/off
pkoirala3 5:81a1920e5f3d 137 // light = (lightOnOff == true) ? ambient.read() : 0;
pkoirala3 4:df159b3382e3 138 light = (lightOnOff == true) ? 1 : 0;
pkoirala3 5:81a1920e5f3d 139 ledUpdate = true;
pkoirala3 4:df159b3382e3 140 led1 = 1;
pkoirala3 5:81a1920e5f3d 141 } else if(inBuffer == 'c' || intrusion) {
pkoirala3 3:415ccd1f7ae1 142 // Capture pic & Send it
pkoirala3 3:415ccd1f7ae1 143 // cameraImage();
pkoirala3 3:415ccd1f7ae1 144 // sendcommand(imageBuff);
pkoirala3 3:415ccd1f7ae1 145 // Need to work more on sendcommand function to support this
pkoirala3 5:81a1920e5f3d 146 intrusion = false;
pkoirala3 3:415ccd1f7ae1 147 }
pkoirala3 5:81a1920e5f3d 148 inBuffer = ' '; // Clear the buffer
pkoirala3 3:415ccd1f7ae1 149 }
pkoirala3 3:415ccd1f7ae1 150 Thread::wait(1000);
pkoirala3 1:e9068d048f58 151 }
pkoirala3 0:5b1386641010 152 }