RX for Temperature Controlled Fan

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

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "rtos.h"
00003 #include "Motor.h"
00004 #include "uLCD_4DGL.h"
00005 #include "EthernetInterface.h"
00006 #include "HTTPClient.h"
00007  
00008 #define Room_TempC 23.0
00009 #define Room_TempF 78.0
00010 //#define Normal_BTempC 30.0
00011 #define Normal_BTempF ((9.0/5.0)*Normal_BTempC) + 32
00012  
00013 Motor m(p21, p19, p20); // pwm, fwd, rev 
00014   
00015 DigitalOut myled(LED1);
00016 DigitalOut myLED2(LED2);
00017 DigitalOut myLED3(LED3);
00018 DigitalOut myLED4(LED4);
00019 
00020 InterruptIn pb1(p30);
00021 InterruptIn pb2(p29);
00022 
00023 uLCD_4DGL uLCD(p13,p14,p11);
00024  
00025 Serial pc(USBTX, USBRX);
00026 Serial xbee1(p9, p10); 
00027 DigitalOut rst1(p8);
00028 
00029 EthernetInterface ethif;
00030 HTTPClient http;
00031  
00032 enum Statetype { ac_off = 0, ac_on };
00033 volatile int sensor_data; 
00034 volatile int Normal_BTempC = 30;
00035  
00036 void receiver_thread(void const * argument){
00037     
00038     rst1 = 0;   //Set reset pin to 0
00039     myled = 0;
00040     Thread::wait(1);
00041     rst1 = 1;   //Set reset pin to 1
00042     Thread::wait(1);
00043     
00044     uLCD.printf("Set Temp:");
00045     uLCD.locate(0,7);
00046     uLCD.printf("Your Temp:");            
00047    
00048     while (1) { 
00049         Thread::wait(500);
00050         myled = 1;        
00051         if(xbee1.readable()){            
00052             xbee1.scanf("%d\n", &sensor_data);            
00053             //pc.printf("data received %d\n\r", sensor_data);
00054             uLCD.text_height(2);
00055             uLCD.text_width(2);
00056             uLCD.locate(2,2);
00057             uLCD.printf("%d C", Normal_BTempC);
00058             uLCD.locate(2,6);
00059             uLCD.printf("%d C", sensor_data);
00060             Thread::wait(300);                         
00061             myled = 0; 
00062             Thread::wait(1000);                     
00063         }
00064     }
00065 }
00066 
00067 void changeBTemp_thread(void const *argument) {
00068     while (1) {
00069         pb1.mode(PullUp);
00070         pb2.mode(PullUp);
00071         if (pb1 == 0) {Normal_BTempC++;};
00072         if (pb2 == 0) {Normal_BTempC--;};
00073         Thread::wait(500);
00074     }
00075 }
00076 
00077 void network_thread(void const *argument) {
00078     
00079     char urlBuffer[256];
00080     char str[512];
00081     
00082     ethif.init(); //Use DHCP
00083     ethif.connect(60000);
00084     pc.printf("connected ethernet\n");
00085    
00086     while (1)
00087     {
00088        // initialize ethernet hardware
00089        pc.printf("Begin While loop");
00090        
00091     
00092         urlBuffer[0] = 0;
00093         str[0]=0;
00094         sprintf(urlBuffer, "http://api.thingspeak.com/update?key=LRZ7ZLXUI7LKC470&field1=%d", sensor_data);
00095         
00096         http.get(urlBuffer, str,128);
00097         //HTTPResult res = http.get(urlBuffer, str,128);
00098         //if(res==0) {
00099         //pc.printf("sent get to thingspeak\n");
00100         //}
00101         //else {
00102          //   pc.printf("get failed to send");
00103           //  }
00104        // wait(16); // 1 minute
00105        // led=!led;
00106         Thread::wait(10000);
00107     
00108     }
00109 }
00110 int main() {
00111     
00112     Thread thread1(receiver_thread);
00113     Thread::wait(5000);
00114     Thread thread2(changeBTemp_thread);
00115     Thread::wait(5000);
00116     Thread thread3(network_thread);
00117     Statetype state = ac_off;
00118     
00119     while(1){
00120     myLED3 = !myLED3;
00121     //uLCD.printf("Set Temp: %d\n\r", Normal_BTempC);
00122         switch (state) {
00123             case ac_off:
00124                 
00125                 m.speed(0.0); 
00126                 myled = 1;
00127                 myLED2 =0;
00128                 myLED3 =1;
00129                 myLED4 =0;
00130                 
00131                 Thread::wait(3000);
00132                 
00133                 (sensor_data >= Normal_BTempC)? state = ac_on : state = ac_off;
00134                 //pc.printf("This is off \n\r");
00135                 break;
00136 
00137             case ac_on:
00138                    
00139                 myled = 1;
00140                 myLED2 =1;
00141                 myLED3 =1;
00142                 myLED4 =1;
00143                    
00144                 while (sensor_data >= 1.3*Normal_BTempC) {
00145                     m.speed(1.0);
00146                 }
00147                 while ((sensor_data >= 1.2*Normal_BTempC)&&(sensor_data < 1.3*Normal_BTempC)) {
00148                     m.speed(0.5);
00149                     Thread::wait(500);
00150                     m.speed(0.0);
00151                     Thread::wait(2000);
00152                 }
00153                 while ((sensor_data >= 1.1*Normal_BTempC)&&(sensor_data < 1.2*Normal_BTempC)) {
00154                     m.speed(0.5);
00155                     Thread::wait(500);
00156                     m.speed(0.0);
00157                     Thread::wait(3000);
00158                 }
00159                 while ((sensor_data >= Normal_BTempC)&&(sensor_data < 1.1*Normal_BTempC)) {
00160                     m.speed(0.5);
00161                     Thread::wait(500);
00162                     m.speed(0.0);
00163                     Thread::wait(3500);
00164                 }                    
00165                                      
00166                 //m.speed(1.0);
00167                 (sensor_data < Normal_BTempC)? state = ac_off : state = ac_on;
00168                 //pc.printf("This is on \n\r");
00169                 break;
00170         }
00171         Thread::wait(1000);
00172     }
00173 }