Bluetooth Low Energy for Smart Plug
Dependencies: BLE_API mbed nRF51822
Fork of SmartPlugBLE by
Diff: SmartPlugBLE.h
- Revision:
- 3:aaa92c61931a
- Parent:
- 2:6db5c9a2894c
- Child:
- 4:721ae30c92f8
--- a/SmartPlugBLE.h Wed Jul 08 07:25:11 2015 +0000 +++ b/SmartPlugBLE.h Mon Jul 13 13:14:34 2015 +0000 @@ -5,63 +5,122 @@ #include "MVC.h" #include "mbed.h" #include "SPCommunication.h" -#include <vector> +#include <vector> class SmartPlugBLE: public Observable { - public: - SmartPlugBLE() +public: + SmartPlugBLE():counter(60),led(LED3,0) + { + ticker.attach(this,&SmartPlugBLE::periodicCallback, 1); // blink LED every second + } + + void onRelayWrite(const uint8_t *data) + { + counter = 60; + updateRelay(data); + notifyObservers(); + } + + void updateRelay(const uint8_t *data) + { + uint8_t state = data[0]>>7; + uint8_t hour = data[0]&0x7F; + uint8_t min = data[1]; + //instant behavior + if(state) { - ticker.attach(this,&SmartPlugBLE::periodicCallback, 1); // blink LED every second - } - - void onRelayWrite(const uint8_t *data) + printf("Open!\r\n"); + led = 0; + } + else if(!state && hour == 0 && min == 0) { - updateRelay(data); - notifyObservers(); + printf("Close!\r\n"); + led = 1; } - - void updateRelay(const uint8_t *data) + // + smartPlug.setRelay(state,hour,min); + } + + void notifyObservers() + { + for(int i=0; i<observers.size(); i++) { - smartPlug.setRelay(data); + observers[i]->updateObserver((void*)&smartPlug); } - - void notifyObservers() - { - for(int i=0;i<observers.size();i++) + } + + void addObserver(Observer* o) + { + observers.push_back(o); + } + + void periodicCallback(void) + { + if(smartPlug.isCounting) + { + counter--; + if(counter > 60) { - observers[i]->updateObserver((void*)&smartPlug); + smartPlug.getRelay()->setMinCounter(smartPlug.getRelay()->getMinCounter()-1); + if(smartPlug.getRelay()->getMinCounter() == 0) + { + smartPlug.getRelay()->setHrCounter(smartPlug.getRelay()->getHrCounter()-1); + smartPlug.getRelay()->setMinCounter(0); + } + if(smartPlug.getRelay()->getHrCounter() >128) + { + smartPlug.getRelay()->setHrCounter(0); + //spComm.setRelay(smartPlug.getRelay()->getState()); + if(smartPlug.getRelay()->getState()) + printf("Open!\r\n"); + else + { + printf("Close!\r\n"); + led = 1; + smartPlug.isCounting = false; + } + } + counter = 60; } } - - void addObserver(Observer* o) - { - observers.push_back(o); - } - - void periodicCallback(void) - { - //led1 = !led1; /* Do blinky on LED1 while we're waiting for BLE events */ - } - - void updateData(void) - { - smartPlug.setVoltage(smartPlug.getVoltage()+1);//(spComm.getVoltage()); - smartPlug.setCurrent(smartPlug.getCurrent()+1);//(spComm.getCurrent()); - smartPlug.setPower(smartPlug.getPower()+1);//(spComm.getPower()); - smartPlug.setPowerFactor(smartPlug.getPowerFactor()+1);//(spComm.getPowerFactor()); - smartPlug.setEnergy(smartPlug.getEnergy()+1); - notifyObservers(); - } - - private: - SmartPlug smartPlug; - Ticker ticker; - //DigitalOut led1; - SPCommunication spComm; - //BLECommunication bleComm; - vector<Observer*> observers; + else + counter = 60; + } + + void updateData(void) { + smartPlug.setVoltage/*(smartPlug.getVoltage()+1);*/(spComm.getVoltage()); + smartPlug.setCurrent/*(smartPlug.getCurrent()+1);*/(spComm.getCurrent()); + smartPlug.setPower/*(smartPlug.getPower()+1);*/(spComm.getPower()); + smartPlug.setPowerFactor/*(smartPlug.getPowerFactor()+1);*/(spComm.getPowerFactor()); + smartPlug.setEnergy/*(smartPlug.getEnergy()+1);*/(spComm.getEnergy()); + //smartPlug.getRelay()->setState(spComm.getRelay()); + notifyObservers(); + } + + SmartPlug getSmartPlug() + { + return smartPlug; + } + + uint8_t getCounter() + { + return counter; + } + + void setCounter(uint8_t val) + { + counter = val; + } +private: + SmartPlug smartPlug; + Ticker ticker; + uint8_t counter; + DigitalOut led; + SPCommunication spComm; + //BLECommunication bleComm; + vector<Observer*> observers; }; #endif \ No newline at end of file