RX for Temperature Controlled Fan

Dependencies:   4DGL-uLCD-SE EthernetInterface HTTPClient Motor mbed-rtos mbed

main.cpp

Committer:
TimothyY
Date:
2016-04-29
Revision:
0:b007e0de7dbc

File content as of revision 0:b007e0de7dbc:

#include "mbed.h"
#include "rtos.h"
#include "Motor.h"
#include "uLCD_4DGL.h"
#include "EthernetInterface.h"
#include "HTTPClient.h"
 
#define Room_TempC 23.0
#define Room_TempF 78.0
//#define Normal_BTempC 30.0
#define Normal_BTempF ((9.0/5.0)*Normal_BTempC) + 32
 
Motor m(p21, p19, p20); // pwm, fwd, rev 
  
DigitalOut myled(LED1);
DigitalOut myLED2(LED2);
DigitalOut myLED3(LED3);
DigitalOut myLED4(LED4);

InterruptIn pb1(p30);
InterruptIn pb2(p29);

uLCD_4DGL uLCD(p13,p14,p11);
 
Serial pc(USBTX, USBRX);
Serial xbee1(p9, p10); 
DigitalOut rst1(p8);

EthernetInterface ethif;
HTTPClient http;
 
enum Statetype { ac_off = 0, ac_on };
volatile int sensor_data; 
volatile int Normal_BTempC = 30;
 
void receiver_thread(void const * argument){
    
    rst1 = 0;   //Set reset pin to 0
    myled = 0;
    Thread::wait(1);
    rst1 = 1;   //Set reset pin to 1
    Thread::wait(1);
    
    uLCD.printf("Set Temp:");
    uLCD.locate(0,7);
    uLCD.printf("Your Temp:");            
   
    while (1) { 
        Thread::wait(500);
        myled = 1;        
        if(xbee1.readable()){            
            xbee1.scanf("%d\n", &sensor_data);            
            //pc.printf("data received %d\n\r", sensor_data);
            uLCD.text_height(2);
            uLCD.text_width(2);
            uLCD.locate(2,2);
            uLCD.printf("%d C", Normal_BTempC);
            uLCD.locate(2,6);
            uLCD.printf("%d C", sensor_data);
            Thread::wait(300);                         
            myled = 0; 
            Thread::wait(1000);                     
        }
    }
}

void changeBTemp_thread(void const *argument) {
    while (1) {
        pb1.mode(PullUp);
        pb2.mode(PullUp);
        if (pb1 == 0) {Normal_BTempC++;};
        if (pb2 == 0) {Normal_BTempC--;};
        Thread::wait(500);
    }
}

void network_thread(void const *argument) {
    
    char urlBuffer[256];
    char str[512];
    
    ethif.init(); //Use DHCP
    ethif.connect(60000);
    pc.printf("connected ethernet\n");
   
    while (1)
    {
       // initialize ethernet hardware
       pc.printf("Begin While loop");
       
    
        urlBuffer[0] = 0;
        str[0]=0;
        sprintf(urlBuffer, "http://api.thingspeak.com/update?key=LRZ7ZLXUI7LKC470&field1=%d", sensor_data);
        
        http.get(urlBuffer, str,128);
        //HTTPResult res = http.get(urlBuffer, str,128);
        //if(res==0) {
        //pc.printf("sent get to thingspeak\n");
        //}
        //else {
         //   pc.printf("get failed to send");
          //  }
       // wait(16); // 1 minute
       // led=!led;
        Thread::wait(10000);
    
    }
}
int main() {
    
    Thread thread1(receiver_thread);
    Thread::wait(5000);
    Thread thread2(changeBTemp_thread);
    Thread::wait(5000);
    Thread thread3(network_thread);
    Statetype state = ac_off;
    
    while(1){
    myLED3 = !myLED3;
    //uLCD.printf("Set Temp: %d\n\r", Normal_BTempC);
        switch (state) {
            case ac_off:
                
                m.speed(0.0); 
                myled = 1;
                myLED2 =0;
                myLED3 =1;
                myLED4 =0;
                
                Thread::wait(3000);
                
                (sensor_data >= Normal_BTempC)? state = ac_on : state = ac_off;
                //pc.printf("This is off \n\r");
                break;

            case ac_on:
                   
                myled = 1;
                myLED2 =1;
                myLED3 =1;
                myLED4 =1;
                   
                while (sensor_data >= 1.3*Normal_BTempC) {
                    m.speed(1.0);
                }
                while ((sensor_data >= 1.2*Normal_BTempC)&&(sensor_data < 1.3*Normal_BTempC)) {
                    m.speed(0.5);
                    Thread::wait(500);
                    m.speed(0.0);
                    Thread::wait(2000);
                }
                while ((sensor_data >= 1.1*Normal_BTempC)&&(sensor_data < 1.2*Normal_BTempC)) {
                    m.speed(0.5);
                    Thread::wait(500);
                    m.speed(0.0);
                    Thread::wait(3000);
                }
                while ((sensor_data >= Normal_BTempC)&&(sensor_data < 1.1*Normal_BTempC)) {
                    m.speed(0.5);
                    Thread::wait(500);
                    m.speed(0.0);
                    Thread::wait(3500);
                }                    
                                     
                //m.speed(1.0);
                (sensor_data < Normal_BTempC)? state = ac_off : state = ac_on;
                //pc.printf("This is on \n\r");
                break;
        }
        Thread::wait(1000);
    }
}