
This is a simple home automation system which communicates with a Bluetooth app to control home systems such as HVAC and lighting. This was done for El-Sharkaway's ECE595 Class
Dependencies: DHT EthernetInterface M2XStreamClient Servo jsonlite mbed-rtos mbed nRF24L01P
Fork of nRF24L01P_Hello_World by
Revision 2:19aff72aeb30, committed 2017-05-05
- Comitter:
- haircules
- Date:
- Fri May 05 15:46:14 2017 +0000
- Parent:
- 1:5be2682710c6
- Commit message:
- Home Automation System for IUPUI El-Sharkaway's ECE595 Course
Changed in this revision
diff -r 5be2682710c6 -r 19aff72aeb30 DHT.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/DHT.lib Fri May 05 15:46:14 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/Wimpie/code/DHT/#9b5b3200688f
diff -r 5be2682710c6 -r 19aff72aeb30 EthernetInterface.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/EthernetInterface.lib Fri May 05 15:46:14 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/EthernetInterface/#183490eb1b4a
diff -r 5be2682710c6 -r 19aff72aeb30 M2XStreamClient.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/M2XStreamClient.lib Fri May 05 15:46:14 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/teams/ATT-M2X-team/code/M2XStreamClient/#2610823f7f2e
diff -r 5be2682710c6 -r 19aff72aeb30 Servo.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Servo.lib Fri May 05 15:46:14 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/simon/code/Servo/#36b69a7ced07
diff -r 5be2682710c6 -r 19aff72aeb30 jsonlite.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/jsonlite.lib Fri May 05 15:46:14 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/citrusbyte/code/jsonlite/#807034181e02
diff -r 5be2682710c6 -r 19aff72aeb30 main.cpp --- a/main.cpp Wed Jan 19 23:53:19 2011 +0000 +++ b/main.cpp Fri May 05 15:46:14 2017 +0000 @@ -1,75 +1,820 @@ #include "mbed.h" -#include "nRF24L01P.h" +#include "DHT.h" +#include "nRF24L01P.h" /*RF Module*/ +#include "M2XStreamClient.h" /*AT&T M2X*/ +#include "EthernetInterface.h" /*Ethernet*/ +#include <stdlib.h> +#include <stdio.h> + + + +/*************** Base Board Code **********************/ +/* -- All revisions made by Nigel Leitzell for ECE595 final project -- */ +/* This code allows for communication between the Mobile Board and Bluetooth App */ +/* to the Base Board for Smart Home Automoation. Values logged from sensors will */ +/* be collected and sent to the cloud via Ethernet from the Base Board. The Base */ +/* Board should allow the user to control aspects of their home (i.e. lighting- */ +/* and air temperature). However, only the Mobile Board or Bluetooth App may be- */ +/* used at any one time. Selection of board which assumes control of the Base- */ +/* Board is determined using buttons on the Base Board or the Bluetooth App. */ +/*********************************************************************************/ + +/************************ Definitions ***************************/ +#define PWM_PERIOD 20 +/************** Communications ***************************/ +#define TRANSFER_SIZE 15 +/*********************************************************************************/ -Serial pc(USBTX, USBRX); // tx, rx +/************** Pin Declarations ****************************/ +Serial pc(USBTX, USBRX);// (tx, rx) +Serial TFT_LCD(PTC17, PTC16); // (tx, rx) Serial port for TFT LCD +nRF24L01P my_nrf24l01p (PTD6,PTD7,PTD5,PTD4,PTB20,PTC18);// (mosi, miso, sck, csn, ce, irq) +DigitalOut RED(LED1); +DigitalOut GREEN(LED2);//Mobile Board Control +DigitalOut BLUE(LED3); //Base Board Control +DigitalOut Fan_En(PTD2); //Fan Enable Line +DigitalIn sw2(SW2); //Mobile Board select button +DigitalIn sw3(SW3); //Bluetooth App select button +Serial HC06(PTC15,PTC14);//BT TX,RX (Bluetooth module declaration) +//InterruptIn HC06_Int(PTC14);//Install Interrupt on Rx Pin for Bluetooth Module +//Ticker Timer1; //Timer for updating current temp +PwmOut Fan_PWM(PTD1); +PwmOut Fan_Servo(PTD0); +DHT tempSensor(PTC4,DHT22); + +/*********************************************************************************/ + +/************** Function Prototypes ************************/ +void unpack(int &x,int &y,int &z,char *b); /*unpacketize the buffer*/ +void initEthernet(EthernetInterface eth); /*Initialize Ethernet*/ +void InitBT(void);/*print Bluetooth Stuff*/ +void Rx_Interrupt(void);/*Interrupt Routine for Bluetooth Rx Events*/ +void Timer1_Interrupt(void);/*Function Handler for Timer1*/ +/*********************************************************************************/ + +/************** Globals ***********************/ +/*************** Set Sensor Stream details (AT&T M2X stuff) **********************/ +char deviceId[] = "81c5ecb0ac94aad592ad558ead689321"; // Device you want to push to +char streamX[] = "acc_x"; // Stream you want to push to +char streamY[] ="acc_y"; // Stream you want to push to +char streamZ[] ="acc_z"; // Stream you want to push to +char m2xKey[] = "b2c3795c7022a811a3c4de49095b26ec"; // Your M2X API Key or Master API Key +uint8_t snd[512],rcv[1000];//send and recieve buffer for Bluetooth +/*********************************************************************************/ + +/******************************************************************************/ +/* User Level #define Macros */ +/******************************************************************************/ -nRF24L01P my_nrf24l01p(p5, p6, p7, p8, p9, p10); // mosi, miso, sck, csn, ce, irq +/******************************************************************************/ +/* User Definitions */ +/******************************************************************************/ +#define SECURITY_LIGHTS_ADDR 0x00 +#define INDOOR_LIGHTS_ADDR 0x01 +#define SMART_LIGHT_ADDR 0x02 +#define CUR_TEMP_ADDR 0x03 +#define HEAT_SET_TEMP_ADDR 0x04 +#define COOL_SET_TEMP_ADDR 0x05 +#define HEAT_STATE_ADDR 0x06 +#define COOL_STATE_ADDR 0x07 +#define FAN_STATE_ADDR 0x08 +#define FAN_DIR_UD_ADDR 0x09 +#define FAN_DIR_LR_ADDR 0x0A +#define ARM_STATE_ADDR 0x0B +#define MODE_ADDR 0x0C +#define CONNECTION_STATE_ADDR 0x0D +#define FAN_SPEED_ADDR 0x0E +#define ARDUINO_ADDR 0xFF + +#define CONNECTED 1 //Connection state for bluetooth +#define NUM_OF_EVENTS 15 //Number of events to handle + +typedef struct SmartHomeStruct +{ + bool security_lights_state; + bool indoor_lights_state; + bool smart_light_state; + uint8_t cur_temp; + uint8_t heat_set_temp; + uint8_t cool_set_temp; + bool heat_state; + bool cool_state; + bool fan_state; + uint8_t fan_speed; + uint8_t fan_dir_ud; + uint8_t fan_dir_lr; + bool arm_state; + uint8_t mode; + bool connection_state; +}SmartHome; -DigitalOut myled1(LED1); -DigitalOut myled2(LED2); +typedef union +{ + uint8_t Flags; + struct + { + uint8_t RPF : 1, /* Received Packet Flag set when packet received */ + RAPF : 1, /* Received Address Packet Flag set when address packet received (must be cleared to receive data packet) */ + RDPF : 1, /* Received Data Packet Flag set when data packet received (RAPF must be cleared to receive data packet)*/ + RUT : 1, /* Request Update Temperature Flag set when UpdateCurTemp() is called, cleared once temperature is updated */ + USF : 1, /* Update Servo Flag is set after 20ms period required to send pulse to update position, cleared after 2ms */ + spare2 : 1, /* Unused */ + spare1 : 1, /* Unused */ + spare0 : 1; /* Unused */ + }; +} SmartFlags; + +/*Typedef for function pointer type event_ptr*/ +typedef void (*event_ptr)( uint8_t ); +/*Create event_ptr array of size NUM_OF_EVENTS*/ +event_ptr event_ptr_array[NUM_OF_EVENTS]; + +SmartHome SmartHomeData; //struct for SmartHome Data + +SmartFlags SmartHomeFlags; + +/******************************************************************************/ +/* User Function Prototypes */ +/******************************************************************************/ + +void InitSmartHomeApp(void); /* I/O and Peripheral Initialization */ +void InitBluetoothApp(void); /* Initialize values in the Bluetooth App */ +void InitAppFlags(void); /* Initialize Flags for SmartHome */ +void SecurityLights(uint8_t data); /* Security Lights Handler */ +void IndoorLights(uint8_t data); +void SmartLight(uint8_t data); +void CurrentTemp(uint8_t data); +void HeatSetTemp(uint8_t data); +void CoolSetTemp(uint8_t data); +void HeatState(uint8_t data); +void CoolState(uint8_t data); +void FanState(uint8_t data); +void FanDirUD(uint8_t data); +void FanDirLR(uint8_t data); +void ArmState(uint8_t data); +void Mode(uint8_t data); +void ConnectionState(uint8_t data); +void FanSpeed(uint8_t data); +void UpdateCurTemp(void); +void CheckTempSettings(void); +void SyncLCD(void); +void RefreshServos(void); +void CurrentTemp_LCD(uint8_t data); +void HeatSetTemp_LCD(uint8_t data); +void CoolSetTemp_LCD(uint8_t data); +void HeatState_LCD(uint8_t data); +void CoolState_LCD(uint8_t data); +void FanState_LCD(uint8_t data); int main() { + + uint8_t Address; + uint8_t Data; -// The nRF24L01+ supports transfers from 1 to 32 bytes, but Sparkfun's -// "Nordic Serial Interface Board" (http://www.sparkfun.com/products/9019) -// only handles 4 byte transfers in the ATMega code. -#define TRANSFER_SIZE 4 + InitSmartHomeApp(); + + InitAppFlags(); + + InitBT(); + + SyncLCD(); - char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE]; + /*RF Module (Mobile Board) variables/buffers */ + char txData[TRANSFER_SIZE], rxData[TRANSFER_SIZE];//tx,rx buffers for RF int txDataCnt = 0; int rxDataCnt = 0; - - my_nrf24l01p.powerUp(); - + int x,y,z;/*x,y,z axis variables for Mobile Board Accelerometer Data*/ + + /*Bluetooth variables/buffers*/ + int mode = 1; // Mode 1 for Bluetooth App control + int timer = 0;//Timer for Entering the default control mode + int init = 0; //determine whether mode has been initialized (1 yes, 0 no) + + RED=GREEN=BLUE=1; //LEDs are off + + //my_nrf24l01p.powerUp();/*Power Up RF module*/ + // Display the (default) setup of the nRF24L01+ chip - pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); - pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); - pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); - pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); - pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); + //pc.printf( "nRF24L01+ Frequency : %d MHz\r\n", my_nrf24l01p.getRfFrequency() ); + //pc.printf( "nRF24L01+ Output power : %d dBm\r\n", my_nrf24l01p.getRfOutputPower() ); + //pc.printf( "nRF24L01+ Data Rate : %d kbps\r\n", my_nrf24l01p.getAirDataRate() ); + //pc.printf( "nRF24L01+ TX Address : 0x%010llX\r\n", my_nrf24l01p.getTxAddress() ); + //pc.printf( "nRF24L01+ RX Address : 0x%010llX\r\n", my_nrf24l01p.getRxAddress() ); - pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n", TRANSFER_SIZE ); + //pc.printf( "Type keys to test transfers:\r\n (transfers are grouped into %d characters)\r\n\n\n", TRANSFER_SIZE ); - my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); - - my_nrf24l01p.setReceiveMode(); - my_nrf24l01p.enable(); - - while (1) { - - // If we've received anything over the host serial link... - if ( pc.readable() ) { - - // ...add it to the transmit buffer - txData[txDataCnt++] = pc.getc(); + /* Initialize RF Module */ + //my_nrf24l01p.setTransferSize( TRANSFER_SIZE ); + //my_nrf24l01p.setReceiveMode(); + //my_nrf24l01p.enable(); + + /* Intialize Ethernet connection*/ + //EthernetInterface eth; + //initEthernet(eth); + + /* Initialize the M2X client */ + //Client client; + //M2XStreamClient m2xClient(&client, m2xKey); + + pc.printf( "Preparing to startup..\r\n"); + + //Timer1.attach(&Timer1_Interrupt, 10); //Service Timer1_Int every 1 sec + + uint32_t tempCounter = 0; + + while(1) + { + /*If byte(s) available to read from HC06*/ + if(HC06.readable()) + { + Rx_Interrupt(); + } + + /* If packet has been received, handle it*/ + if(SmartHomeFlags.RPF) + { + /*Assumptions: Bluetooth App will only send 2 bytes at a time (Address + Data)*/ + Address = rcv [0]; + Data = rcv [1]; + + event_ptr_array[Address](Data); //call the appropriate function passing it data + + SmartHomeFlags.RPF = 0; // Clear received packet flag + //HC06_Int.enable_irq(); //Enable UART RX interrupt + } + + tempCounter++; + + } + + }/*end main()*/ - // If the transmit buffer is full - if ( txDataCnt >= sizeof( txData ) ) { - - // Send the transmitbuffer via the nRF24L01+ - my_nrf24l01p.write( NRF24L01P_PIPE_P0, txData, txDataCnt ); +void unpack(int &x,int &y,int &z,char *b){ +/*This function is resposible for unpacketizing a buffer +that has been transmitted wirelessly by distributing data to variables +passed by reference appropriately.*/ + + char buffer[5];/*buffer used to unpack data from packet*/ + + for(int i = 0; i < TRANSFER_SIZE; i++){ + + buffer[i%5] = b[i]; + + + if(i == 4){/*buffer contains x*/ + + x = atoi(buffer); + + } + else if(i == 9){/*buffer contains y*/ + + y = atoi(buffer); + + } + else if(i == 14){/*buffer contains z*/ + + z = atoi(buffer); + + }/*end if*/ + }/*end for*/ +}/*end unpack()*/ - txDataCnt = 0; - } +void initEthernet(EthernetInterface eth){ +/*This function handles the ethernet initialization upon being passed a +pointer to an EthernetInterface object*/ + + eth.init();/*initialize DHCP*/ + + printf("Initialized DHCP! Preparing to connect...\r\n"); + + eth.connect();/*connect eth to internet*/ + + printf("Success. Connected!. Device IP Address is %s\r\n", eth.getIPAddress()); + +}/*end initEthernet()*/ - // Toggle LED1 (to help debug Host -> nRF24L01+ communication) - myled1 = !myled1; - } +void InitBT(void) +{ + /*Attach Interrupt for Rx Events to HC06 Bluetooth Module*/ + //HC06.attach(&Rx_Interrupt, Serial::RxIrq); + + //HC06_Int.fall(&Rx_Interrupt); + //HC06_Int.enable_irq(); + +}/*end initBT()*/ - // If we've received anything in the nRF24L01+... - if ( my_nrf24l01p.readable() ) { - - // ...read the data into the receive buffer - rxDataCnt = my_nrf24l01p.read( NRF24L01P_PIPE_P0, rxData, sizeof( rxData ) ); - - // Display the receive buffer contents via the host serial link - for ( int i = 0; rxDataCnt > 0; rxDataCnt--, i++ ) { - - pc.putc( rxData[i] ); - } - - // Toggle LED2 (to help debug nRF24L01+ -> Host communication) - myled2 = !myled2; +/*Function Handler for HC06 Rx Interrupts*/ +void Rx_Interrupt(void) +{ + /*Temporarily Disable Rx Interrupts*/ + //HC06_Int.disable_irq(); + + SmartHomeFlags.RPF = 1; //Set received packet flag + + char buffer[100]; + char address[10]; + char data[10]; + char c; + uint8_t t_address = 0; + uint8_t t_data = 0; + uint8_t index = 0; + uint8_t num_index = 0; + uint8_t eCount = 0; + + memset(buffer, 0, sizeof(buffer));/*flush buffer*/ + memset(address, 0, sizeof(address));/*flush buffer*/ + memset(data, 0, sizeof(data));/*flush buffer*/ + + HC06.gets(buffer,100);/*if so, get it.*/ + + + /*Parse buffer*/ + c = buffer[index]; + + while(c != '\n') + { + index++; + c = buffer[index]; + + if(c == '=') + { + eCount++; //equal sign count++ + + index += 2; //skip space + + c = buffer[index]; //get data + + while(c != ' ') + { + if(eCount == 1) + { + address[num_index] = c; //fill num buffer + + } + else if(eCount == 2) + { + data[num_index] = c; + } + + num_index++; + index++; + c = buffer[index];//get next char + } + + num_index = 0; //reset num_index } } + + /*Assign ASCII representation to integer representation*/ + + sscanf(address, "%d", &t_address); + sscanf(data, "%d", &t_data); + + rcv[0] = t_address; + rcv[1] = t_data; + + //pc.puts(address); + //pc.printf("\n\r"); + //pc.puts(data); + //pc.printf("\n\r"); + //pc.puts(buffer); + //pc.printf("\n\r"); + + pc.printf( "Address: %d \r\n",rcv[0]); + pc.printf( "Data: %d \r\n",rcv[1]); } + +void Timer1_Interrupt(void) +{ + pc.printf("Checking Temp..\n\r"); + + UpdateCurTemp(); + + /*Update Values on App and LCD*/ + CurrentTemp(SmartHomeData.cur_temp); + + pc.printf("Done..\n\r"); +} + +/******************************************************************************/ +/* User Functions */ +/******************************************************************************/ + +void InitSmartHomeApp() +{ + + /*Initialize variables*/ + SmartHomeData.security_lights_state = 0; //Initial security lights state + SmartHomeData.indoor_lights_state = 0; //Initial indoor lights state + SmartHomeData.smart_light_state = 0; //Initial SmartLight state + SmartHomeData.cur_temp = 0; //Initial current temperature + SmartHomeData.heat_set_temp = 80; //Initial heat set temperature + SmartHomeData.cool_set_temp = 55; //Initial cool set temperature + SmartHomeData.heat_state = 0; //Initial heat state + SmartHomeData.cool_state = 0; //Initial cool state + SmartHomeData.fan_state = 0; //Initial fan state + SmartHomeData.fan_speed = 0; //Initial fan speed + SmartHomeData.fan_dir_ud = 0; //Initial up/down fan direction + SmartHomeData.fan_dir_lr = 0; //Initial left/right fan direction + SmartHomeData.arm_state = 0; //Initial arm state + SmartHomeData.mode = 0; //Initial mode + SmartHomeData.connection_state = 0; //Initial bluetooth connection state + + /*Initialize Function Pointers*/ + event_ptr_array[0] = SecurityLights; + event_ptr_array[1] = IndoorLights; + event_ptr_array[2] = SmartLight; + event_ptr_array[3] = CurrentTemp; + event_ptr_array[4] = HeatSetTemp; + event_ptr_array[5] = CoolSetTemp; + event_ptr_array[6] = HeatState; + event_ptr_array[7] = CoolState; + event_ptr_array[8] = FanState; + event_ptr_array[9] = FanDirUD; + event_ptr_array[10] = FanDirLR; + event_ptr_array[11] = ArmState; + event_ptr_array[12] = Mode; + event_ptr_array[13] = ConnectionState; + event_ptr_array[14] = FanSpeed; + + /************** Port Direction Setup ********************/ + + /************ Initialize peripherals ******************/ + + Fan_PWM.period_ms(PWM_PERIOD); + FanSpeed(SmartHomeData.fan_speed); + Fan_En = SmartHomeData.fan_state; + + Fan_Servo.period_ms(PWM_PERIOD); + Fan_Servo.pulsewidth_us((SmartHomeData.fan_dir_lr * 20) + 500 ); + //Green_Led = 0; //(Off) + //Red_Led = 0; //(Off) + //Heat_LED = 0; //(Off) + //Cool_LED = 0; //(Off) + //TRIP_EN = 0; //(Off) + + /***************** Enable Interrupts *******************/ + + /************ Initialize SmartHome Data ****************/ + UpdateCurTemp(); + +} + +void InitBluetoothApp() +/*This function synchronizes the SmartHome device + and SmartHome Bluetooth App*/ +{ + /*Send Security Lights State*/ + HC06.putc(SECURITY_LIGHTS_ADDR); + HC06.putc(SmartHomeData.security_lights_state); + + /*Send Indoor Lights State*/ + HC06.putc(INDOOR_LIGHTS_ADDR); + HC06.putc(SmartHomeData.indoor_lights_state); + + /*Send SmartLight State*/ + HC06.putc(SMART_LIGHT_ADDR); + HC06.putc(SmartHomeData.smart_light_state); + + /*Send Current Temperature*/ + HC06.putc(CUR_TEMP_ADDR); + HC06.putc(SmartHomeData.cur_temp); + + /*Send Heat Set Temperature*/ + HC06.putc(HEAT_SET_TEMP_ADDR); + HC06.putc(SmartHomeData.heat_set_temp); + + /*Send Cool Set Temperature*/ + HC06.putc(COOL_SET_TEMP_ADDR); + HC06.putc(SmartHomeData.cool_set_temp); + + /*Send Heat State*/ + HC06.putc(HEAT_STATE_ADDR); + HC06.putc(SmartHomeData.heat_state); + + /*Send Cool State*/ + HC06.putc(COOL_STATE_ADDR); + HC06.putc(SmartHomeData.cool_state); + + /*Send Fan State*/ + HC06.putc(FAN_STATE_ADDR); + HC06.putc(SmartHomeData.fan_state); + + /*Send Fan Speed*/ + HC06.putc(FAN_SPEED_ADDR); + HC06.putc(SmartHomeData.fan_speed); + + /*Send Fan Up/Down Direction*/ + HC06.putc(FAN_DIR_UD_ADDR); + HC06.putc(SmartHomeData.fan_dir_ud); + + /*Send Fan Left/Right Direction*/ + HC06.putc(FAN_DIR_LR_ADDR); + HC06.putc(SmartHomeData.fan_dir_lr); + + /*Send Arm State*/ + HC06.putc(ARM_STATE_ADDR); + HC06.putc(SmartHomeData.arm_state); + + /*Send Mode*/ + HC06.putc(MODE_ADDR); + HC06.putc(SmartHomeData.mode); + +} + +void InitAppFlags() +{ + SmartHomeFlags.Flags = 0x00; // Clear All Flags +} + +void SecurityLights(uint8_t data) +{ + SmartHomeData.security_lights_state = data; + + if(SmartHomeData.security_lights_state == 1) + { + GREEN = 0; //ON + } + else + { + GREEN = 1; //OFF + } + +} +void IndoorLights(uint8_t data) +{ + SmartHomeData.indoor_lights_state = data; + + if(SmartHomeData.indoor_lights_state == 1) + { + BLUE = 0; //ON + } + else + { + BLUE = 1; //OFF + } + +} +void SmartLight(uint8_t data) +{ + SmartHomeData.smart_light_state = data; + + if(SmartHomeData.smart_light_state == 1) + { + RED = 0; //ON + } + else + { + RED = 1; //OFF + } +} +void CurrentTemp(uint8_t data) +{ + SmartHomeData.cur_temp = data; + + /*Send Current Temperature to App*/ + HC06.putc(CUR_TEMP_ADDR); + HC06.putc(SmartHomeData.cur_temp); + + /*Send Current Temperature to LCD*/ + CurrentTemp_LCD(SmartHomeData.cur_temp); +} +void HeatSetTemp(uint8_t data) +{ + SmartHomeData.heat_set_temp = data; + + HeatSetTemp_LCD(SmartHomeData.heat_set_temp); +} +void CoolSetTemp(uint8_t data) +{ + SmartHomeData.cool_set_temp = data; + + CoolSetTemp_LCD(SmartHomeData.cool_set_temp); +} +void HeatState(uint8_t data) +{ + SmartHomeData.heat_state = data; + + HeatState_LCD(SmartHomeData.heat_state); +} +void CoolState(uint8_t data) +{ + SmartHomeData.cool_state = data; + + CoolState_LCD(SmartHomeData.cool_state); +} +void FanState(uint8_t data) +{ + /*Turn fan on*/ + if(data == 1) + { + SmartHomeData.fan_state = 1; //Set Fan State + Fan_En = SmartHomeData.fan_state;//Turn Fan On + } + /*Turn fan off*/ + else + { + SmartHomeData.fan_state = 0; //Set Fan State + Fan_En = SmartHomeData.fan_state;//Turn Fan Off + } + + FanState_LCD(SmartHomeData.fan_state); +} +void FanDirUD(uint8_t data) +{ + SmartHomeData.fan_dir_ud = data; +} +void FanDirLR(uint8_t data) +{ + SmartHomeData.fan_dir_lr = data; + + Fan_Servo.pulsewidth_us((SmartHomeData.fan_dir_lr * 20) + 500 ); + +} +void ArmState(uint8_t data) +{ + SmartHomeData.arm_state = data; +} + +void Mode(uint8_t data) +{ + SmartHomeData.mode = data; +} + +void ConnectionState(uint8_t data) +{ + SmartHomeData.connection_state = ((bool)data); + + if(SmartHomeData.connection_state == (!CONNECTED)) + { + SmartHomeData.connection_state = CONNECTED; + + HC06.putc(CONNECTION_STATE_ADDR); + HC06.putc(SmartHomeData.connection_state); + + InitBluetoothApp(); + } +} + +void FanSpeed(uint8_t data) +{ + /*Low Speed*/ + if(data == 0) + { + Fan_PWM.pulsewidth_ms(PWM_PERIOD >> 2); //25% Duty Cycle + } + /*Medium Speed*/ + else if(data == 1) + { + Fan_PWM.pulsewidth_ms(PWM_PERIOD >> 1); //50% Duty Cycle + } + /*High Speed*/ + else if(data == 2) + { + Fan_PWM.pulsewidth_ms((PWM_PERIOD >> 2) + (PWM_PERIOD >> 1)); //75% Duty Cycle + } + /*Ultra-High Speed*/ + else + { + Fan_PWM.pulsewidth_ms(PWM_PERIOD); //100% Duty Cycle + } +} + +void UpdateCurTemp(void) +{ + SmartHomeFlags.RUT = 1; //Set Request Update Temperature Flag + + //int error = 0; + + /*Wait for tempSensor data to be ready*/ + //error = tempSensor.readData(); + //while(0 != error) + //{ + // error = tempSensor.readData(); + //} + + //SmartHomeData.cur_temp = (int)tempSensor.ReadTemperature(FARENHEIT); +} + +void CheckTempSettings(void) +{ + /*If Heat State is On*/ + if(SmartHomeData.heat_state == 1) + { + /*Turn on heat if current temp is below Heat Setting*/ + if(SmartHomeData.cur_temp < SmartHomeData.heat_set_temp) + { + //Turn on Heat(Red LED) + //Heat_LED = 1; + } + else + { + //Heat_LED = 0; + } + + //Cool_LED = 0; + } + /*If Cool Sate is On*/ + else if(SmartHomeData.cool_state == 1) + { + /*Turn on cool if current temp is above Cool Setting*/ + if(SmartHomeData.cur_temp > SmartHomeData.cool_set_temp) + { + //Turn on Cool (Blue LED) + //Cool_LED = 1; + } + else + { + //Cool_LED = 0; + } + + //Heat_LED = 0; + } + /*Heat and Cool are off, turn off LED's*/ + else + { + //Heat_LED = 0; + //Cool_LED = 0; + } +} + +void SyncLCD(void) +{ + /*Sync All Data*/ + CurrentTemp_LCD(SmartHomeData.cur_temp); + //wait_us(10); + HeatSetTemp_LCD(SmartHomeData.heat_set_temp); + //wait_us(10); + CoolSetTemp_LCD(SmartHomeData.cool_set_temp); + //wait_us(10); + HeatState_LCD(SmartHomeData.heat_state); + //wait_us(10); + CoolState_LCD(SmartHomeData.cool_state); + //wait_us(10); + FanState_LCD(SmartHomeData.fan_state); +} + +void RefreshServos(void) +{ + /*wait should be between 500us - 2500us*/ + /*500us (-90 degree position)*/ + /*1500us ( 0 degree position)*/ + /*2500us ( 90 degree position)*/ + + //set pins high + //LR_SERVO = 1; + + //wait 500-2500us + //wait_us((SmartHomeData.fan_dir_lr*20) + 500); + + //set pins low + //LR_SERVO = 0; +} + +void CurrentTemp_LCD(uint8_t data) +{ + /*Update LCD*/ + TFT_LCD.putc(2); + TFT_LCD.putc(CUR_TEMP_ADDR); + TFT_LCD.putc(SmartHomeData.cur_temp); +} + +void HeatSetTemp_LCD(uint8_t data) +{ + /*Update LCD*/ + TFT_LCD.putc(2); + TFT_LCD.putc(HEAT_SET_TEMP_ADDR); + TFT_LCD.putc(SmartHomeData.heat_set_temp); +} + +void CoolSetTemp_LCD(uint8_t data) +{ + /*Update LCD*/ + TFT_LCD.putc(2); + TFT_LCD.putc(COOL_SET_TEMP_ADDR); + TFT_LCD.putc(SmartHomeData.cool_set_temp); +} + +void HeatState_LCD(uint8_t data) +{ + /*Update LCD*/ + TFT_LCD.putc(2); + TFT_LCD.putc(HEAT_STATE_ADDR); + TFT_LCD.putc(SmartHomeData.heat_state); +} + +void CoolState_LCD(uint8_t data) +{ + /*Update LCD*/ + TFT_LCD.putc(2); + TFT_LCD.putc(COOL_STATE_ADDR); + TFT_LCD.putc(SmartHomeData.cool_state); +} + +void FanState_LCD(uint8_t data) +{ + /*Update LCD*/ + TFT_LCD.putc(2); + TFT_LCD.putc(FAN_STATE_ADDR); + TFT_LCD.putc(SmartHomeData.fan_state); +}
diff -r 5be2682710c6 -r 19aff72aeb30 mbed-rtos.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed-rtos.lib Fri May 05 15:46:14 2017 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/mbed_official/code/mbed-rtos/#58563e6cba1e
diff -r 5be2682710c6 -r 19aff72aeb30 mbed.bld --- a/mbed.bld Wed Jan 19 23:53:19 2011 +0000 +++ b/mbed.bld Fri May 05 15:46:14 2017 +0000 @@ -1,1 +1,1 @@ -http://mbed.org/users/mbed_official/code/mbed/builds/e2ac27c8e93e +http://mbed.org/users/mbed_official/code/mbed/builds/9bcdf88f62b0 \ No newline at end of file