RX for Temperature Controlled Fan
Dependencies: 4DGL-uLCD-SE EthernetInterface HTTPClient Motor mbed-rtos mbed
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 }
Generated on Mon Aug 8 2022 19:05:06 by 1.7.2