ECE533 project
Dependencies: EthernetInterface M2XStreamClient MODSERIAL jsonlite mbed-rtos mbed
main.cpp@0:7d95a161fefc, 2017-12-08 (annotated)
- Committer:
- dallas1287
- Date:
- Fri Dec 08 17:20:10 2017 +0000
- Revision:
- 0:7d95a161fefc
updated for usage;
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
dallas1287 | 0:7d95a161fefc | 1 | #include "mbed.h" |
dallas1287 | 0:7d95a161fefc | 2 | #include "EthernetInterface.h" |
dallas1287 | 0:7d95a161fefc | 3 | #include "M2XStreamClient.h" |
dallas1287 | 0:7d95a161fefc | 4 | #include "MODSERIAL.h" |
dallas1287 | 0:7d95a161fefc | 5 | |
dallas1287 | 0:7d95a161fefc | 6 | //function declaration |
dallas1287 | 0:7d95a161fefc | 7 | void TimerRead(void); |
dallas1287 | 0:7d95a161fefc | 8 | void MotionSense(void); |
dallas1287 | 0:7d95a161fefc | 9 | void motiontrigger(void); |
dallas1287 | 0:7d95a161fefc | 10 | void ledbounce(void); |
dallas1287 | 0:7d95a161fefc | 11 | void RxRead(void); |
dallas1287 | 0:7d95a161fefc | 12 | void motionTimeOut(void); |
dallas1287 | 0:7d95a161fefc | 13 | void streamData(void); |
dallas1287 | 0:7d95a161fefc | 14 | void SecurityCam(void); |
dallas1287 | 0:7d95a161fefc | 15 | void SecurityEnable(void); |
dallas1287 | 0:7d95a161fefc | 16 | |
dallas1287 | 0:7d95a161fefc | 17 | //bluetooth variables |
dallas1287 | 0:7d95a161fefc | 18 | bool btflag = false; |
dallas1287 | 0:7d95a161fefc | 19 | char received[256] = {""}; |
dallas1287 | 0:7d95a161fefc | 20 | int i = 0; |
dallas1287 | 0:7d95a161fefc | 21 | //led variables |
dallas1287 | 0:7d95a161fefc | 22 | int led_total = 0; |
dallas1287 | 0:7d95a161fefc | 23 | int led_session = 0; |
dallas1287 | 0:7d95a161fefc | 24 | bool ledtimerflag = false; |
dallas1287 | 0:7d95a161fefc | 25 | DigitalOut led(LED_RED); |
dallas1287 | 0:7d95a161fefc | 26 | //fan variables |
dallas1287 | 0:7d95a161fefc | 27 | int fan_total = 0; |
dallas1287 | 0:7d95a161fefc | 28 | int fan_session = 0; |
dallas1287 | 0:7d95a161fefc | 29 | bool fantimerflag = false; |
dallas1287 | 0:7d95a161fefc | 30 | PwmOut fan(D3); |
dallas1287 | 0:7d95a161fefc | 31 | //Motion Sensor Variables |
dallas1287 | 0:7d95a161fefc | 32 | InterruptIn motionsensor(D2); |
dallas1287 | 0:7d95a161fefc | 33 | DigitalOut motionsensorpwr(D1, 0); |
dallas1287 | 0:7d95a161fefc | 34 | //Motion Sensor Timeout |
dallas1287 | 0:7d95a161fefc | 35 | Timeout motionTimeout; |
dallas1287 | 0:7d95a161fefc | 36 | //Timers Initialization |
dallas1287 | 0:7d95a161fefc | 37 | Timer ledtimer; |
dallas1287 | 0:7d95a161fefc | 38 | Timer fantimer; |
dallas1287 | 0:7d95a161fefc | 39 | // Initialize Serial port |
dallas1287 | 0:7d95a161fefc | 40 | Serial pc(USBTX, USBRX); |
dallas1287 | 0:7d95a161fefc | 41 | //bluetooth module declaration |
dallas1287 | 0:7d95a161fefc | 42 | MODSERIAL HC05(PTC15, PTC14); |
dallas1287 | 0:7d95a161fefc | 43 | //security camera |
dallas1287 | 0:7d95a161fefc | 44 | DigitalOut securitycam(D5, 0); |
dallas1287 | 0:7d95a161fefc | 45 | bool securityflag = false; |
dallas1287 | 0:7d95a161fefc | 46 | |
dallas1287 | 0:7d95a161fefc | 47 | int ret; |
dallas1287 | 0:7d95a161fefc | 48 | // Set Sensor Stream details |
dallas1287 | 0:7d95a161fefc | 49 | char deviceId[] = "56429e7da76e7b0d282164231db3446e"; // Device you want to push to |
dallas1287 | 0:7d95a161fefc | 50 | char streamtime[] = "Time"; // Stream you want to push to |
dallas1287 | 0:7d95a161fefc | 51 | char streamfan[] = "Fan_Time"; |
dallas1287 | 0:7d95a161fefc | 52 | char m2xKey[] = "3f3543d74e384a4c94d71729ffee9277"; // Your M2X API Key or Master API Key |
dallas1287 | 0:7d95a161fefc | 53 | // Initialize the M2X client |
dallas1287 | 0:7d95a161fefc | 54 | Client client; |
dallas1287 | 0:7d95a161fefc | 55 | M2XStreamClient m2xClient(&client, m2xKey); |
dallas1287 | 0:7d95a161fefc | 56 | Ticker streamticker; |
dallas1287 | 0:7d95a161fefc | 57 | |
dallas1287 | 0:7d95a161fefc | 58 | void rxinterrupt(MODSERIAL_IRQ_INFO *q) |
dallas1287 | 0:7d95a161fefc | 59 | { |
dallas1287 | 0:7d95a161fefc | 60 | btflag = true; |
dallas1287 | 0:7d95a161fefc | 61 | return; |
dallas1287 | 0:7d95a161fefc | 62 | } |
dallas1287 | 0:7d95a161fefc | 63 | |
dallas1287 | 0:7d95a161fefc | 64 | int main() |
dallas1287 | 0:7d95a161fefc | 65 | { |
dallas1287 | 0:7d95a161fefc | 66 | motionsensor.disable_irq(); |
dallas1287 | 0:7d95a161fefc | 67 | // Intialize Ethernet connection |
dallas1287 | 0:7d95a161fefc | 68 | |
dallas1287 | 0:7d95a161fefc | 69 | EthernetInterface eth; |
dallas1287 | 0:7d95a161fefc | 70 | eth.init(); |
dallas1287 | 0:7d95a161fefc | 71 | eth.connect(); |
dallas1287 | 0:7d95a161fefc | 72 | printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress()); |
dallas1287 | 0:7d95a161fefc | 73 | |
dallas1287 | 0:7d95a161fefc | 74 | |
dallas1287 | 0:7d95a161fefc | 75 | //initialize bluetooth |
dallas1287 | 0:7d95a161fefc | 76 | HC05.baud(9600); |
dallas1287 | 0:7d95a161fefc | 77 | |
dallas1287 | 0:7d95a161fefc | 78 | //attach interrupts |
dallas1287 | 0:7d95a161fefc | 79 | HC05.attach(&rxinterrupt, MODSERIAL::RxIrq); |
dallas1287 | 0:7d95a161fefc | 80 | motionsensor.rise(&motiontrigger); |
dallas1287 | 0:7d95a161fefc | 81 | //streamticker.attach(&streamData,1.0); |
dallas1287 | 0:7d95a161fefc | 82 | |
dallas1287 | 0:7d95a161fefc | 83 | led.write(1); //led initialized to off |
dallas1287 | 0:7d95a161fefc | 84 | |
dallas1287 | 0:7d95a161fefc | 85 | pc.printf("Program Begins."); |
dallas1287 | 0:7d95a161fefc | 86 | while (1) |
dallas1287 | 0:7d95a161fefc | 87 | { |
dallas1287 | 0:7d95a161fefc | 88 | RxRead(); |
dallas1287 | 0:7d95a161fefc | 89 | streamData(); |
dallas1287 | 0:7d95a161fefc | 90 | wait_ms(100); |
dallas1287 | 0:7d95a161fefc | 91 | } |
dallas1287 | 0:7d95a161fefc | 92 | |
dallas1287 | 0:7d95a161fefc | 93 | } |
dallas1287 | 0:7d95a161fefc | 94 | |
dallas1287 | 0:7d95a161fefc | 95 | void streamData() |
dallas1287 | 0:7d95a161fefc | 96 | { |
dallas1287 | 0:7d95a161fefc | 97 | ret = m2xClient.updateStreamValue(deviceId, streamtime, led_total); |
dallas1287 | 0:7d95a161fefc | 98 | pc.printf("send() returned %d\r\n", ret); |
dallas1287 | 0:7d95a161fefc | 99 | ret = m2xClient.updateStreamValue(deviceId, streamfan, fan_total); |
dallas1287 | 0:7d95a161fefc | 100 | pc.printf("send() returned %d\r\n", ret); |
dallas1287 | 0:7d95a161fefc | 101 | } |
dallas1287 | 0:7d95a161fefc | 102 | |
dallas1287 | 0:7d95a161fefc | 103 | void RxRead(void) |
dallas1287 | 0:7d95a161fefc | 104 | { |
dallas1287 | 0:7d95a161fefc | 105 | if(btflag && !HC05.rxBufferEmpty() && HC05.rxGetLastChar() == '#') |
dallas1287 | 0:7d95a161fefc | 106 | { |
dallas1287 | 0:7d95a161fefc | 107 | HC05.move(received, 256); |
dallas1287 | 0:7d95a161fefc | 108 | pc.printf("%c%c%c%c%c",received[0], received[1], received[2],received[3], received[4]); |
dallas1287 | 0:7d95a161fefc | 109 | wait_ms(5); |
dallas1287 | 0:7d95a161fefc | 110 | if(received[0] == 'L') |
dallas1287 | 0:7d95a161fefc | 111 | { |
dallas1287 | 0:7d95a161fefc | 112 | if(received[2] == 'N') |
dallas1287 | 0:7d95a161fefc | 113 | { |
dallas1287 | 0:7d95a161fefc | 114 | led = 0; // toggle led |
dallas1287 | 0:7d95a161fefc | 115 | ledtimerflag = true; |
dallas1287 | 0:7d95a161fefc | 116 | } |
dallas1287 | 0:7d95a161fefc | 117 | else if(received[2] == 'F') |
dallas1287 | 0:7d95a161fefc | 118 | { |
dallas1287 | 0:7d95a161fefc | 119 | led = 1; |
dallas1287 | 0:7d95a161fefc | 120 | ledtimerflag = false; |
dallas1287 | 0:7d95a161fefc | 121 | } |
dallas1287 | 0:7d95a161fefc | 122 | } |
dallas1287 | 0:7d95a161fefc | 123 | else if (received[0] == 'F') |
dallas1287 | 0:7d95a161fefc | 124 | { |
dallas1287 | 0:7d95a161fefc | 125 | if(received[3] == 'H') |
dallas1287 | 0:7d95a161fefc | 126 | { |
dallas1287 | 0:7d95a161fefc | 127 | fan.write(0.99); |
dallas1287 | 0:7d95a161fefc | 128 | fantimerflag = true; |
dallas1287 | 0:7d95a161fefc | 129 | } |
dallas1287 | 0:7d95a161fefc | 130 | else if(received[3] == 'L') |
dallas1287 | 0:7d95a161fefc | 131 | { |
dallas1287 | 0:7d95a161fefc | 132 | fan.write(0.6); |
dallas1287 | 0:7d95a161fefc | 133 | if(!fantimerflag) |
dallas1287 | 0:7d95a161fefc | 134 | fantimerflag = true; |
dallas1287 | 0:7d95a161fefc | 135 | } |
dallas1287 | 0:7d95a161fefc | 136 | else if(received[3] == 'O') |
dallas1287 | 0:7d95a161fefc | 137 | { |
dallas1287 | 0:7d95a161fefc | 138 | fan.write(0.0); |
dallas1287 | 0:7d95a161fefc | 139 | fantimerflag = false; |
dallas1287 | 0:7d95a161fefc | 140 | } |
dallas1287 | 0:7d95a161fefc | 141 | } |
dallas1287 | 0:7d95a161fefc | 142 | else if(received[0] == 'M') |
dallas1287 | 0:7d95a161fefc | 143 | { |
dallas1287 | 0:7d95a161fefc | 144 | if(received[1] == 'R') |
dallas1287 | 0:7d95a161fefc | 145 | { |
dallas1287 | 0:7d95a161fefc | 146 | motionsensor.disable_irq(); |
dallas1287 | 0:7d95a161fefc | 147 | } |
dallas1287 | 0:7d95a161fefc | 148 | else if(received[1] == 'E') |
dallas1287 | 0:7d95a161fefc | 149 | { |
dallas1287 | 0:7d95a161fefc | 150 | led = 1; //led off |
dallas1287 | 0:7d95a161fefc | 151 | fan.write(0.0); //fan off |
dallas1287 | 0:7d95a161fefc | 152 | MotionSense(); |
dallas1287 | 0:7d95a161fefc | 153 | } |
dallas1287 | 0:7d95a161fefc | 154 | else if(received[1] == 'S') |
dallas1287 | 0:7d95a161fefc | 155 | { |
dallas1287 | 0:7d95a161fefc | 156 | securityflag = true; |
dallas1287 | 0:7d95a161fefc | 157 | SecurityEnable(); |
dallas1287 | 0:7d95a161fefc | 158 | } |
dallas1287 | 0:7d95a161fefc | 159 | } |
dallas1287 | 0:7d95a161fefc | 160 | btflag = false; |
dallas1287 | 0:7d95a161fefc | 161 | |
dallas1287 | 0:7d95a161fefc | 162 | if(fantimerflag) |
dallas1287 | 0:7d95a161fefc | 163 | { |
dallas1287 | 0:7d95a161fefc | 164 | fantimer.start(); |
dallas1287 | 0:7d95a161fefc | 165 | } |
dallas1287 | 0:7d95a161fefc | 166 | else |
dallas1287 | 0:7d95a161fefc | 167 | { |
dallas1287 | 0:7d95a161fefc | 168 | fantimer.stop(); |
dallas1287 | 0:7d95a161fefc | 169 | fan_session = fantimer.read(); //reads the session time |
dallas1287 | 0:7d95a161fefc | 170 | fan_total += fan_session; // accumulates to total time |
dallas1287 | 0:7d95a161fefc | 171 | fantimer.reset(); |
dallas1287 | 0:7d95a161fefc | 172 | } |
dallas1287 | 0:7d95a161fefc | 173 | |
dallas1287 | 0:7d95a161fefc | 174 | if(ledtimerflag) |
dallas1287 | 0:7d95a161fefc | 175 | { |
dallas1287 | 0:7d95a161fefc | 176 | ledtimer.start(); |
dallas1287 | 0:7d95a161fefc | 177 | } |
dallas1287 | 0:7d95a161fefc | 178 | else |
dallas1287 | 0:7d95a161fefc | 179 | { |
dallas1287 | 0:7d95a161fefc | 180 | ledtimer.stop(); |
dallas1287 | 0:7d95a161fefc | 181 | led_session = ledtimer.read(); //reads the session time |
dallas1287 | 0:7d95a161fefc | 182 | led_total += led_session; // accumulates to total time |
dallas1287 | 0:7d95a161fefc | 183 | ledtimer.reset(); |
dallas1287 | 0:7d95a161fefc | 184 | } |
dallas1287 | 0:7d95a161fefc | 185 | } |
dallas1287 | 0:7d95a161fefc | 186 | } |
dallas1287 | 0:7d95a161fefc | 187 | void TimerRead() |
dallas1287 | 0:7d95a161fefc | 188 | { |
dallas1287 | 0:7d95a161fefc | 189 | pc.printf("LED Session Time: %d", led_session); |
dallas1287 | 0:7d95a161fefc | 190 | pc.printf("\r\nTotal LED Time: %d\r\n", led_total); |
dallas1287 | 0:7d95a161fefc | 191 | pc.printf("Fan Session Time: %d", fan_session); |
dallas1287 | 0:7d95a161fefc | 192 | pc.printf("\r\nTotal Fan Time: %d\r\n", fan_total); |
dallas1287 | 0:7d95a161fefc | 193 | } |
dallas1287 | 0:7d95a161fefc | 194 | |
dallas1287 | 0:7d95a161fefc | 195 | void MotionSense() |
dallas1287 | 0:7d95a161fefc | 196 | { |
dallas1287 | 0:7d95a161fefc | 197 | HC05.puts("Motion Sensor Initializing..."); |
dallas1287 | 0:7d95a161fefc | 198 | ledbounce(); |
dallas1287 | 0:7d95a161fefc | 199 | HC05.puts("Enabled."); |
dallas1287 | 0:7d95a161fefc | 200 | motionsensor.enable_irq(); |
dallas1287 | 0:7d95a161fefc | 201 | } |
dallas1287 | 0:7d95a161fefc | 202 | |
dallas1287 | 0:7d95a161fefc | 203 | void SecurityEnable() |
dallas1287 | 0:7d95a161fefc | 204 | { |
dallas1287 | 0:7d95a161fefc | 205 | HC05.puts("Security Initializing..."); |
dallas1287 | 0:7d95a161fefc | 206 | ledbounce(); |
dallas1287 | 0:7d95a161fefc | 207 | HC05.puts("Enabled."); |
dallas1287 | 0:7d95a161fefc | 208 | motionsensor.enable_irq(); |
dallas1287 | 0:7d95a161fefc | 209 | } |
dallas1287 | 0:7d95a161fefc | 210 | |
dallas1287 | 0:7d95a161fefc | 211 | void SecurityCam() |
dallas1287 | 0:7d95a161fefc | 212 | { |
dallas1287 | 0:7d95a161fefc | 213 | securitycam = 1; |
dallas1287 | 0:7d95a161fefc | 214 | wait_ms(50); |
dallas1287 | 0:7d95a161fefc | 215 | securitycam = 0; |
dallas1287 | 0:7d95a161fefc | 216 | } |
dallas1287 | 0:7d95a161fefc | 217 | |
dallas1287 | 0:7d95a161fefc | 218 | void motiontrigger() |
dallas1287 | 0:7d95a161fefc | 219 | { |
dallas1287 | 0:7d95a161fefc | 220 | led = 0; |
dallas1287 | 0:7d95a161fefc | 221 | //security mode sends pulse to start python script |
dallas1287 | 0:7d95a161fefc | 222 | if(securityflag) |
dallas1287 | 0:7d95a161fefc | 223 | { |
dallas1287 | 0:7d95a161fefc | 224 | SecurityCam(); |
dallas1287 | 0:7d95a161fefc | 225 | securityflag = false; //resets flag |
dallas1287 | 0:7d95a161fefc | 226 | } |
dallas1287 | 0:7d95a161fefc | 227 | else |
dallas1287 | 0:7d95a161fefc | 228 | motionTimeout.attach(&motionTimeOut,10.0); |
dallas1287 | 0:7d95a161fefc | 229 | } |
dallas1287 | 0:7d95a161fefc | 230 | |
dallas1287 | 0:7d95a161fefc | 231 | void motionTimeOut() |
dallas1287 | 0:7d95a161fefc | 232 | { |
dallas1287 | 0:7d95a161fefc | 233 | led = 1; //led off; |
dallas1287 | 0:7d95a161fefc | 234 | } |
dallas1287 | 0:7d95a161fefc | 235 | |
dallas1287 | 0:7d95a161fefc | 236 | void ledbounce() |
dallas1287 | 0:7d95a161fefc | 237 | { |
dallas1287 | 0:7d95a161fefc | 238 | for( int i = 0; i < 20; i++) |
dallas1287 | 0:7d95a161fefc | 239 | { |
dallas1287 | 0:7d95a161fefc | 240 | led = led ^1; |
dallas1287 | 0:7d95a161fefc | 241 | wait_ms(100); |
dallas1287 | 0:7d95a161fefc | 242 | } |
dallas1287 | 0:7d95a161fefc | 243 | led = 1; |
dallas1287 | 0:7d95a161fefc | 244 | } |
dallas1287 | 0:7d95a161fefc | 245 | |
dallas1287 | 0:7d95a161fefc | 246 | |
dallas1287 | 0:7d95a161fefc | 247 | /*#include "mbed.h" |
dallas1287 | 0:7d95a161fefc | 248 | #include "EthernetInterface.h" |
dallas1287 | 0:7d95a161fefc | 249 | #include "M2XStreamClient.h" |
dallas1287 | 0:7d95a161fefc | 250 | #include "MODSERIAL.h" |
dallas1287 | 0:7d95a161fefc | 251 | |
dallas1287 | 0:7d95a161fefc | 252 | //function declaration |
dallas1287 | 0:7d95a161fefc | 253 | void TimerRead(void); |
dallas1287 | 0:7d95a161fefc | 254 | void MotionSense(void); |
dallas1287 | 0:7d95a161fefc | 255 | void motiontrigger(void); |
dallas1287 | 0:7d95a161fefc | 256 | void ledbounce(void); |
dallas1287 | 0:7d95a161fefc | 257 | void RxRead(void); |
dallas1287 | 0:7d95a161fefc | 258 | void motionTimeOut(void); |
dallas1287 | 0:7d95a161fefc | 259 | void streamData(void); |
dallas1287 | 0:7d95a161fefc | 260 | void SecurityCam(void); |
dallas1287 | 0:7d95a161fefc | 261 | void SecurityEnable(void); |
dallas1287 | 0:7d95a161fefc | 262 | |
dallas1287 | 0:7d95a161fefc | 263 | //bluetooth variables |
dallas1287 | 0:7d95a161fefc | 264 | bool btflag = false; |
dallas1287 | 0:7d95a161fefc | 265 | char received[256] = {""}; |
dallas1287 | 0:7d95a161fefc | 266 | int i = 0; |
dallas1287 | 0:7d95a161fefc | 267 | //led variables |
dallas1287 | 0:7d95a161fefc | 268 | int led_total = 0; |
dallas1287 | 0:7d95a161fefc | 269 | int led_session = 0; |
dallas1287 | 0:7d95a161fefc | 270 | bool ledtimerflag = false; |
dallas1287 | 0:7d95a161fefc | 271 | DigitalOut led(LED_RED); |
dallas1287 | 0:7d95a161fefc | 272 | //fan variables |
dallas1287 | 0:7d95a161fefc | 273 | int fan_total = 0; |
dallas1287 | 0:7d95a161fefc | 274 | int fan_session = 0; |
dallas1287 | 0:7d95a161fefc | 275 | bool fantimerflag = false; |
dallas1287 | 0:7d95a161fefc | 276 | PwmOut fan(D3); |
dallas1287 | 0:7d95a161fefc | 277 | //Motion Sensor Variables |
dallas1287 | 0:7d95a161fefc | 278 | InterruptIn motionsensor(D2); |
dallas1287 | 0:7d95a161fefc | 279 | DigitalOut motionsensorpwr(D1, 0); |
dallas1287 | 0:7d95a161fefc | 280 | //Motion Sensor Timeout |
dallas1287 | 0:7d95a161fefc | 281 | Timeout motionTimeout; |
dallas1287 | 0:7d95a161fefc | 282 | //Timers Initialization |
dallas1287 | 0:7d95a161fefc | 283 | Timer ledtimer; |
dallas1287 | 0:7d95a161fefc | 284 | Timer fantimer; |
dallas1287 | 0:7d95a161fefc | 285 | // Initialize Serial port |
dallas1287 | 0:7d95a161fefc | 286 | Serial pc(USBTX, USBRX); |
dallas1287 | 0:7d95a161fefc | 287 | //bluetooth module declaration |
dallas1287 | 0:7d95a161fefc | 288 | MODSERIAL HC05(PTC15, PTC14); |
dallas1287 | 0:7d95a161fefc | 289 | //security camera |
dallas1287 | 0:7d95a161fefc | 290 | //DigitalOut securitycam(D5, 0); |
dallas1287 | 0:7d95a161fefc | 291 | bool securityflag = false; |
dallas1287 | 0:7d95a161fefc | 292 | |
dallas1287 | 0:7d95a161fefc | 293 | int ret; |
dallas1287 | 0:7d95a161fefc | 294 | // Set Sensor Stream details |
dallas1287 | 0:7d95a161fefc | 295 | char deviceId[] = "56429e7da76e7b0d282164231db3446e"; // Device you want to push to |
dallas1287 | 0:7d95a161fefc | 296 | char streamtime[] = "Time"; // Stream you want to push to |
dallas1287 | 0:7d95a161fefc | 297 | char streamfan[] = "Fan_Time"; |
dallas1287 | 0:7d95a161fefc | 298 | char m2xKey[] = "3f3543d74e384a4c94d71729ffee9277"; // Your M2X API Key or Master API Key |
dallas1287 | 0:7d95a161fefc | 299 | // Initialize the M2X client |
dallas1287 | 0:7d95a161fefc | 300 | Client client; |
dallas1287 | 0:7d95a161fefc | 301 | M2XStreamClient m2xClient(&client, m2xKey); |
dallas1287 | 0:7d95a161fefc | 302 | Ticker streamticker; |
dallas1287 | 0:7d95a161fefc | 303 | |
dallas1287 | 0:7d95a161fefc | 304 | void rxinterrupt(MODSERIAL_IRQ_INFO *q) |
dallas1287 | 0:7d95a161fefc | 305 | { |
dallas1287 | 0:7d95a161fefc | 306 | btflag = true; |
dallas1287 | 0:7d95a161fefc | 307 | return; |
dallas1287 | 0:7d95a161fefc | 308 | } |
dallas1287 | 0:7d95a161fefc | 309 | |
dallas1287 | 0:7d95a161fefc | 310 | int main() |
dallas1287 | 0:7d95a161fefc | 311 | { |
dallas1287 | 0:7d95a161fefc | 312 | motionsensor.disable_irq(); |
dallas1287 | 0:7d95a161fefc | 313 | // Intialize Ethernet connection |
dallas1287 | 0:7d95a161fefc | 314 | |
dallas1287 | 0:7d95a161fefc | 315 | EthernetInterface eth; |
dallas1287 | 0:7d95a161fefc | 316 | eth.init(); |
dallas1287 | 0:7d95a161fefc | 317 | eth.connect(); |
dallas1287 | 0:7d95a161fefc | 318 | printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress()); |
dallas1287 | 0:7d95a161fefc | 319 | |
dallas1287 | 0:7d95a161fefc | 320 | |
dallas1287 | 0:7d95a161fefc | 321 | //initialize bluetooth |
dallas1287 | 0:7d95a161fefc | 322 | HC05.baud(9600); |
dallas1287 | 0:7d95a161fefc | 323 | |
dallas1287 | 0:7d95a161fefc | 324 | //attach interrupts |
dallas1287 | 0:7d95a161fefc | 325 | HC05.attach(&rxinterrupt, MODSERIAL::RxIrq); |
dallas1287 | 0:7d95a161fefc | 326 | motionsensor.rise(&motiontrigger); |
dallas1287 | 0:7d95a161fefc | 327 | //streamticker.attach(&streamData,1.0); |
dallas1287 | 0:7d95a161fefc | 328 | |
dallas1287 | 0:7d95a161fefc | 329 | led.write(1); //led initialized to off |
dallas1287 | 0:7d95a161fefc | 330 | |
dallas1287 | 0:7d95a161fefc | 331 | pc.printf("Program Begins."); |
dallas1287 | 0:7d95a161fefc | 332 | while (1) |
dallas1287 | 0:7d95a161fefc | 333 | { |
dallas1287 | 0:7d95a161fefc | 334 | RxRead(); |
dallas1287 | 0:7d95a161fefc | 335 | streamData(); |
dallas1287 | 0:7d95a161fefc | 336 | wait_ms(100); |
dallas1287 | 0:7d95a161fefc | 337 | } |
dallas1287 | 0:7d95a161fefc | 338 | |
dallas1287 | 0:7d95a161fefc | 339 | } |
dallas1287 | 0:7d95a161fefc | 340 | |
dallas1287 | 0:7d95a161fefc | 341 | void streamData() |
dallas1287 | 0:7d95a161fefc | 342 | { |
dallas1287 | 0:7d95a161fefc | 343 | ret = m2xClient.updateStreamValue(deviceId, streamtime, led_total); |
dallas1287 | 0:7d95a161fefc | 344 | pc.printf("send() returned %d\r\n", ret); |
dallas1287 | 0:7d95a161fefc | 345 | ret = m2xClient.updateStreamValue(deviceId, streamfan, fan_total); |
dallas1287 | 0:7d95a161fefc | 346 | pc.printf("send() returned %d\r\n", ret); |
dallas1287 | 0:7d95a161fefc | 347 | } |
dallas1287 | 0:7d95a161fefc | 348 | |
dallas1287 | 0:7d95a161fefc | 349 | void RxRead(void) |
dallas1287 | 0:7d95a161fefc | 350 | { |
dallas1287 | 0:7d95a161fefc | 351 | if(btflag && !HC05.rxBufferEmpty() && HC05.rxGetLastChar() == '#') |
dallas1287 | 0:7d95a161fefc | 352 | { |
dallas1287 | 0:7d95a161fefc | 353 | HC05.move(received, 256); |
dallas1287 | 0:7d95a161fefc | 354 | pc.printf("%c%c%c%c%c",received[0], received[1], received[2],received[3], received[4]); |
dallas1287 | 0:7d95a161fefc | 355 | wait_ms(5); |
dallas1287 | 0:7d95a161fefc | 356 | if(received[0] == 'L') |
dallas1287 | 0:7d95a161fefc | 357 | { |
dallas1287 | 0:7d95a161fefc | 358 | if(received[2] == 'N') |
dallas1287 | 0:7d95a161fefc | 359 | { |
dallas1287 | 0:7d95a161fefc | 360 | led = 0; // toggle led |
dallas1287 | 0:7d95a161fefc | 361 | ledtimerflag = true; |
dallas1287 | 0:7d95a161fefc | 362 | } |
dallas1287 | 0:7d95a161fefc | 363 | else if(received[2] == 'F') |
dallas1287 | 0:7d95a161fefc | 364 | { |
dallas1287 | 0:7d95a161fefc | 365 | led = 1; |
dallas1287 | 0:7d95a161fefc | 366 | ledtimerflag = false; |
dallas1287 | 0:7d95a161fefc | 367 | } |
dallas1287 | 0:7d95a161fefc | 368 | } |
dallas1287 | 0:7d95a161fefc | 369 | else if (received[0] == 'F') |
dallas1287 | 0:7d95a161fefc | 370 | { |
dallas1287 | 0:7d95a161fefc | 371 | if(received[3] == 'H') |
dallas1287 | 0:7d95a161fefc | 372 | { |
dallas1287 | 0:7d95a161fefc | 373 | fan.write(0.99); |
dallas1287 | 0:7d95a161fefc | 374 | fantimerflag = true; |
dallas1287 | 0:7d95a161fefc | 375 | } |
dallas1287 | 0:7d95a161fefc | 376 | else if(received[3] == 'L') |
dallas1287 | 0:7d95a161fefc | 377 | { |
dallas1287 | 0:7d95a161fefc | 378 | fan.write(0.6); |
dallas1287 | 0:7d95a161fefc | 379 | if(!fantimerflag) |
dallas1287 | 0:7d95a161fefc | 380 | fantimerflag = true; |
dallas1287 | 0:7d95a161fefc | 381 | } |
dallas1287 | 0:7d95a161fefc | 382 | else if(received[3] == 'O') |
dallas1287 | 0:7d95a161fefc | 383 | { |
dallas1287 | 0:7d95a161fefc | 384 | fan.write(0.0); |
dallas1287 | 0:7d95a161fefc | 385 | fantimerflag = false; |
dallas1287 | 0:7d95a161fefc | 386 | } |
dallas1287 | 0:7d95a161fefc | 387 | } |
dallas1287 | 0:7d95a161fefc | 388 | else if(received[0] == 'M') |
dallas1287 | 0:7d95a161fefc | 389 | { |
dallas1287 | 0:7d95a161fefc | 390 | if(received[1] == 'R') |
dallas1287 | 0:7d95a161fefc | 391 | { |
dallas1287 | 0:7d95a161fefc | 392 | motionsensor.disable_irq(); |
dallas1287 | 0:7d95a161fefc | 393 | } |
dallas1287 | 0:7d95a161fefc | 394 | else if(received[1] == 'E') |
dallas1287 | 0:7d95a161fefc | 395 | { |
dallas1287 | 0:7d95a161fefc | 396 | led = 1; //led off |
dallas1287 | 0:7d95a161fefc | 397 | fan.write(0.0); //fan off |
dallas1287 | 0:7d95a161fefc | 398 | MotionSense(); |
dallas1287 | 0:7d95a161fefc | 399 | } |
dallas1287 | 0:7d95a161fefc | 400 | } |
dallas1287 | 0:7d95a161fefc | 401 | btflag = false; |
dallas1287 | 0:7d95a161fefc | 402 | |
dallas1287 | 0:7d95a161fefc | 403 | if(fantimerflag) |
dallas1287 | 0:7d95a161fefc | 404 | { |
dallas1287 | 0:7d95a161fefc | 405 | fantimer.start(); |
dallas1287 | 0:7d95a161fefc | 406 | } |
dallas1287 | 0:7d95a161fefc | 407 | else |
dallas1287 | 0:7d95a161fefc | 408 | { |
dallas1287 | 0:7d95a161fefc | 409 | fantimer.stop(); |
dallas1287 | 0:7d95a161fefc | 410 | fan_session = fantimer.read(); //reads the session time |
dallas1287 | 0:7d95a161fefc | 411 | fan_total += fan_session; // accumulates to total time |
dallas1287 | 0:7d95a161fefc | 412 | fantimer.reset(); |
dallas1287 | 0:7d95a161fefc | 413 | } |
dallas1287 | 0:7d95a161fefc | 414 | |
dallas1287 | 0:7d95a161fefc | 415 | if(ledtimerflag) |
dallas1287 | 0:7d95a161fefc | 416 | { |
dallas1287 | 0:7d95a161fefc | 417 | ledtimer.start(); |
dallas1287 | 0:7d95a161fefc | 418 | } |
dallas1287 | 0:7d95a161fefc | 419 | else |
dallas1287 | 0:7d95a161fefc | 420 | { |
dallas1287 | 0:7d95a161fefc | 421 | ledtimer.stop(); |
dallas1287 | 0:7d95a161fefc | 422 | led_session = ledtimer.read(); //reads the session time |
dallas1287 | 0:7d95a161fefc | 423 | led_total += led_session; // accumulates to total time |
dallas1287 | 0:7d95a161fefc | 424 | ledtimer.reset(); |
dallas1287 | 0:7d95a161fefc | 425 | } |
dallas1287 | 0:7d95a161fefc | 426 | } |
dallas1287 | 0:7d95a161fefc | 427 | } |
dallas1287 | 0:7d95a161fefc | 428 | void TimerRead() |
dallas1287 | 0:7d95a161fefc | 429 | { |
dallas1287 | 0:7d95a161fefc | 430 | pc.printf("LED Session Time: %d", led_session); |
dallas1287 | 0:7d95a161fefc | 431 | pc.printf("\r\nTotal LED Time: %d\r\n", led_total); |
dallas1287 | 0:7d95a161fefc | 432 | pc.printf("Fan Session Time: %d", fan_session); |
dallas1287 | 0:7d95a161fefc | 433 | pc.printf("\r\nTotal Fan Time: %d\r\n", fan_total); |
dallas1287 | 0:7d95a161fefc | 434 | } |
dallas1287 | 0:7d95a161fefc | 435 | |
dallas1287 | 0:7d95a161fefc | 436 | void MotionSense() |
dallas1287 | 0:7d95a161fefc | 437 | { |
dallas1287 | 0:7d95a161fefc | 438 | HC05.puts("Motion Sensor Initializing..."); |
dallas1287 | 0:7d95a161fefc | 439 | ledbounce(); |
dallas1287 | 0:7d95a161fefc | 440 | HC05.puts("Enabled."); |
dallas1287 | 0:7d95a161fefc | 441 | motionsensor.enable_irq(); |
dallas1287 | 0:7d95a161fefc | 442 | } |
dallas1287 | 0:7d95a161fefc | 443 | |
dallas1287 | 0:7d95a161fefc | 444 | void motiontrigger() |
dallas1287 | 0:7d95a161fefc | 445 | { |
dallas1287 | 0:7d95a161fefc | 446 | led = 0; |
dallas1287 | 0:7d95a161fefc | 447 | motionTimeout.attach(&motionTimeOut,10.0); |
dallas1287 | 0:7d95a161fefc | 448 | } |
dallas1287 | 0:7d95a161fefc | 449 | |
dallas1287 | 0:7d95a161fefc | 450 | void motionTimeOut() |
dallas1287 | 0:7d95a161fefc | 451 | { |
dallas1287 | 0:7d95a161fefc | 452 | led = 1; //led off; |
dallas1287 | 0:7d95a161fefc | 453 | } |
dallas1287 | 0:7d95a161fefc | 454 | |
dallas1287 | 0:7d95a161fefc | 455 | void ledbounce() |
dallas1287 | 0:7d95a161fefc | 456 | { |
dallas1287 | 0:7d95a161fefc | 457 | for( int i = 0; i < 20; i++) |
dallas1287 | 0:7d95a161fefc | 458 | { |
dallas1287 | 0:7d95a161fefc | 459 | led = led ^1; |
dallas1287 | 0:7d95a161fefc | 460 | wait_ms(100); |
dallas1287 | 0:7d95a161fefc | 461 | } |
dallas1287 | 0:7d95a161fefc | 462 | led = 1; |
dallas1287 | 0:7d95a161fefc | 463 | }*/ |