Xbee-Smart-Home-Inside RX Test
Dependencies: Si7021 mbed-rtos JPEGCamera mbed
Fork of Xbee-Smart-Home-Inside by
main.cpp@5:81a1920e5f3d, 2017-04-26 (annotated)
- 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?
User | Revision | Line number | New 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 | } |