monitor sensor and control relay via web server

Dependencies:   WIZWebtInterface mbed

Fork of HTTP_Test_Server_Web by root root

Committer:
846354866
Date:
Fri Nov 04 01:02:50 2016 +0000
Revision:
0:25d52c6a3448
Child:
1:900e3ba27ddb
yangyang web version0.1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
846354866 0:25d52c6a3448 1 #include "mbed.h"
846354866 0:25d52c6a3448 2 #include "EthernetInterface.h"
846354866 0:25d52c6a3448 3 //#include "SDFileSystem.h"
846354866 0:25d52c6a3448 4 #include <stdio.h>
846354866 0:25d52c6a3448 5 #include <string.h>
846354866 0:25d52c6a3448 6
846354866 0:25d52c6a3448 7
846354866 0:25d52c6a3448 8 #define MAC "\x00\x08\xDC\x11\x34\x78"
846354866 0:25d52c6a3448 9 #define IP "192.168.1.123"
846354866 0:25d52c6a3448 10 #define MASK "255.255.255.0"
846354866 0:25d52c6a3448 11 #define GATEWAY "192.168.1.1"
846354866 0:25d52c6a3448 12
846354866 0:25d52c6a3448 13 #define HTTPD_SERVER_PORT 80
846354866 0:25d52c6a3448 14 #define HTTPD_MAX_REQ_LENGTH 1023
846354866 0:25d52c6a3448 15 #define HTTPD_MAX_HDR_LENGTH 255
846354866 0:25d52c6a3448 16 #define HTTPD_MAX_FNAME_LENGTH 127
846354866 0:25d52c6a3448 17 #define HTTPD_MAX_DNAME_LENGTH 127
846354866 0:25d52c6a3448 18
846354866 0:25d52c6a3448 19
846354866 0:25d52c6a3448 20 Serial uart(PA_13,PA_14);
846354866 0:25d52c6a3448 21 DigitalInOut myIOD10(D10);
846354866 0:25d52c6a3448 22 DigitalIn myInD11(D11);
846354866 0:25d52c6a3448 23 DigitalOut myOutD12(D12);
846354866 0:25d52c6a3448 24 AnalogIn myInA1(A1);
846354866 0:25d52c6a3448 25 Timeout button_ledTimeout;
846354866 0:25d52c6a3448 26 Timeout receive_dht11Timeout;
846354866 0:25d52c6a3448 27
846354866 0:25d52c6a3448 28 unsigned char RH,RL,TH,TL;
846354866 0:25d52c6a3448 29 unsigned char data_byte;
846354866 0:25d52c6a3448 30 unsigned int U8FLAG;
846354866 0:25d52c6a3448 31 unsigned char status_led;
846354866 0:25d52c6a3448 32 unsigned char seaver_ip[] = IP;
846354866 0:25d52c6a3448 33 char led_control[6] = "cloce";
846354866 0:25d52c6a3448 34
846354866 0:25d52c6a3448 35
846354866 0:25d52c6a3448 36 //SDFileSystem sd(p5, p6, p7, p8, "sd"); // LPC1768 MBD2PMD
846354866 0:25d52c6a3448 37 //SDFileSystem sd(P0_18, P0_17, P0_15, P0_16, "sd"); // Seeeduino Arch Pro SPI2SD
846354866 0:25d52c6a3448 38 //SDFileSystem sd(PTE3, PTE1, PTE2, PTE4, "sd"); // K64F
846354866 0:25d52c6a3448 39 //SDFileSystem sd(PB_3, PB_2, PB_1, PB_0, "sd"); // WIZwiki-W7500
846354866 0:25d52c6a3448 40
846354866 0:25d52c6a3448 41 EthernetInterface eth;
846354866 0:25d52c6a3448 42 TCPSocketServer server;
846354866 0:25d52c6a3448 43 TCPSocketConnection client;
846354866 0:25d52c6a3448 44
846354866 0:25d52c6a3448 45 char buffer[HTTPD_MAX_REQ_LENGTH+1];
846354866 0:25d52c6a3448 46 char httpHeader[HTTPD_MAX_HDR_LENGTH+1];
846354866 0:25d52c6a3448 47 char fileName[HTTPD_MAX_FNAME_LENGTH+1];
846354866 0:25d52c6a3448 48 char dirName[HTTPD_MAX_DNAME_LENGTH+1];
846354866 0:25d52c6a3448 49 char *uristr;
846354866 0:25d52c6a3448 50 char *eou;
846354866 0:25d52c6a3448 51 char *qrystr;
846354866 0:25d52c6a3448 52
846354866 0:25d52c6a3448 53
846354866 0:25d52c6a3448 54 Ticker ledTick;
846354866 0:25d52c6a3448 55
846354866 0:25d52c6a3448 56 void receive_dht11();
846354866 0:25d52c6a3448 57 unsigned char receive_byte();
846354866 0:25d52c6a3448 58
846354866 0:25d52c6a3448 59 void delay(unsigned char ms) //延时模块//
846354866 0:25d52c6a3448 60 {
846354866 0:25d52c6a3448 61 unsigned int y;
846354866 0:25d52c6a3448 62 while(ms--)
846354866 0:25d52c6a3448 63 for(y=1920; y>0; y--);
846354866 0:25d52c6a3448 64 }
846354866 0:25d52c6a3448 65
846354866 0:25d52c6a3448 66 void Delay_us(unsigned char us)
846354866 0:25d52c6a3448 67 {
846354866 0:25d52c6a3448 68 unsigned char y;
846354866 0:25d52c6a3448 69 while(us--)
846354866 0:25d52c6a3448 70 for(y=2; y>0; y--);
846354866 0:25d52c6a3448 71 }
846354866 0:25d52c6a3448 72
846354866 0:25d52c6a3448 73
846354866 0:25d52c6a3448 74 void button_led()
846354866 0:25d52c6a3448 75 {
846354866 0:25d52c6a3448 76 while(myInD11.read())
846354866 0:25d52c6a3448 77 {
846354866 0:25d52c6a3448 78 wait(0.01f);
846354866 0:25d52c6a3448 79 if(!myInD11.read())
846354866 0:25d52c6a3448 80 {
846354866 0:25d52c6a3448 81 myOutD12.write(!myOutD12.read());
846354866 0:25d52c6a3448 82 status_led = myOutD12.read();
846354866 0:25d52c6a3448 83 break;
846354866 0:25d52c6a3448 84 }
846354866 0:25d52c6a3448 85 }
846354866 0:25d52c6a3448 86
846354866 0:25d52c6a3448 87 button_ledTimeout.attach(&button_led,0.1f);
846354866 0:25d52c6a3448 88 }
846354866 0:25d52c6a3448 89
846354866 0:25d52c6a3448 90 void getFile(char* uri)
846354866 0:25d52c6a3448 91 {
846354866 0:25d52c6a3448 92 uart.printf("getFile %s\n", uri);
846354866 0:25d52c6a3448 93 strcpy(led_control, &uri[1]);
846354866 0:25d52c6a3448 94 //receive_dht11();
846354866 0:25d52c6a3448 95 char *lstchr = strrchr(uri, NULL) -1;
846354866 0:25d52c6a3448 96 sprintf(httpHeader,"HTTP/1.1 200 OK\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n");
846354866 0:25d52c6a3448 97 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 98 sprintf(httpHeader,"<html><head><title>hello dfrobot</title></head><body><h1> Information State</h1><ul>");
846354866 0:25d52c6a3448 99 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 100
846354866 0:25d52c6a3448 101 sprintf(httpHeader,"<H1>Temperature:%d Celsius</H1>", TH);
846354866 0:25d52c6a3448 102 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 103 sprintf(httpHeader,"<H1>Humidity:%d %%</H1>", RH);
846354866 0:25d52c6a3448 104 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 105 sprintf(httpHeader,"<H1>Gas Value:%d</H1>", myInA1.read_u16());
846354866 0:25d52c6a3448 106 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 107
846354866 0:25d52c6a3448 108 static char i = 0, j = 0, open_1 = 1, cloce_1 = 1, k;
846354866 0:25d52c6a3448 109 if (strncmp(led_control, "cloce", 5)==0)
846354866 0:25d52c6a3448 110 {uart.printf("status_led--cloce--- %d\n", status_led);
846354866 0:25d52c6a3448 111 if(cloce_1)
846354866 0:25d52c6a3448 112 {
846354866 0:25d52c6a3448 113 sprintf(httpHeader,"<H1>Led state:CLOCE</H1>");
846354866 0:25d52c6a3448 114 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 115 myOutD12.write(0);
846354866 0:25d52c6a3448 116 sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 117 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 118
846354866 0:25d52c6a3448 119 j = 1;
846354866 0:25d52c6a3448 120 k = status_led;
846354866 0:25d52c6a3448 121 cloce_1 = 0;
846354866 0:25d52c6a3448 122 }
846354866 0:25d52c6a3448 123 else if (k == status_led && j)
846354866 0:25d52c6a3448 124 {
846354866 0:25d52c6a3448 125 sprintf(httpHeader,"<H1>Led state:CLOCE</H1>");
846354866 0:25d52c6a3448 126 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 127 myOutD12.write(0);
846354866 0:25d52c6a3448 128 sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 129 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 130 j = 0;
846354866 0:25d52c6a3448 131 }
846354866 0:25d52c6a3448 132 else if(status_led && !j)
846354866 0:25d52c6a3448 133 {
846354866 0:25d52c6a3448 134 sprintf(httpHeader,"<H1>Led state:OPEN</H1>");
846354866 0:25d52c6a3448 135 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 136 myOutD12.write(1);
846354866 0:25d52c6a3448 137 sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 138 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 139 }
846354866 0:25d52c6a3448 140 else if(!status_led && !j)
846354866 0:25d52c6a3448 141 {
846354866 0:25d52c6a3448 142 sprintf(httpHeader,"<H1>Led state:CLOCE</H1>");
846354866 0:25d52c6a3448 143 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 144 myOutD12.write(0);
846354866 0:25d52c6a3448 145 sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 146 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 147 }
846354866 0:25d52c6a3448 148
846354866 0:25d52c6a3448 149 open_1 = 1;
846354866 0:25d52c6a3448 150 }
846354866 0:25d52c6a3448 151 else if (strncmp(led_control, "open", 4)==0)
846354866 0:25d52c6a3448 152 {uart.printf("status_led--open--- %d\n", status_led);
846354866 0:25d52c6a3448 153 if(open_1)
846354866 0:25d52c6a3448 154 {
846354866 0:25d52c6a3448 155 sprintf(httpHeader,"<H1>Led state:OPEN</H1>");
846354866 0:25d52c6a3448 156 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 157 myOutD12.write(1);
846354866 0:25d52c6a3448 158 sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 159 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 160
846354866 0:25d52c6a3448 161 i = 1;
846354866 0:25d52c6a3448 162 k = status_led;
846354866 0:25d52c6a3448 163 open_1 = 0;
846354866 0:25d52c6a3448 164 }
846354866 0:25d52c6a3448 165 else if(k == status_led && i)
846354866 0:25d52c6a3448 166 {
846354866 0:25d52c6a3448 167 sprintf(httpHeader,"<H1>Led state:OPEN</H1>");
846354866 0:25d52c6a3448 168 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 169 myOutD12.write(1);
846354866 0:25d52c6a3448 170 sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 171 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 172 i = 0;
846354866 0:25d52c6a3448 173 }
846354866 0:25d52c6a3448 174 else if (status_led && !i)// 0
846354866 0:25d52c6a3448 175 {
846354866 0:25d52c6a3448 176 sprintf(httpHeader,"<H1>Led state:OPEN</H1>");
846354866 0:25d52c6a3448 177 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 178 myOutD12.write(1);
846354866 0:25d52c6a3448 179 sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 180 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 181 }
846354866 0:25d52c6a3448 182 else if (!status_led && !i)
846354866 0:25d52c6a3448 183 {
846354866 0:25d52c6a3448 184 sprintf(httpHeader,"<H1>Led state:CLOCE</H1>");
846354866 0:25d52c6a3448 185 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 186 myOutD12.write(0);
846354866 0:25d52c6a3448 187 sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 188 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 189 }
846354866 0:25d52c6a3448 190
846354866 0:25d52c6a3448 191 cloce_1 = 1;
846354866 0:25d52c6a3448 192 }
846354866 0:25d52c6a3448 193
846354866 0:25d52c6a3448 194 if (strncmp(led_control, "", 1)==0)
846354866 0:25d52c6a3448 195 {
846354866 0:25d52c6a3448 196 if(myOutD12.read())
846354866 0:25d52c6a3448 197 {
846354866 0:25d52c6a3448 198 sprintf(httpHeader,"<H1>Led state:OPEN</H1>");
846354866 0:25d52c6a3448 199 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 200 myOutD12.write(1);
846354866 0:25d52c6a3448 201
846354866 0:25d52c6a3448 202 sprintf(httpHeader,"<form action=\"http://%s/cloce\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 203 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 204 status_led = 1;
846354866 0:25d52c6a3448 205 }
846354866 0:25d52c6a3448 206 else
846354866 0:25d52c6a3448 207 {
846354866 0:25d52c6a3448 208 sprintf(httpHeader,"<H1>Led state:CLOCE</H1>");
846354866 0:25d52c6a3448 209 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 210 myOutD12.write(0);
846354866 0:25d52c6a3448 211
846354866 0:25d52c6a3448 212 sprintf(httpHeader,"<form action=\"http://%s/open\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip);
846354866 0:25d52c6a3448 213 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 214 status_led = 0;
846354866 0:25d52c6a3448 215 }
846354866 0:25d52c6a3448 216 }
846354866 0:25d52c6a3448 217 //status_led = myOutD12.read();
846354866 0:25d52c6a3448 218 /*if(!status_led)
846354866 0:25d52c6a3448 219 {
846354866 0:25d52c6a3448 220 sprintf(httpHeader,"<H1>Led state:OPEN </H1>");
846354866 0:25d52c6a3448 221 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 222 myOutD12.write(1);
846354866 0:25d52c6a3448 223 }else
846354866 0:25d52c6a3448 224 {
846354866 0:25d52c6a3448 225 sprintf(httpHeader,"<H1>Led state:CLOCE </H1>");
846354866 0:25d52c6a3448 226 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 227 myOutD12.write(0);
846354866 0:25d52c6a3448 228 }
846354866 0:25d52c6a3448 229
846354866 0:25d52c6a3448 230
846354866 0:25d52c6a3448 231 sprintf(httpHeader,"<form action=\"http://%s/%s\"><input type=\"submit\" value=\"ON/OFF\"></form>", seaver_ip, led_control);
846354866 0:25d52c6a3448 232 client.send(httpHeader,strlen(httpHeader));*/
846354866 0:25d52c6a3448 233
846354866 0:25d52c6a3448 234 sprintf(httpHeader,"<meta http-equiv=\"refresh\" content=\"1\">");
846354866 0:25d52c6a3448 235 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 236
846354866 0:25d52c6a3448 237 sprintf(httpHeader,"</ul></body></html>");
846354866 0:25d52c6a3448 238 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 239 }
846354866 0:25d52c6a3448 240
846354866 0:25d52c6a3448 241 int main (void)
846354866 0:25d52c6a3448 242 {
846354866 0:25d52c6a3448 243 uart.baud(115200);
846354866 0:25d52c6a3448 244 uart.printf("Initializing\r\n");
846354866 0:25d52c6a3448 245 // EthernetInterface eth;
846354866 0:25d52c6a3448 246 uart.printf("Initializing Ethernet\r\n");
846354866 0:25d52c6a3448 247 //eth.init(); //Use DHCP
846354866 0:25d52c6a3448 248 //eth.init((uint8_t*)MAC); // Use DHCP for WIZnetInterface
846354866 0:25d52c6a3448 249 eth.init((uint8_t*)MAC,IP,MASK,GATEWAY); //IP,mask,Gateway
846354866 0:25d52c6a3448 250 uart.printf("Connecting\r\n");
846354866 0:25d52c6a3448 251 eth.connect();
846354866 0:25d52c6a3448 252 uart.printf("IP Address is %s\r\n", eth.getIPAddress());
846354866 0:25d52c6a3448 253
846354866 0:25d52c6a3448 254 // TCPSocketServer server;
846354866 0:25d52c6a3448 255 server.bind(HTTPD_SERVER_PORT);
846354866 0:25d52c6a3448 256 server.listen();
846354866 0:25d52c6a3448 257 uart.printf("Server Listening\r\n");
846354866 0:25d52c6a3448 258
846354866 0:25d52c6a3448 259 button_ledTimeout.attach(&button_led,0.1f);
846354866 0:25d52c6a3448 260 //receive_dht11Timeout.attach(&receive_dht11,0.2f);
846354866 0:25d52c6a3448 261
846354866 0:25d52c6a3448 262 while (true) {
846354866 0:25d52c6a3448 263 uart.printf("\nWait for new connection...\r\n");
846354866 0:25d52c6a3448 264 server.accept(client);
846354866 0:25d52c6a3448 265 client.set_blocking(false, 1500); // Timeout after (1.5)s
846354866 0:25d52c6a3448 266
846354866 0:25d52c6a3448 267 uart.printf("Connection from: %s\r\n", client.get_address());
846354866 0:25d52c6a3448 268 uart.printf("%s():%d\n",__FUNCTION__, __LINE__);
846354866 0:25d52c6a3448 269 while (true) {
846354866 0:25d52c6a3448 270 //led2 = true;
846354866 0:25d52c6a3448 271 int n = client.receive(buffer, sizeof(buffer));
846354866 0:25d52c6a3448 272 if (n <= 0) break;
846354866 0:25d52c6a3448 273 uart.printf("Recieved Data: %d\r\n\r\n%.*s\r\n",n,n,buffer);
846354866 0:25d52c6a3448 274 if (n >= 1024) {
846354866 0:25d52c6a3448 275 sprintf(httpHeader,"HTTP/1.1 413 Request Entity Too Large \r\nContent-Type: text\r\nConnection: Close\r\n\r\n");
846354866 0:25d52c6a3448 276 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 277 client.send(buffer,n);
846354866 0:25d52c6a3448 278 break;
846354866 0:25d52c6a3448 279 } else {
846354866 0:25d52c6a3448 280 uart.printf("%s():%d\n",__FUNCTION__, __LINE__);
846354866 0:25d52c6a3448 281 buffer[n]=0;
846354866 0:25d52c6a3448 282 }
846354866 0:25d52c6a3448 283 if (!strncmp(buffer, "GET ", 4)) {
846354866 0:25d52c6a3448 284 uart.printf("%s():%d\n",__FUNCTION__, __LINE__);
846354866 0:25d52c6a3448 285 uristr = buffer + 4;
846354866 0:25d52c6a3448 286 eou = strstr(uristr, " ");
846354866 0:25d52c6a3448 287 if (eou == NULL) {
846354866 0:25d52c6a3448 288 uart.printf("%s():%d\n",__FUNCTION__, __LINE__);
846354866 0:25d52c6a3448 289 sprintf(httpHeader,"HTTP/1.1 400 Bad Request \r\nContent-Type: text\r\nConnection: Close\r\n\r\n");
846354866 0:25d52c6a3448 290 client.send(httpHeader,strlen(httpHeader));
846354866 0:25d52c6a3448 291 client.send(buffer,n);
846354866 0:25d52c6a3448 292 } else {
846354866 0:25d52c6a3448 293 uart.printf("%s():%d\n",__FUNCTION__, __LINE__);
846354866 0:25d52c6a3448 294 *eou = 0;
846354866 0:25d52c6a3448 295 getFile(uristr);
846354866 0:25d52c6a3448 296 }
846354866 0:25d52c6a3448 297 }
846354866 0:25d52c6a3448 298 }
846354866 0:25d52c6a3448 299 //led2 = false;
846354866 0:25d52c6a3448 300 client.close();
846354866 0:25d52c6a3448 301 }
846354866 0:25d52c6a3448 302 }
846354866 0:25d52c6a3448 303
846354866 0:25d52c6a3448 304 unsigned char receive_byte()//接收一个字节//
846354866 0:25d52c6a3448 305 {
846354866 0:25d52c6a3448 306 unsigned char i,temp;
846354866 0:25d52c6a3448 307 for(i=0;i<8;i++)//接收8bit的数据
846354866 0:25d52c6a3448 308 {
846354866 0:25d52c6a3448 309 U8FLAG = 2;
846354866 0:25d52c6a3448 310 while(!myIOD10.read() && U8FLAG++);//等待50us的低电平开始信号结束
846354866 0:25d52c6a3448 311 Delay_us(30);
846354866 0:25d52c6a3448 312 temp=0;//时间为 26us-28us数据'0'
846354866 0:25d52c6a3448 313 if(myIOD10.read()==1)
846354866 0:25d52c6a3448 314 temp=1;//如果 26us-28us'1'
846354866 0:25d52c6a3448 315 U8FLAG = 2;
846354866 0:25d52c6a3448 316 while(myIOD10.read() && U8FLAG++);//'0'为 26us-28us'1'为 70us
846354866 0:25d52c6a3448 317 //超时则跳出for循环
846354866 0:25d52c6a3448 318 if(U8FLAG==1)break;
846354866 0:25d52c6a3448 319 data_byte<<=1;//
846354866 0:25d52c6a3448 320 data_byte|=temp;
846354866 0:25d52c6a3448 321 }
846354866 0:25d52c6a3448 322 return data_byte;
846354866 0:25d52c6a3448 323 }
846354866 0:25d52c6a3448 324
846354866 0:25d52c6a3448 325 void receive_dht11()//接收数据//
846354866 0:25d52c6a3448 326 {
846354866 0:25d52c6a3448 327 unsigned char T_H,T_L,R_H,R_L,check,num_check;
846354866 0:25d52c6a3448 328
846354866 0:25d52c6a3448 329 // REQUEST SAMPLE
846354866 0:25d52c6a3448 330 myIOD10.output();
846354866 0:25d52c6a3448 331 myIOD10.write(0);
846354866 0:25d52c6a3448 332 delay(20);//wait(0.020f);
846354866 0:25d52c6a3448 333
846354866 0:25d52c6a3448 334 myIOD10.write(1);
846354866 0:25d52c6a3448 335 Delay_us(25);//wait(26/1000*0.001f);
846354866 0:25d52c6a3448 336 myIOD10.write(1);
846354866 0:25d52c6a3448 337
846354866 0:25d52c6a3448 338 myIOD10.input();
846354866 0:25d52c6a3448 339 if(!myIOD10.read())//判断从机是否有低电平响应信号//
846354866 0:25d52c6a3448 340 {
846354866 0:25d52c6a3448 341 while(!myIOD10.read());//判断从机发出 80us 的低电平响应信号是否结束//
846354866 0:25d52c6a3448 342 while(myIOD10.read());//判断从机发出  80us
846354866 0:25d52c6a3448 343 R_H=receive_byte();//湿度高位
846354866 0:25d52c6a3448 344 R_L=receive_byte();//湿度低位
846354866 0:25d52c6a3448 345 T_H=receive_byte();//温度高位
846354866 0:25d52c6a3448 346 T_L=receive_byte();//温度低位
846354866 0:25d52c6a3448 347 check=receive_byte();//校验位
846354866 0:25d52c6a3448 348 uart.printf("--R_H--%d---R_L---%d--T_H--%d---T_L---%d\r\n", R_H,R_L,T_H,T_L);
846354866 0:25d52c6a3448 349 Delay_us(20);
846354866 0:25d52c6a3448 350 num_check=R_H+R_L+T_H+T_L;uart.printf("--num_check--%d---check---%d\r\n", num_check,check);
846354866 0:25d52c6a3448 351 if(num_check==check)//判断读到的四个数据之和是否与校验位相同
846354866 0:25d52c6a3448 352 {
846354866 0:25d52c6a3448 353 RH=R_H;
846354866 0:25d52c6a3448 354 RL=R_L;
846354866 0:25d52c6a3448 355 TH=T_H;
846354866 0:25d52c6a3448 356 TL=T_L;
846354866 0:25d52c6a3448 357 check=num_check;
846354866 0:25d52c6a3448 358 }
846354866 0:25d52c6a3448 359 }
846354866 0:25d52c6a3448 360
846354866 0:25d52c6a3448 361 /*uart.printf("humidity [H] -out--%d\r\n", RH);
846354866 0:25d52c6a3448 362 uart.printf("humidity [L] -out--%d\r\n", RL);
846354866 0:25d52c6a3448 363 uart.printf("temperature [H] -out--%d\r\n", TH);
846354866 0:25d52c6a3448 364 uart.printf("temperature [L] -out--%d\r\n", TL);*/
846354866 0:25d52c6a3448 365
846354866 0:25d52c6a3448 366 receive_dht11Timeout.attach(&receive_dht11,0.2f);
846354866 0:25d52c6a3448 367 }