LAN(Wi-Fi) air controller through the Internet. Also you can use TANK. See:http://wizard.nestegg.jp/lanir.html

Dependencies:   EthernetNetIf mbed HTTPServer

Committer:
halfpitch
Date:
Mon Aug 01 19:21:55 2011 +0000
Revision:
0:6f9648f5eaab
Rev.A

Who changed what in which revision?

UserRevisionLine numberNew contents of line
halfpitch 0:6f9648f5eaab 1 //////////////////////////////////////////////////////////
halfpitch 0:6f9648f5eaab 2 //Nest Egg Inc. //
halfpitch 0:6f9648f5eaab 3 //Wi-Fi TANK with Air conditioner //
halfpitch 0:6f9648f5eaab 4 // //
halfpitch 0:6f9648f5eaab 5 //SD card module must be Normal chip select mode. //
halfpitch 0:6f9648f5eaab 6 //Do not use wwChipSelect.cpp & wwChipSelect.h //
halfpitch 0:6f9648f5eaab 7 //White Wizard Chip Select setting must be //
halfpitch 0:6f9648f5eaab 8 //invalidated. //
halfpitch 0:6f9648f5eaab 9 //////////////////////////////////////////////////////////
halfpitch 0:6f9648f5eaab 10
halfpitch 0:6f9648f5eaab 11 #include "mbed.h"
halfpitch 0:6f9648f5eaab 12 #include "EthernetNetIf.h"
halfpitch 0:6f9648f5eaab 13 #include "HTTPServer.h"
halfpitch 0:6f9648f5eaab 14 #include "RPCFunction.h"
halfpitch 0:6f9648f5eaab 15
halfpitch 0:6f9648f5eaab 16 #include "string.h"
halfpitch 0:6f9648f5eaab 17 #include "stdio.h"
halfpitch 0:6f9648f5eaab 18
halfpitch 0:6f9648f5eaab 19 //SD-----------------------
halfpitch 0:6f9648f5eaab 20 #include "SDFileSystem.h"
halfpitch 0:6f9648f5eaab 21
halfpitch 0:6f9648f5eaab 22 //semaphore----------------
halfpitch 0:6f9648f5eaab 23 #include "Semaphore.h"
halfpitch 0:6f9648f5eaab 24
halfpitch 0:6f9648f5eaab 25 #define SDch 0x05
halfpitch 0:6f9648f5eaab 26 #define MAXdatanum 500
halfpitch 0:6f9648f5eaab 27 #define TimeLimit 3000
halfpitch 0:6f9648f5eaab 28 #define pul38khz 26
halfpitch 0:6f9648f5eaab 29 #define pul38k_ON 13
halfpitch 0:6f9648f5eaab 30 #define pul38k_OFF 26
halfpitch 0:6f9648f5eaab 31
halfpitch 0:6f9648f5eaab 32 #define test 1
halfpitch 0:6f9648f5eaab 33
halfpitch 0:6f9648f5eaab 34 //semaphore----------------
halfpitch 0:6f9648f5eaab 35 Semaphore sem;
halfpitch 0:6f9648f5eaab 36 volatile char shared_resource = 'a'; // This is a shared resource for example.
halfpitch 0:6f9648f5eaab 37 #define LOCK() sem.try_enter()
halfpitch 0:6f9648f5eaab 38 #define UNLOCK() sem.release()
halfpitch 0:6f9648f5eaab 39
halfpitch 0:6f9648f5eaab 40 //prototype
halfpitch 0:6f9648f5eaab 41 void send_pulse(int, int);
halfpitch 0:6f9648f5eaab 42
halfpitch 0:6f9648f5eaab 43 SDFileSystem sd(p5, p6, p7, p8, "sd");
halfpitch 0:6f9648f5eaab 44 //-------------------------
halfpitch 0:6f9648f5eaab 45
halfpitch 0:6f9648f5eaab 46 //IR-----------------------
halfpitch 0:6f9648f5eaab 47 PwmOut Pulse_pin(p25);
halfpitch 0:6f9648f5eaab 48 //-------------------------
halfpitch 0:6f9648f5eaab 49
halfpitch 0:6f9648f5eaab 50 DigitalOut led1(LED1);
halfpitch 0:6f9648f5eaab 51 DigitalOut led2(LED2);
halfpitch 0:6f9648f5eaab 52 DigitalOut led3(LED3);
halfpitch 0:6f9648f5eaab 53 DigitalOut led4(LED4);
halfpitch 0:6f9648f5eaab 54
halfpitch 0:6f9648f5eaab 55 DigitalOut motor1(p21);
halfpitch 0:6f9648f5eaab 56 DigitalOut motor2(p22);
halfpitch 0:6f9648f5eaab 57 DigitalOut motor3(p23);
halfpitch 0:6f9648f5eaab 58 DigitalOut motor4(p24);
halfpitch 0:6f9648f5eaab 59
halfpitch 0:6f9648f5eaab 60 AnalogIn ad19(p19);
halfpitch 0:6f9648f5eaab 61 AnalogIn ad20(p20);
halfpitch 0:6f9648f5eaab 62
halfpitch 0:6f9648f5eaab 63 #if 1
halfpitch 0:6f9648f5eaab 64 /*
halfpitch 0:6f9648f5eaab 65 * Use DHCP
halfpitch 0:6f9648f5eaab 66 */
halfpitch 0:6f9648f5eaab 67 EthernetNetIf ethif;
halfpitch 0:6f9648f5eaab 68 #else
halfpitch 0:6f9648f5eaab 69 /*
halfpitch 0:6f9648f5eaab 70 * Use "static IP address" (Parameters:IP, Subnet mask, Gateway, DNS)
halfpitch 0:6f9648f5eaab 71 */
halfpitch 0:6f9648f5eaab 72 EthernetNetIf ethif(IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx), IpAddr(xxx,xxx,xxx,xxx));
halfpitch 0:6f9648f5eaab 73 #endif
halfpitch 0:6f9648f5eaab 74
halfpitch 0:6f9648f5eaab 75 HTTPServer server;
halfpitch 0:6f9648f5eaab 76 LocalFileSystem local("local");
halfpitch 0:6f9648f5eaab 77 void MotorSig(char *input,char *output);
halfpitch 0:6f9648f5eaab 78 void ReadStatus(char *input,char *output);
halfpitch 0:6f9648f5eaab 79 RPCFunction rpcFunc(&MotorSig, "MotorSig");
halfpitch 0:6f9648f5eaab 80 RPCFunction readrpcFunc(&ReadStatus, "ReadStatus");
halfpitch 0:6f9648f5eaab 81
halfpitch 0:6f9648f5eaab 82 int main(void) {
halfpitch 0:6f9648f5eaab 83 //Base::add_rpc_class<DigitalOut>();
halfpitch 0:6f9648f5eaab 84 //Base::add_rpc_class<AnalogIn>();
halfpitch 0:6f9648f5eaab 85
halfpitch 0:6f9648f5eaab 86 if (ethif.setup()) {
halfpitch 0:6f9648f5eaab 87 error("Ethernet setup failed.");
halfpitch 0:6f9648f5eaab 88 return 1;
halfpitch 0:6f9648f5eaab 89 }
halfpitch 0:6f9648f5eaab 90
halfpitch 0:6f9648f5eaab 91 IpAddr ethIp=ethif.getIp();
halfpitch 0:6f9648f5eaab 92
halfpitch 0:6f9648f5eaab 93 led1=1;
halfpitch 0:6f9648f5eaab 94 wait(1);
halfpitch 0:6f9648f5eaab 95 server.addHandler<SimpleHandler>("/hello");
halfpitch 0:6f9648f5eaab 96 server.addHandler<RPCHandler>("/rpc");
halfpitch 0:6f9648f5eaab 97 FSHandler::mount("/local", "/");
halfpitch 0:6f9648f5eaab 98 server.addHandler<FSHandler>("/");
halfpitch 0:6f9648f5eaab 99 server.bind(80);
halfpitch 0:6f9648f5eaab 100 while (1) {
halfpitch 0:6f9648f5eaab 101 Net::poll();
halfpitch 0:6f9648f5eaab 102 }
halfpitch 0:6f9648f5eaab 103
halfpitch 0:6f9648f5eaab 104 }
halfpitch 0:6f9648f5eaab 105
halfpitch 0:6f9648f5eaab 106
halfpitch 0:6f9648f5eaab 107 void MotorSig(char *input , char *output)
halfpitch 0:6f9648f5eaab 108 {
halfpitch 0:6f9648f5eaab 109 //for data-----------------------
halfpitch 0:6f9648f5eaab 110 int IRdata[MAXdatanum];
halfpitch 0:6f9648f5eaab 111 int pulsetime[MAXdatanum];
halfpitch 0:6f9648f5eaab 112 int j = 0;
halfpitch 0:6f9648f5eaab 113 int datanum = 0;
halfpitch 0:6f9648f5eaab 114 int pHL = 0;
halfpitch 0:6f9648f5eaab 115 int t = 0;
halfpitch 0:6f9648f5eaab 116 // FILE *fp1;
halfpitch 0:6f9648f5eaab 117
halfpitch 0:6f9648f5eaab 118 //text---------------------------
halfpitch 0:6f9648f5eaab 119 int length = 0;
halfpitch 0:6f9648f5eaab 120 char *str;
halfpitch 0:6f9648f5eaab 121 char *str1;
halfpitch 0:6f9648f5eaab 122 char str2[30] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
halfpitch 0:6f9648f5eaab 123 char str3[30] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
halfpitch 0:6f9648f5eaab 124
halfpitch 0:6f9648f5eaab 125 //get input data length
halfpitch 0:6f9648f5eaab 126 for (length = 0; input[length] != '\0'; length++);
halfpitch 0:6f9648f5eaab 127
halfpitch 0:6f9648f5eaab 128 //check data
halfpitch 0:6f9648f5eaab 129 printf("length = %d : input = %s\n", length, input);
halfpitch 0:6f9648f5eaab 130
halfpitch 0:6f9648f5eaab 131 //check period of extension
halfpitch 0:6f9648f5eaab 132 if((length > 4)&&(input[length-4] == '.')){
halfpitch 0:6f9648f5eaab 133 //data
halfpitch 0:6f9648f5eaab 134 //printf("data mode start\n");
halfpitch 0:6f9648f5eaab 135
halfpitch 0:6f9648f5eaab 136 //read file from micro SD card
halfpitch 0:6f9648f5eaab 137 str1 = "/sd/";
halfpitch 0:6f9648f5eaab 138 //printf("%s\n",str1);
halfpitch 0:6f9648f5eaab 139 for(j = 0; j < length; j++){
halfpitch 0:6f9648f5eaab 140 //printf("j=%d input[%d] = %c\n",j,j,input[j]);
halfpitch 0:6f9648f5eaab 141 str2[j] = input[j];
halfpitch 0:6f9648f5eaab 142 }
halfpitch 0:6f9648f5eaab 143
halfpitch 0:6f9648f5eaab 144 // printf("str1 = %s\n",str1);
halfpitch 0:6f9648f5eaab 145 //printf("str2 = %s\n",str2);
halfpitch 0:6f9648f5eaab 146
halfpitch 0:6f9648f5eaab 147 strcpy(str3, str1);
halfpitch 0:6f9648f5eaab 148 //printf("strcpy = %s\n",str3);
halfpitch 0:6f9648f5eaab 149
halfpitch 0:6f9648f5eaab 150 strcat(str3, str2);
halfpitch 0:6f9648f5eaab 151 //printf("strcat = %s\n",str3);
halfpitch 0:6f9648f5eaab 152
halfpitch 0:6f9648f5eaab 153 for (length = 0; (str3[length] != '\0'); length++);
halfpitch 0:6f9648f5eaab 154
halfpitch 0:6f9648f5eaab 155 FILE *fp1 = fopen(str3, "r");
halfpitch 0:6f9648f5eaab 156 //FILE *fp1 = fopen("/sd/off.csv", "r");
halfpitch 0:6f9648f5eaab 157
halfpitch 0:6f9648f5eaab 158 if(fp1 == NULL){
halfpitch 0:6f9648f5eaab 159 printf("can not open data file!\n");
halfpitch 0:6f9648f5eaab 160
halfpitch 0:6f9648f5eaab 161 }else{
halfpitch 0:6f9648f5eaab 162 printf("loading %s ...\n",str3);
halfpitch 0:6f9648f5eaab 163 datanum = 0;
halfpitch 0:6f9648f5eaab 164
halfpitch 0:6f9648f5eaab 165 fscanf(fp1, "%d\n",&datanum); //read from SD
halfpitch 0:6f9648f5eaab 166 printf("datanum, %d\n",datanum);
halfpitch 0:6f9648f5eaab 167
halfpitch 0:6f9648f5eaab 168 Pulse_pin.period_us(pul38khz);
halfpitch 0:6f9648f5eaab 169
halfpitch 0:6f9648f5eaab 170 j=0;
halfpitch 0:6f9648f5eaab 171 for(j=0;j<datanum;++j){
halfpitch 0:6f9648f5eaab 172 fscanf(fp1, "%d,%d,\n", &pHL, &t);
halfpitch 0:6f9648f5eaab 173 IRdata[j] = pHL;
halfpitch 0:6f9648f5eaab 174 pulsetime[j] = t;
halfpitch 0:6f9648f5eaab 175 }
halfpitch 0:6f9648f5eaab 176
halfpitch 0:6f9648f5eaab 177
halfpitch 0:6f9648f5eaab 178 fclose(fp1);
halfpitch 0:6f9648f5eaab 179 printf("close fp1\n");
halfpitch 0:6f9648f5eaab 180
halfpitch 0:6f9648f5eaab 181 j=0;
halfpitch 0:6f9648f5eaab 182 if (LOCK()) {
halfpitch 0:6f9648f5eaab 183 for(j=0;j<datanum;++j){
halfpitch 0:6f9648f5eaab 184 send_pulse(IRdata[j],pulsetime[j]);
halfpitch 0:6f9648f5eaab 185 }
halfpitch 0:6f9648f5eaab 186 UNLOCK();
halfpitch 0:6f9648f5eaab 187 printf("WW sent IR data!\n");
halfpitch 0:6f9648f5eaab 188 }
halfpitch 0:6f9648f5eaab 189
halfpitch 0:6f9648f5eaab 190 Pulse_pin.pulsewidth(pul38k_OFF);
halfpitch 0:6f9648f5eaab 191 }
halfpitch 0:6f9648f5eaab 192
halfpitch 0:6f9648f5eaab 193 }else{
halfpitch 0:6f9648f5eaab 194 //controller
halfpitch 0:6f9648f5eaab 195 printf("controller mode start\n");
halfpitch 0:6f9648f5eaab 196
halfpitch 0:6f9648f5eaab 197 str = "forward";
halfpitch 0:6f9648f5eaab 198 if (strcmp(input,str) == 0){
halfpitch 0:6f9648f5eaab 199 //printf("input OK!\n");
halfpitch 0:6f9648f5eaab 200 motor1 = 0;
halfpitch 0:6f9648f5eaab 201 motor2 = 1;
halfpitch 0:6f9648f5eaab 202 motor3 = 1;
halfpitch 0:6f9648f5eaab 203 motor4 = 0;
halfpitch 0:6f9648f5eaab 204
halfpitch 0:6f9648f5eaab 205 led1 = 0;
halfpitch 0:6f9648f5eaab 206 led2 = 1;
halfpitch 0:6f9648f5eaab 207 led3 = 1;
halfpitch 0:6f9648f5eaab 208 led4 = 0;
halfpitch 0:6f9648f5eaab 209 }
halfpitch 0:6f9648f5eaab 210
halfpitch 0:6f9648f5eaab 211 str = "stop";
halfpitch 0:6f9648f5eaab 212 if (strcmp(input,str) == 0){
halfpitch 0:6f9648f5eaab 213 //printf("input OK!\n");
halfpitch 0:6f9648f5eaab 214 motor1 = 0;
halfpitch 0:6f9648f5eaab 215 motor2 = 0;
halfpitch 0:6f9648f5eaab 216 motor3 = 0;
halfpitch 0:6f9648f5eaab 217 motor4 = 0;
halfpitch 0:6f9648f5eaab 218
halfpitch 0:6f9648f5eaab 219 led1 = 0;
halfpitch 0:6f9648f5eaab 220 led2 = 0;
halfpitch 0:6f9648f5eaab 221 led3 = 0;
halfpitch 0:6f9648f5eaab 222 led4 = 0;
halfpitch 0:6f9648f5eaab 223 }
halfpitch 0:6f9648f5eaab 224
halfpitch 0:6f9648f5eaab 225 str = "back";
halfpitch 0:6f9648f5eaab 226 if (strcmp(input,str) == 0){
halfpitch 0:6f9648f5eaab 227 //printf("input OK!\n");
halfpitch 0:6f9648f5eaab 228 motor1 = 1;
halfpitch 0:6f9648f5eaab 229 motor2 = 0;
halfpitch 0:6f9648f5eaab 230 motor3 = 0;
halfpitch 0:6f9648f5eaab 231 motor4 = 1;
halfpitch 0:6f9648f5eaab 232
halfpitch 0:6f9648f5eaab 233 led1 = 1;
halfpitch 0:6f9648f5eaab 234 led2 = 0;
halfpitch 0:6f9648f5eaab 235 led3 = 0;
halfpitch 0:6f9648f5eaab 236 led4 = 1;
halfpitch 0:6f9648f5eaab 237 }
halfpitch 0:6f9648f5eaab 238
halfpitch 0:6f9648f5eaab 239 str = "right";
halfpitch 0:6f9648f5eaab 240 if (strcmp(input,str) == 0){
halfpitch 0:6f9648f5eaab 241 //printf("input OK!\n");
halfpitch 0:6f9648f5eaab 242 motor1 = 0;
halfpitch 0:6f9648f5eaab 243 motor2 = 1;
halfpitch 0:6f9648f5eaab 244 motor3 = 0;
halfpitch 0:6f9648f5eaab 245 motor4 = 1;
halfpitch 0:6f9648f5eaab 246
halfpitch 0:6f9648f5eaab 247 led1 = 0;
halfpitch 0:6f9648f5eaab 248 led2 = 1;
halfpitch 0:6f9648f5eaab 249 led3 = 0;
halfpitch 0:6f9648f5eaab 250 led4 = 1;
halfpitch 0:6f9648f5eaab 251 }
halfpitch 0:6f9648f5eaab 252
halfpitch 0:6f9648f5eaab 253 str = "left";
halfpitch 0:6f9648f5eaab 254 if (strcmp(input,str) == 0){
halfpitch 0:6f9648f5eaab 255 //printf("input OK!\n");
halfpitch 0:6f9648f5eaab 256 motor1 = 1;
halfpitch 0:6f9648f5eaab 257 motor2 = 0;
halfpitch 0:6f9648f5eaab 258 motor3 = 1;
halfpitch 0:6f9648f5eaab 259 motor4 = 0;
halfpitch 0:6f9648f5eaab 260
halfpitch 0:6f9648f5eaab 261 led1 = 1;
halfpitch 0:6f9648f5eaab 262 led2 = 0;
halfpitch 0:6f9648f5eaab 263 led3 = 1;
halfpitch 0:6f9648f5eaab 264 led4 = 0;
halfpitch 0:6f9648f5eaab 265 }
halfpitch 0:6f9648f5eaab 266 }
halfpitch 0:6f9648f5eaab 267 //-------------------------------
halfpitch 0:6f9648f5eaab 268 }
halfpitch 0:6f9648f5eaab 269
halfpitch 0:6f9648f5eaab 270 void ReadStatus(char * input, char * output){
halfpitch 0:6f9648f5eaab 271
halfpitch 0:6f9648f5eaab 272 float ADdata19,ADdata20,temp,humid;
halfpitch 0:6f9648f5eaab 273 char str[30] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
halfpitch 0:6f9648f5eaab 274
halfpitch 0:6f9648f5eaab 275 ADdata19 = ad19.read()*3.3;
halfpitch 0:6f9648f5eaab 276 ADdata20 = ad20.read()*3.3;
halfpitch 0:6f9648f5eaab 277
halfpitch 0:6f9648f5eaab 278 temp = 100*(ADdata20-0.5); //temp
halfpitch 0:6f9648f5eaab 279 humid = (80.0/1.3)*(ADdata19-0.6); //humid
halfpitch 0:6f9648f5eaab 280
halfpitch 0:6f9648f5eaab 281 sprintf( str, "T : %.1f <br> H : %.1f", temp, humid);
halfpitch 0:6f9648f5eaab 282 sprintf(output, str);
halfpitch 0:6f9648f5eaab 283 }
halfpitch 0:6f9648f5eaab 284
halfpitch 0:6f9648f5eaab 285 void send_pulse(int pHL, int t){
halfpitch 0:6f9648f5eaab 286
halfpitch 0:6f9648f5eaab 287 int k = 0;
halfpitch 0:6f9648f5eaab 288
halfpitch 0:6f9648f5eaab 289 if(pHL == 0){
halfpitch 0:6f9648f5eaab 290 //38kHz pulse on
halfpitch 0:6f9648f5eaab 291 Pulse_pin.pulsewidth_us(pul38k_ON);
halfpitch 0:6f9648f5eaab 292
halfpitch 0:6f9648f5eaab 293 }else if(pHL == 1){
halfpitch 0:6f9648f5eaab 294 //38kHz pulse off
halfpitch 0:6f9648f5eaab 295 Pulse_pin.pulsewidth(pul38k_OFF);
halfpitch 0:6f9648f5eaab 296
halfpitch 0:6f9648f5eaab 297 }else{
halfpitch 0:6f9648f5eaab 298 Pulse_pin.pulsewidth(pul38k_OFF);
halfpitch 0:6f9648f5eaab 299 printf("\n\n-----Data format is incorrect!!-----\n pHL = %d, t = %d \n", pHL, t);
halfpitch 0:6f9648f5eaab 300
halfpitch 0:6f9648f5eaab 301 }
halfpitch 0:6f9648f5eaab 302 for(k = 0; k < t; ++k){
halfpitch 0:6f9648f5eaab 303 wait_us(50);
halfpitch 0:6f9648f5eaab 304 }
halfpitch 0:6f9648f5eaab 305 }
halfpitch 0:6f9648f5eaab 306
halfpitch 0:6f9648f5eaab 307