ECE533 project

Dependencies:   EthernetInterface M2XStreamClient MODSERIAL jsonlite mbed-rtos mbed

Committer:
dallas1287
Date:
Fri Dec 08 17:20:10 2017 +0000
Revision:
0:7d95a161fefc
updated for usage;

Who changed what in which revision?

UserRevisionLine numberNew 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 }