add all sensors used

Dependencies:   mbed QEI-1 nRF24L01P xiugai

Committer:
brainliang
Date:
Tue Dec 01 01:38:26 2020 +0000
Revision:
7:dc221ddd4588
peixun_template

Who changed what in which revision?

UserRevisionLine numberNew contents of line
brainliang 7:dc221ddd4588 1 #include "sensors.h"
brainliang 7:dc221ddd4588 2
brainliang 7:dc221ddd4588 3 #ifdef ENABLE_SENSORS
brainliang 7:dc221ddd4588 4
brainliang 7:dc221ddd4588 5 #include "mbed.h"
brainliang 7:dc221ddd4588 6
brainliang 7:dc221ddd4588 7 extern Serial ser2usb;
brainliang 7:dc221ddd4588 8 extern DigitalOut myled;
brainliang 7:dc221ddd4588 9 //============================================================SR501
brainliang 7:dc221ddd4588 10 void sr501::triggered() //触发中断!!
brainliang 7:dc221ddd4588 11 {
brainliang 7:dc221ddd4588 12 // ser2usb.printf("sr501 Triggered!\r\n");
brainliang 7:dc221ddd4588 13 status = true;
brainliang 7:dc221ddd4588 14 }
brainliang 7:dc221ddd4588 15 //--------
brainliang 7:dc221ddd4588 16 sr501::sr501(PinName pSignal) //启动热释电!!!
brainliang 7:dc221ddd4588 17 : status(false), signal(pSignal)
brainliang 7:dc221ddd4588 18 {
brainliang 7:dc221ddd4588 19 signal.rise(callback(this, &sr501::triggered));
brainliang 7:dc221ddd4588 20 ser2usb.printf("sr501 start!\r\n");
brainliang 7:dc221ddd4588 21 }
brainliang 7:dc221ddd4588 22 //-------
brainliang 7:dc221ddd4588 23 bool sr501::operator==(const bool &target)
brainliang 7:dc221ddd4588 24 {
brainliang 7:dc221ddd4588 25 if(status == target)
brainliang 7:dc221ddd4588 26 {
brainliang 7:dc221ddd4588 27 return true;
brainliang 7:dc221ddd4588 28 }
brainliang 7:dc221ddd4588 29 else
brainliang 7:dc221ddd4588 30 {
brainliang 7:dc221ddd4588 31 return false;
brainliang 7:dc221ddd4588 32 }
brainliang 7:dc221ddd4588 33 }
brainliang 7:dc221ddd4588 34 //-------
brainliang 7:dc221ddd4588 35 void sr501::reset()
brainliang 7:dc221ddd4588 36 {
brainliang 7:dc221ddd4588 37 status = false;
brainliang 7:dc221ddd4588 38 }
brainliang 7:dc221ddd4588 39 //-------
brainliang 7:dc221ddd4588 40 int sr501::read()
brainliang 7:dc221ddd4588 41 {
brainliang 7:dc221ddd4588 42 return signal.read();
brainliang 7:dc221ddd4588 43 }
brainliang 7:dc221ddd4588 44 //-------
brainliang 7:dc221ddd4588 45 #ifdef ENABLE_ESP8266
brainliang 7:dc221ddd4588 46 void sr501::send_status(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 47 {
brainliang 7:dc221ddd4588 48 char buff[32];
brainliang 7:dc221ddd4588 49 sprintf(buff, "%d", this->read());
brainliang 7:dc221ddd4588 50
brainliang 7:dc221ddd4588 51 ser2usb.printf("-----sr501-----\r\nSending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 52 /*++++++++++++++++++++++++++++++++++++++++++*/
brainliang 7:dc221ddd4588 53 client.publish_value(topic, "_upload"); /* 务必先在topic下发布_upload消息 */
brainliang 7:dc221ddd4588 54 wait(0.01); /* 等一段时间后上传传感器数据 */
brainliang 7:dc221ddd4588 55 client.publish_value(topic, buff); /* 上传传感器数据后等一段时间 */
brainliang 7:dc221ddd4588 56 wait(0.01); /* 然后务必在topic下发布_end消息 */
brainliang 7:dc221ddd4588 57 client.publish_value(topic, "_end"); /*++++++++++++++++++++++++++++++++++++++++++*/
brainliang 7:dc221ddd4588 58
brainliang 7:dc221ddd4588 59 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 60 }
brainliang 7:dc221ddd4588 61 #endif // ENABLE_ESP8266
brainliang 7:dc221ddd4588 62 //========================================== //BH1750
brainliang 7:dc221ddd4588 63 BH1750::BH1750(PinName sda,PinName scl) //启动光强!!!!!(默认设置)
brainliang 7:dc221ddd4588 64 :link(sda,scl)
brainliang 7:dc221ddd4588 65 {
brainliang 7:dc221ddd4588 66 status = true;
brainliang 7:dc221ddd4588 67 char mode[1]={BH1750_CONTINUOUS_HIGH_RES_MODE};
brainliang 7:dc221ddd4588 68 ser2usb.printf("modifying\r\n");
brainliang 7:dc221ddd4588 69 while(status)
brainliang 7:dc221ddd4588 70 {
brainliang 7:dc221ddd4588 71 status = link.write(BH1750_I2CADDR, mode, sizeof(mode), false);
brainliang 7:dc221ddd4588 72 wait_ms(10);
brainliang 7:dc221ddd4588 73 }
brainliang 7:dc221ddd4588 74 ser2usb.printf("BH1750 start with default mode!\r\n");
brainliang 7:dc221ddd4588 75 }
brainliang 7:dc221ddd4588 76 //--------
brainliang 7:dc221ddd4588 77 BH1750::BH1750(PinName sda,PinName scl,char mode[]) //启动光强!!!!!(自定义设置)
brainliang 7:dc221ddd4588 78 :link(sda,scl)
brainliang 7:dc221ddd4588 79 {
brainliang 7:dc221ddd4588 80 status = true;
brainliang 7:dc221ddd4588 81 while(status)
brainliang 7:dc221ddd4588 82 {
brainliang 7:dc221ddd4588 83 status = link.write(BH1750_I2CADDR, mode, sizeof(mode), false);
brainliang 7:dc221ddd4588 84 wait_ms(10);
brainliang 7:dc221ddd4588 85 }
brainliang 7:dc221ddd4588 86 ser2usb.printf("BH1750 start with customize mode!\r\n");
brainliang 7:dc221ddd4588 87 }
brainliang 7:dc221ddd4588 88 //--------
brainliang 7:dc221ddd4588 89 float BH1750::getlightdata() //读取光强(lux)
brainliang 7:dc221ddd4588 90 {
brainliang 7:dc221ddd4588 91 status = true;
brainliang 7:dc221ddd4588 92 status = link.read(BH1750_I2CADDR, rawdata, 2, false);
brainliang 7:dc221ddd4588 93 if(!status)
brainliang 7:dc221ddd4588 94 {
brainliang 7:dc221ddd4588 95 float result = ((rawdata[0]<<8)|rawdata[1])/1.2;
brainliang 7:dc221ddd4588 96 return result;
brainliang 7:dc221ddd4588 97 }
brainliang 7:dc221ddd4588 98 else
brainliang 7:dc221ddd4588 99 {
brainliang 7:dc221ddd4588 100 ser2usb.printf("BH1750 read fail!\r\n");
brainliang 7:dc221ddd4588 101 return -1;
brainliang 7:dc221ddd4588 102 }
brainliang 7:dc221ddd4588 103 }
brainliang 7:dc221ddd4588 104
brainliang 7:dc221ddd4588 105 #ifdef ENABLE_ESP8266
brainliang 7:dc221ddd4588 106 void BH1750::send_data(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 107 {
brainliang 7:dc221ddd4588 108 char buff[32];
brainliang 7:dc221ddd4588 109 sprintf(buff, "%.3f", this->getlightdata());
brainliang 7:dc221ddd4588 110
brainliang 7:dc221ddd4588 111 ser2usb.printf("-----BH1750-----\r\nSending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 112
brainliang 7:dc221ddd4588 113 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 114 wait(0.01);
brainliang 7:dc221ddd4588 115 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 116 wait(0.01);
brainliang 7:dc221ddd4588 117 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 118
brainliang 7:dc221ddd4588 119 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 120 }
brainliang 7:dc221ddd4588 121 #endif // ENABLE_ESP8266
brainliang 7:dc221ddd4588 122 //==============================================MQ-2
brainliang 7:dc221ddd4588 123 mq::mq(PinName dio)
brainliang 7:dc221ddd4588 124 : status(false), signal(dio),signallevel(PC_13)
brainliang 7:dc221ddd4588 125 {
brainliang 7:dc221ddd4588 126 signal.fall(callback(this, &mq::triggered));
brainliang 7:dc221ddd4588 127 ser2usb.printf("mq start!\r\n");
brainliang 7:dc221ddd4588 128 }
brainliang 7:dc221ddd4588 129 //--------
brainliang 7:dc221ddd4588 130 mq::mq(PinName dio,PinName aio)
brainliang 7:dc221ddd4588 131 : status(false), signal(dio),signallevel(aio)
brainliang 7:dc221ddd4588 132 {
brainliang 7:dc221ddd4588 133 signal.fall(callback(this, &mq::triggered));
brainliang 7:dc221ddd4588 134 ser2usb.printf("mq start!\r\n");
brainliang 7:dc221ddd4588 135 }
brainliang 7:dc221ddd4588 136 //--------
brainliang 7:dc221ddd4588 137 void mq::triggered() //触发中断!!
brainliang 7:dc221ddd4588 138 {
brainliang 7:dc221ddd4588 139 ser2usb.printf("mq Triggered!\r\n");
brainliang 7:dc221ddd4588 140 status = true;
brainliang 7:dc221ddd4588 141 }
brainliang 7:dc221ddd4588 142 //--------
brainliang 7:dc221ddd4588 143 bool mq::operator==(const bool &target)
brainliang 7:dc221ddd4588 144 {
brainliang 7:dc221ddd4588 145 if(status == target)
brainliang 7:dc221ddd4588 146 {
brainliang 7:dc221ddd4588 147 return true;
brainliang 7:dc221ddd4588 148 }
brainliang 7:dc221ddd4588 149 else
brainliang 7:dc221ddd4588 150 {
brainliang 7:dc221ddd4588 151 return false;
brainliang 7:dc221ddd4588 152 }
brainliang 7:dc221ddd4588 153 }
brainliang 7:dc221ddd4588 154 //--------
brainliang 7:dc221ddd4588 155 float mq::getairdata()
brainliang 7:dc221ddd4588 156 {
brainliang 7:dc221ddd4588 157 return signallevel.read();
brainliang 7:dc221ddd4588 158 }
brainliang 7:dc221ddd4588 159 //-----------
brainliang 7:dc221ddd4588 160 void mq::reset()
brainliang 7:dc221ddd4588 161 {
brainliang 7:dc221ddd4588 162 status = false;
brainliang 7:dc221ddd4588 163 }
brainliang 7:dc221ddd4588 164 int mq::read()
brainliang 7:dc221ddd4588 165 {
brainliang 7:dc221ddd4588 166 return signal.read();
brainliang 7:dc221ddd4588 167 }
brainliang 7:dc221ddd4588 168
brainliang 7:dc221ddd4588 169 #ifdef ENABLE_ESP8266
brainliang 7:dc221ddd4588 170 void mq::send_data(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 171 {
brainliang 7:dc221ddd4588 172 char buff[32];
brainliang 7:dc221ddd4588 173 sprintf(buff, "%d", this->read());
brainliang 7:dc221ddd4588 174
brainliang 7:dc221ddd4588 175 ser2usb.printf("-----mq-----\r\nSending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 176
brainliang 7:dc221ddd4588 177 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 178 wait(0.01);
brainliang 7:dc221ddd4588 179 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 180 wait(0.01);
brainliang 7:dc221ddd4588 181 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 182
brainliang 7:dc221ddd4588 183 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 184 }
brainliang 7:dc221ddd4588 185 #endif // ENABLE_ESP8266
brainliang 7:dc221ddd4588 186 //===========================================DHT11
brainliang 7:dc221ddd4588 187 dht11::dht11(PinName pin)
brainliang 7:dc221ddd4588 188 :datapin(pin)
brainliang 7:dc221ddd4588 189 {
brainliang 7:dc221ddd4588 190 starttime.start();
brainliang 7:dc221ddd4588 191 ser2usb.printf("dht11 start!\r\n");
brainliang 7:dc221ddd4588 192 }
brainliang 7:dc221ddd4588 193 //----------
brainliang 7:dc221ddd4588 194 int dht11::getdata()
brainliang 7:dc221ddd4588 195 {
brainliang 7:dc221ddd4588 196 int timeout=10000;
brainliang 7:dc221ddd4588 197 uint8_t data[5];
brainliang 7:dc221ddd4588 198 uint8_t bit=7;
brainliang 7:dc221ddd4588 199 uint8_t count=0;
brainliang 7:dc221ddd4588 200
brainliang 7:dc221ddd4588 201 for(int i=0;i<5;i++)
brainliang 7:dc221ddd4588 202 {
brainliang 7:dc221ddd4588 203 data[i]=0;
brainliang 7:dc221ddd4588 204 }
brainliang 7:dc221ddd4588 205 if(starttime.read_ms()<1500){while(starttime.read_ms()<1500){}starttime.stop();}
brainliang 7:dc221ddd4588 206
brainliang 7:dc221ddd4588 207 datapin.output();
brainliang 7:dc221ddd4588 208 datapin=0;
brainliang 7:dc221ddd4588 209 wait_ms(19);
brainliang 7:dc221ddd4588 210 datapin=1;
brainliang 7:dc221ddd4588 211 wait_us(30);
brainliang 7:dc221ddd4588 212 datapin.input();
brainliang 7:dc221ddd4588 213
brainliang 7:dc221ddd4588 214 while(!datapin)
brainliang 7:dc221ddd4588 215 {
brainliang 7:dc221ddd4588 216 if(timeout--==0){ser2usb.printf("timeout!no reset\r\n");return 0;}
brainliang 7:dc221ddd4588 217 }
brainliang 7:dc221ddd4588 218 timeout=10000;
brainliang 7:dc221ddd4588 219 while(datapin)
brainliang 7:dc221ddd4588 220 {
brainliang 7:dc221ddd4588 221 if(timeout--==0){ser2usb.printf("timeout! no response\r\n");return 0;}
brainliang 7:dc221ddd4588 222 }
brainliang 7:dc221ddd4588 223 timeout=10000;
brainliang 7:dc221ddd4588 224 for(int i=0;i<40;i++)
brainliang 7:dc221ddd4588 225 {
brainliang 7:dc221ddd4588 226 while(!datapin)
brainliang 7:dc221ddd4588 227 {
brainliang 7:dc221ddd4588 228 if(timeout--==0){ser2usb.printf("timeout!\r\n");return 0;}
brainliang 7:dc221ddd4588 229 }
brainliang 7:dc221ddd4588 230 timer.start();
brainliang 7:dc221ddd4588 231 timeout=10000;
brainliang 7:dc221ddd4588 232 while(datapin)
brainliang 7:dc221ddd4588 233 {
brainliang 7:dc221ddd4588 234 if(timeout--==0){ser2usb.printf("timeout!n\r\n");return 0;}
brainliang 7:dc221ddd4588 235 }
brainliang 7:dc221ddd4588 236 timeout=10000;
brainliang 7:dc221ddd4588 237 long t=timer.read_us();
brainliang 7:dc221ddd4588 238 timer.stop();
brainliang 7:dc221ddd4588 239 timer.reset();
brainliang 7:dc221ddd4588 240
brainliang 7:dc221ddd4588 241 if(bit==0)
brainliang 7:dc221ddd4588 242 {
brainliang 7:dc221ddd4588 243 if(t>40){data[count]|=(1<<bit);}
brainliang 7:dc221ddd4588 244 bit=7;
brainliang 7:dc221ddd4588 245 count++;
brainliang 7:dc221ddd4588 246 }
brainliang 7:dc221ddd4588 247 else
brainliang 7:dc221ddd4588 248 {
brainliang 7:dc221ddd4588 249 if(t>40)
brainliang 7:dc221ddd4588 250 {
brainliang 7:dc221ddd4588 251 data[count]|=(1<<bit);
brainliang 7:dc221ddd4588 252 }
brainliang 7:dc221ddd4588 253 bit--;
brainliang 7:dc221ddd4588 254 }
brainliang 7:dc221ddd4588 255 }
brainliang 7:dc221ddd4588 256 datapin=1;
brainliang 7:dc221ddd4588 257 if(data[4]==data[0]+data[1]+data[2]+data[3])
brainliang 7:dc221ddd4588 258 {
brainliang 7:dc221ddd4588 259 //ser2usb.printf("Humidity (%):%f\r\n",(float)data[0]);
brainliang 7:dc221ddd4588 260 //ser2usb.printf("Temperature (oC): %f\r\n",(float)data[2]);
brainliang 7:dc221ddd4588 261 H=data[0]+data[1]/10.0;
brainliang 7:dc221ddd4588 262 T=data[2]+data[3]/10.0;
brainliang 7:dc221ddd4588 263 return 1;
brainliang 7:dc221ddd4588 264 }
brainliang 7:dc221ddd4588 265 else
brainliang 7:dc221ddd4588 266 {
brainliang 7:dc221ddd4588 267 ser2usb.printf("error!\r\ndata0:%d\tdata1:%d\r\ndata2:%d\tdata3:%d\r\ndata4:%d\r\n",
brainliang 7:dc221ddd4588 268 (int)data[0],
brainliang 7:dc221ddd4588 269 (int)data[1],
brainliang 7:dc221ddd4588 270 (int)data[2],
brainliang 7:dc221ddd4588 271 (int)data[3],
brainliang 7:dc221ddd4588 272 (int)data[4]);
brainliang 7:dc221ddd4588 273 return 0;
brainliang 7:dc221ddd4588 274 }
brainliang 7:dc221ddd4588 275 }
brainliang 7:dc221ddd4588 276 //-------
brainliang 7:dc221ddd4588 277 float dht11::gethumidity()
brainliang 7:dc221ddd4588 278 {
brainliang 7:dc221ddd4588 279 return H;
brainliang 7:dc221ddd4588 280 }
brainliang 7:dc221ddd4588 281 //-------
brainliang 7:dc221ddd4588 282 float dht11::gettemperature()
brainliang 7:dc221ddd4588 283 {
brainliang 7:dc221ddd4588 284 return T;
brainliang 7:dc221ddd4588 285 }
brainliang 7:dc221ddd4588 286
brainliang 7:dc221ddd4588 287 #ifdef ENABLE_ESP8266
brainliang 7:dc221ddd4588 288 void dht11::send_temp(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 289 {
brainliang 7:dc221ddd4588 290 char buff[32];
brainliang 7:dc221ddd4588 291 if(this->getdata())
brainliang 7:dc221ddd4588 292 sprintf(buff, "%.3f", this->gettemperature());
brainliang 7:dc221ddd4588 293 else
brainliang 7:dc221ddd4588 294 {
brainliang 7:dc221ddd4588 295 ser2usb.printf("dht11 not aviliable\r\n");
brainliang 7:dc221ddd4588 296 return;
brainliang 7:dc221ddd4588 297 }
brainliang 7:dc221ddd4588 298
brainliang 7:dc221ddd4588 299 ser2usb.printf("Sending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 300
brainliang 7:dc221ddd4588 301 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 302 wait(0.01);
brainliang 7:dc221ddd4588 303 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 304 wait(0.01);
brainliang 7:dc221ddd4588 305 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 306
brainliang 7:dc221ddd4588 307 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 308 }
brainliang 7:dc221ddd4588 309 void dht11::send_humi(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 310 {
brainliang 7:dc221ddd4588 311 char buff[32];
brainliang 7:dc221ddd4588 312 if(this->getdata())
brainliang 7:dc221ddd4588 313 sprintf(buff, "%.3f", this->gethumidity());
brainliang 7:dc221ddd4588 314 else
brainliang 7:dc221ddd4588 315 {
brainliang 7:dc221ddd4588 316 ser2usb.printf("dht11 not aviliable\r\n");
brainliang 7:dc221ddd4588 317 return;
brainliang 7:dc221ddd4588 318 }
brainliang 7:dc221ddd4588 319
brainliang 7:dc221ddd4588 320 ser2usb.printf("-----dht11-----\r\nSending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 321
brainliang 7:dc221ddd4588 322 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 323 wait(0.01);
brainliang 7:dc221ddd4588 324 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 325 wait(0.01);
brainliang 7:dc221ddd4588 326 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 327
brainliang 7:dc221ddd4588 328 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 329 }
brainliang 7:dc221ddd4588 330 #endif // ENABLE_ESP8266
brainliang 7:dc221ddd4588 331 //============================================DS18B20
brainliang 7:dc221ddd4588 332 DS18B20::DS18B20(PinName pin)
brainliang 7:dc221ddd4588 333 :datapin(pin)
brainliang 7:dc221ddd4588 334 {
brainliang 7:dc221ddd4588 335 if(start()){ser2usb.printf("DS18B20 started\r\n");}
brainliang 7:dc221ddd4588 336 }
brainliang 7:dc221ddd4588 337 //-----------
brainliang 7:dc221ddd4588 338 int DS18B20::start()
brainliang 7:dc221ddd4588 339 {
brainliang 7:dc221ddd4588 340 //ser2usb.printf("starting\r\n");
brainliang 7:dc221ddd4588 341 datapin.output();
brainliang 7:dc221ddd4588 342 datapin=0;
brainliang 7:dc221ddd4588 343 wait_us(600);
brainliang 7:dc221ddd4588 344 datapin.input();
brainliang 7:dc221ddd4588 345 datapin.mode(PullUp);
brainliang 7:dc221ddd4588 346 wait_us(70);
brainliang 7:dc221ddd4588 347 while(datapin.read()){return 0;}
brainliang 7:dc221ddd4588 348 //ser2usb.printf("started\r\n");
brainliang 7:dc221ddd4588 349 wait_us(250);
brainliang 7:dc221ddd4588 350 return 1;
brainliang 7:dc221ddd4588 351 }
brainliang 7:dc221ddd4588 352 //----------
brainliang 7:dc221ddd4588 353 void DS18B20::writebyte(uint8_t send)
brainliang 7:dc221ddd4588 354 {
brainliang 7:dc221ddd4588 355 datapin.output();
brainliang 7:dc221ddd4588 356 datapin=1;
brainliang 7:dc221ddd4588 357 wait_us(20);
brainliang 7:dc221ddd4588 358 for(int i=0;i<8;i++)
brainliang 7:dc221ddd4588 359 {
brainliang 7:dc221ddd4588 360 datapin.output();
brainliang 7:dc221ddd4588 361 datapin=0; //产生读写时序的起始信号
brainliang 7:dc221ddd4588 362 wait_us(2); //要求至少1us的延时
brainliang 7:dc221ddd4588 363 datapin=send & 0x01; //对总线赋值,从最低位开始写起
brainliang 7:dc221ddd4588 364 wait_us(70);//延时70us,写0在60~120us之间释放,写1的话大于60us均可释放
brainliang 7:dc221ddd4588 365 datapin=1; //释放总线,为下一次mcu送数据做准备,
brainliang 7:dc221ddd4588 366 send>>=1; //有效数据移动到最低位,2次写数据间隙至少需1us
brainliang 7:dc221ddd4588 367 }
brainliang 7:dc221ddd4588 368 datapin.output();
brainliang 7:dc221ddd4588 369 datapin=1;
brainliang 7:dc221ddd4588 370 wait_us(70);
brainliang 7:dc221ddd4588 371 }
brainliang 7:dc221ddd4588 372 //-----------
brainliang 7:dc221ddd4588 373 uint8_t DS18B20::readByte() //mcu读一个字节
brainliang 7:dc221ddd4588 374 {
brainliang 7:dc221ddd4588 375 uint8_t i,value=0;
brainliang 7:dc221ddd4588 376 for(i=0;i<8;i++)
brainliang 7:dc221ddd4588 377 {
brainliang 7:dc221ddd4588 378 datapin.output();
brainliang 7:dc221ddd4588 379 datapin=0; //起始信号
brainliang 7:dc221ddd4588 380 wait_us(2);
brainliang 7:dc221ddd4588 381 datapin.input(); //mcu释放总线
brainliang 7:dc221ddd4588 382 datapin.mode(PullUp);
brainliang 7:dc221ddd4588 383 if(datapin)
brainliang 7:dc221ddd4588 384 {
brainliang 7:dc221ddd4588 385 value=value|0x80;//保存高电平数据,低电平的话不用保存,移位后默认是0
brainliang 7:dc221ddd4588 386 }
brainliang 7:dc221ddd4588 387 value>>=1;
brainliang 7:dc221ddd4588 388 wait_us(30); //延时40us
brainliang 7:dc221ddd4588 389 }
brainliang 7:dc221ddd4588 390 return value;
brainliang 7:dc221ddd4588 391 }
brainliang 7:dc221ddd4588 392 //------------
brainliang 7:dc221ddd4588 393 float DS18B20::transfer(uint8_t h,uint8_t l)
brainliang 7:dc221ddd4588 394 {
brainliang 7:dc221ddd4588 395 //h=0x01;
brainliang 7:dc221ddd4588 396 //l=0x01;
brainliang 7:dc221ddd4588 397 int flag=(h&0x01)>>7;
brainliang 7:dc221ddd4588 398 if(!flag)
brainliang 7:dc221ddd4588 399 {
brainliang 7:dc221ddd4588 400 float i=(h*256+l)*0.25;
brainliang 7:dc221ddd4588 401 //ser2usb.printf("flag:%d\th:%d\tl:%d\r\n",flag,h,l);
brainliang 7:dc221ddd4588 402 return i;
brainliang 7:dc221ddd4588 403 }
brainliang 7:dc221ddd4588 404 else
brainliang 7:dc221ddd4588 405 {
brainliang 7:dc221ddd4588 406 float i=((~h)*256+(~l))*0.25*-1;
brainliang 7:dc221ddd4588 407 //ser2usb.printf("flag:%d\th:%d\tl:%d\r\n",flag,h,l);
brainliang 7:dc221ddd4588 408 return i;
brainliang 7:dc221ddd4588 409 }
brainliang 7:dc221ddd4588 410 }
brainliang 7:dc221ddd4588 411 //----------
brainliang 7:dc221ddd4588 412 int DS18B20::getdata()
brainliang 7:dc221ddd4588 413 {
brainliang 7:dc221ddd4588 414 T=5000;
brainliang 7:dc221ddd4588 415 start();
brainliang 7:dc221ddd4588 416 writebyte(0xcc);
brainliang 7:dc221ddd4588 417 writebyte(0x44);
brainliang 7:dc221ddd4588 418 wait(2);
brainliang 7:dc221ddd4588 419
brainliang 7:dc221ddd4588 420 start();
brainliang 7:dc221ddd4588 421 writebyte(0xcc);
brainliang 7:dc221ddd4588 422 writebyte(0xbe);
brainliang 7:dc221ddd4588 423 uint8_t a=readByte();//l
brainliang 7:dc221ddd4588 424 uint8_t b=readByte();//h
brainliang 7:dc221ddd4588 425 T=transfer(b,a);
brainliang 7:dc221ddd4588 426
brainliang 7:dc221ddd4588 427 if(T==5000){return 0;}
brainliang 7:dc221ddd4588 428 else{return 1;}
brainliang 7:dc221ddd4588 429 }
brainliang 7:dc221ddd4588 430 //----------
brainliang 7:dc221ddd4588 431 float DS18B20::gettemperature()
brainliang 7:dc221ddd4588 432 {
brainliang 7:dc221ddd4588 433 if(getdata()){return T;}
brainliang 7:dc221ddd4588 434 else{ser2usb.printf("get temperature fail!\r\n");return 0;}
brainliang 7:dc221ddd4588 435 }
brainliang 7:dc221ddd4588 436
brainliang 7:dc221ddd4588 437 #ifdef ENABLE_ESP8266
brainliang 7:dc221ddd4588 438 void DS18B20::send_temp(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 439 {
brainliang 7:dc221ddd4588 440 char buff[32];
brainliang 7:dc221ddd4588 441 if(this->getdata())
brainliang 7:dc221ddd4588 442 sprintf(buff, "%.3f", this->gettemperature());
brainliang 7:dc221ddd4588 443 else
brainliang 7:dc221ddd4588 444 {
brainliang 7:dc221ddd4588 445 ser2usb.printf("dht11 not aviliable\r\n");
brainliang 7:dc221ddd4588 446 return;
brainliang 7:dc221ddd4588 447 }
brainliang 7:dc221ddd4588 448
brainliang 7:dc221ddd4588 449 ser2usb.printf("-----DS18B20-----\r\nSending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 450
brainliang 7:dc221ddd4588 451 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 452 wait(0.01);
brainliang 7:dc221ddd4588 453 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 454 wait(0.01);
brainliang 7:dc221ddd4588 455 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 456
brainliang 7:dc221ddd4588 457 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 458 }
brainliang 7:dc221ddd4588 459 #endif // ENABLE_ESP8266
brainliang 7:dc221ddd4588 460
brainliang 7:dc221ddd4588 461 //==============================================YL-38
brainliang 7:dc221ddd4588 462 YL::YL(PinName dio)
brainliang 7:dc221ddd4588 463 : status(false), signal(dio),signallevel(PC_13)
brainliang 7:dc221ddd4588 464 {
brainliang 7:dc221ddd4588 465 signal.fall(callback(this, &YL::triggered));
brainliang 7:dc221ddd4588 466 ser2usb.printf("YL start!\r\n");
brainliang 7:dc221ddd4588 467 }
brainliang 7:dc221ddd4588 468 //--------
brainliang 7:dc221ddd4588 469 YL::YL(PinName dio,PinName aio)
brainliang 7:dc221ddd4588 470 : status(false), signal(dio),signallevel(aio)
brainliang 7:dc221ddd4588 471 {
brainliang 7:dc221ddd4588 472 signal.fall(callback(this, &YL::triggered));
brainliang 7:dc221ddd4588 473 ser2usb.printf("YL start!\r\n");
brainliang 7:dc221ddd4588 474 }
brainliang 7:dc221ddd4588 475 //--------
brainliang 7:dc221ddd4588 476 void YL::triggered() //触发中断!!
brainliang 7:dc221ddd4588 477 {
brainliang 7:dc221ddd4588 478 ser2usb.printf("YL Triggered!\r\n");
brainliang 7:dc221ddd4588 479 status = true;
brainliang 7:dc221ddd4588 480 }
brainliang 7:dc221ddd4588 481 //--------
brainliang 7:dc221ddd4588 482 bool YL::operator==(const bool &target)
brainliang 7:dc221ddd4588 483 {
brainliang 7:dc221ddd4588 484 if(status == target)
brainliang 7:dc221ddd4588 485 {
brainliang 7:dc221ddd4588 486 return true;
brainliang 7:dc221ddd4588 487 }
brainliang 7:dc221ddd4588 488 else
brainliang 7:dc221ddd4588 489 {
brainliang 7:dc221ddd4588 490 return false;
brainliang 7:dc221ddd4588 491 }
brainliang 7:dc221ddd4588 492 }
brainliang 7:dc221ddd4588 493 //--------
brainliang 7:dc221ddd4588 494 float YL::getairdata()
brainliang 7:dc221ddd4588 495 {
brainliang 7:dc221ddd4588 496 return signallevel.read();
brainliang 7:dc221ddd4588 497 }
brainliang 7:dc221ddd4588 498 //-----------
brainliang 7:dc221ddd4588 499 void YL::reset()
brainliang 7:dc221ddd4588 500 {
brainliang 7:dc221ddd4588 501 status = false;
brainliang 7:dc221ddd4588 502 }
brainliang 7:dc221ddd4588 503 int YL::read()
brainliang 7:dc221ddd4588 504 {
brainliang 7:dc221ddd4588 505 return signal.read();
brainliang 7:dc221ddd4588 506 }
brainliang 7:dc221ddd4588 507
brainliang 7:dc221ddd4588 508 #ifdef ENABLE_ESP8266
brainliang 7:dc221ddd4588 509 void YL::send_data(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 510 {
brainliang 7:dc221ddd4588 511 char buff[32];
brainliang 7:dc221ddd4588 512 sprintf(buff, "%d", this->read());
brainliang 7:dc221ddd4588 513
brainliang 7:dc221ddd4588 514 ser2usb.printf("-----YL-----\r\nSending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 515
brainliang 7:dc221ddd4588 516 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 517 wait(0.01);
brainliang 7:dc221ddd4588 518 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 519 wait(0.01);
brainliang 7:dc221ddd4588 520 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 521
brainliang 7:dc221ddd4588 522 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 523 }
brainliang 7:dc221ddd4588 524 #endif // ENABLE_ESP8266
brainliang 7:dc221ddd4588 525 //=============================================
brainliang 7:dc221ddd4588 526 BMP180::BMP180(PinName sda,PinName scl)
brainliang 7:dc221ddd4588 527 :i2c(sda,scl)
brainliang 7:dc221ddd4588 528 {
brainliang 7:dc221ddd4588 529 OSS=OSS_3;
brainliang 7:dc221ddd4588 530 uint8_t c = readByte(BMP180_ADDRESS, BMP180_WHO_AM_I);
brainliang 7:dc221ddd4588 531 if(c == 0x55)
brainliang 7:dc221ddd4588 532 {
brainliang 7:dc221ddd4588 533 ser2usb.printf("BMP-180 is 0x%x\r\n", c);
brainliang 7:dc221ddd4588 534 ser2usb.printf("BMP-180 should be 0x55\r\n");
brainliang 7:dc221ddd4588 535 ser2usb.printf("BMP-180 online...\r\n");
brainliang 7:dc221ddd4588 536
brainliang 7:dc221ddd4588 537 BMP180Calibration();
brainliang 7:dc221ddd4588 538 ser2usb.printf("BMP-180 calibration complete...\r\n");
brainliang 7:dc221ddd4588 539 }
brainliang 7:dc221ddd4588 540 else
brainliang 7:dc221ddd4588 541 {
brainliang 7:dc221ddd4588 542 ser2usb.printf("BMP-180 is 0x%x\r\n", c);
brainliang 7:dc221ddd4588 543 ser2usb.printf("BMP-180 should be 0x55\r\n");
brainliang 7:dc221ddd4588 544 while(1); // idle here forever
brainliang 7:dc221ddd4588 545 }
brainliang 7:dc221ddd4588 546 }
brainliang 7:dc221ddd4588 547 void BMP180::writeByte(uint8_t address, uint8_t subAddress, uint8_t data)
brainliang 7:dc221ddd4588 548 {
brainliang 7:dc221ddd4588 549 char data_write[2];
brainliang 7:dc221ddd4588 550 data_write[0] = subAddress;
brainliang 7:dc221ddd4588 551 data_write[1] = data;
brainliang 7:dc221ddd4588 552 i2c.write(address, data_write, 2, 0);
brainliang 7:dc221ddd4588 553 }
brainliang 7:dc221ddd4588 554
brainliang 7:dc221ddd4588 555 char BMP180::readByte(uint8_t address, uint8_t subAddress)
brainliang 7:dc221ddd4588 556 {
brainliang 7:dc221ddd4588 557 char data[1]; // `data` will store the register data
brainliang 7:dc221ddd4588 558 char data_write[1];
brainliang 7:dc221ddd4588 559 data_write[0] = subAddress;
brainliang 7:dc221ddd4588 560 i2c.write(address, data_write, 1, 1); // no stop
brainliang 7:dc221ddd4588 561 i2c.read(address, data, 1, 0);
brainliang 7:dc221ddd4588 562 return data[0];
brainliang 7:dc221ddd4588 563 }
brainliang 7:dc221ddd4588 564
brainliang 7:dc221ddd4588 565 void BMP180::readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest)
brainliang 7:dc221ddd4588 566 {
brainliang 7:dc221ddd4588 567 char data[14];
brainliang 7:dc221ddd4588 568 char data_write[1];
brainliang 7:dc221ddd4588 569 data_write[0] = subAddress;
brainliang 7:dc221ddd4588 570 i2c.write(address, data_write, 1, 1); // no stop
brainliang 7:dc221ddd4588 571 i2c.read(address, data, count, 0);
brainliang 7:dc221ddd4588 572 for(int ii = 0; ii < count; ii++) {
brainliang 7:dc221ddd4588 573 dest[ii] = data[ii];
brainliang 7:dc221ddd4588 574 }
brainliang 7:dc221ddd4588 575 }
brainliang 7:dc221ddd4588 576
brainliang 7:dc221ddd4588 577
brainliang 7:dc221ddd4588 578 // Stores all of the BMP180's calibration values into global variables
brainliang 7:dc221ddd4588 579 // Calibration values are required to calculate temp and pressure
brainliang 7:dc221ddd4588 580 // This function should be called at the beginning of the program
brainliang 7:dc221ddd4588 581 // These BMP-180 functions were adapted from Jim Lindblom of SparkFun Electronics
brainliang 7:dc221ddd4588 582 void BMP180::BMP180Calibration()
brainliang 7:dc221ddd4588 583 {
brainliang 7:dc221ddd4588 584 ac1 = readByte(BMP180_ADDRESS, 0xAA) << 8 | readByte(BMP180_ADDRESS, 0xAB);
brainliang 7:dc221ddd4588 585 ac2 = readByte(BMP180_ADDRESS, 0xAC) << 8 | readByte(BMP180_ADDRESS, 0xAD);
brainliang 7:dc221ddd4588 586 ac3 = readByte(BMP180_ADDRESS, 0xAE) << 8 | readByte(BMP180_ADDRESS, 0xAF);
brainliang 7:dc221ddd4588 587 ac4 = readByte(BMP180_ADDRESS, 0xB0) << 8 | readByte(BMP180_ADDRESS, 0xB1);
brainliang 7:dc221ddd4588 588 ac5 = readByte(BMP180_ADDRESS, 0xB2) << 8 | readByte(BMP180_ADDRESS, 0xB3);
brainliang 7:dc221ddd4588 589 ac6 = readByte(BMP180_ADDRESS, 0xB4) << 8 | readByte(BMP180_ADDRESS, 0xB5);
brainliang 7:dc221ddd4588 590 b1 = readByte(BMP180_ADDRESS, 0xB6) << 8 | readByte(BMP180_ADDRESS, 0xB7);
brainliang 7:dc221ddd4588 591 b2 = readByte(BMP180_ADDRESS, 0xB8) << 8 | readByte(BMP180_ADDRESS, 0xB9);
brainliang 7:dc221ddd4588 592 mb = readByte(BMP180_ADDRESS, 0xBA) << 8 | readByte(BMP180_ADDRESS, 0xBB);
brainliang 7:dc221ddd4588 593 mc = readByte(BMP180_ADDRESS, 0xBC) << 8 | readByte(BMP180_ADDRESS, 0xBD);
brainliang 7:dc221ddd4588 594 md = readByte(BMP180_ADDRESS, 0xBE) << 8 | readByte(BMP180_ADDRESS, 0xBF);
brainliang 7:dc221ddd4588 595 }
brainliang 7:dc221ddd4588 596
brainliang 7:dc221ddd4588 597 // Temperature returned will be in units of 0.1 deg C
brainliang 7:dc221ddd4588 598 long BMP180::BMP180GetTemperature()
brainliang 7:dc221ddd4588 599 {
brainliang 7:dc221ddd4588 600 long ut = 0;
brainliang 7:dc221ddd4588 601 uint8_t rawData[2] = {0, 0};
brainliang 7:dc221ddd4588 602
brainliang 7:dc221ddd4588 603 writeByte(BMP180_ADDRESS, 0xF4, 0x2E); // start temperature measurement
brainliang 7:dc221ddd4588 604 wait_ms(5);
brainliang 7:dc221ddd4588 605 readBytes(BMP180_ADDRESS, 0xF6, 2, &rawData[0]); // read raw temperature measurement
brainliang 7:dc221ddd4588 606 ut = rawData[0]*256+ rawData[1];
brainliang 7:dc221ddd4588 607
brainliang 7:dc221ddd4588 608 long x1, x2;
brainliang 7:dc221ddd4588 609
brainliang 7:dc221ddd4588 610 x1 = (((long)ut - (long)ac6)*(long)ac5) >> 15;
brainliang 7:dc221ddd4588 611 x2 = ((long)mc << 11)/(x1 + md);
brainliang 7:dc221ddd4588 612 b5 = x1 + x2;
brainliang 7:dc221ddd4588 613
brainliang 7:dc221ddd4588 614 return ((b5 + 8)>>4)/10.0;
brainliang 7:dc221ddd4588 615 }
brainliang 7:dc221ddd4588 616
brainliang 7:dc221ddd4588 617 // Calculate pressure read calibration values
brainliang 7:dc221ddd4588 618 // b5 is also required so BMP180GetTemperature() must be called first.
brainliang 7:dc221ddd4588 619 // Value returned will be pressure in units of Pa.
brainliang 7:dc221ddd4588 620 long BMP180::BMP180GetPressure()
brainliang 7:dc221ddd4588 621 {
brainliang 7:dc221ddd4588 622 long up = 0;
brainliang 7:dc221ddd4588 623 writeByte(BMP180_ADDRESS, 0xF4, 0x34 | OSS << 6); // Configure pressure measurement for highest resolution
brainliang 7:dc221ddd4588 624 wait_ms(5+8*OSS); // delay 5 ms at lowest resolution, 29 ms at highest
brainliang 7:dc221ddd4588 625 uint8_t rawData[3] = {0, 0, 0};
brainliang 7:dc221ddd4588 626 readBytes(BMP180_ADDRESS, 0xF6, 3, &rawData[0]); // read raw pressure measurement of 19 bits
brainliang 7:dc221ddd4588 627 up = (((long) rawData[0] << 16) | ((long)rawData[1] << 8) | rawData[2]) >> (8 - OSS);
brainliang 7:dc221ddd4588 628
brainliang 7:dc221ddd4588 629 long x1, x2, x3, b3, b6, p;
brainliang 7:dc221ddd4588 630 unsigned long b4, b7;
brainliang 7:dc221ddd4588 631
brainliang 7:dc221ddd4588 632 b6 = b5 - 4000;
brainliang 7:dc221ddd4588 633 // Calculate B3
brainliang 7:dc221ddd4588 634 x1 = (b2 * (b6 * b6)>>12)>>11;
brainliang 7:dc221ddd4588 635 x2 = (ac2 * b6)>>11;
brainliang 7:dc221ddd4588 636 x3 = x1 + x2;
brainliang 7:dc221ddd4588 637 b3 = (((((long)ac1)*4 + x3)<<OSS) + 2)>>2;
brainliang 7:dc221ddd4588 638
brainliang 7:dc221ddd4588 639 // Calculate B4
brainliang 7:dc221ddd4588 640 x1 = (ac3 * b6)>>13;
brainliang 7:dc221ddd4588 641 x2 = (b1 * ((b6 * b6)>>12))>>16;
brainliang 7:dc221ddd4588 642 x3 = ((x1 + x2) + 2)>>2;
brainliang 7:dc221ddd4588 643 b4 = (ac4 * (unsigned long)(x3 + 32768))>>15;
brainliang 7:dc221ddd4588 644
brainliang 7:dc221ddd4588 645 b7 = ((unsigned long)(up - b3) * (50000>>OSS));
brainliang 7:dc221ddd4588 646 if (b7 < 0x80000000)
brainliang 7:dc221ddd4588 647 p = (b7<<1)/b4;
brainliang 7:dc221ddd4588 648 else
brainliang 7:dc221ddd4588 649 p = (b7/b4)<<1;
brainliang 7:dc221ddd4588 650
brainliang 7:dc221ddd4588 651 x1 = (p>>8) * (p>>8);
brainliang 7:dc221ddd4588 652 x1 = (x1 * 3038)>>16;
brainliang 7:dc221ddd4588 653 x2 = (-7357 * p)>>16;
brainliang 7:dc221ddd4588 654 p += (x1 + x2 + 3791)>>4;
brainliang 7:dc221ddd4588 655
brainliang 7:dc221ddd4588 656 return p;
brainliang 7:dc221ddd4588 657 }
brainliang 7:dc221ddd4588 658
brainliang 7:dc221ddd4588 659 #ifdef ENABLE_ESP8266
brainliang 7:dc221ddd4588 660 void BMP180::send_press(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 661 {
brainliang 7:dc221ddd4588 662 char buff[32];
brainliang 7:dc221ddd4588 663 sprintf(buff, "%ld", this->BMP180GetPressure());
brainliang 7:dc221ddd4588 664
brainliang 7:dc221ddd4588 665 ser2usb.printf("-----BMP180-----Sending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 666
brainliang 7:dc221ddd4588 667 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 668 wait(0.01);
brainliang 7:dc221ddd4588 669 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 670 wait(0.01);
brainliang 7:dc221ddd4588 671 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 672
brainliang 7:dc221ddd4588 673 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 674 }
brainliang 7:dc221ddd4588 675
brainliang 7:dc221ddd4588 676 void BMP180::send_temp(Esp8266 & client, const char * topic)
brainliang 7:dc221ddd4588 677 {
brainliang 7:dc221ddd4588 678 char buff[32];
brainliang 7:dc221ddd4588 679 sprintf(buff, "%ld", this->BMP180GetTemperature());
brainliang 7:dc221ddd4588 680
brainliang 7:dc221ddd4588 681 ser2usb.printf("-----BMP180-----\r\nSending message \"%s\" to topic \"%s\"\r\n", buff, topic);
brainliang 7:dc221ddd4588 682
brainliang 7:dc221ddd4588 683 client.publish_value(topic, "_upload");
brainliang 7:dc221ddd4588 684 wait(0.01);
brainliang 7:dc221ddd4588 685 client.publish_value(topic, buff);
brainliang 7:dc221ddd4588 686 wait(0.01);
brainliang 7:dc221ddd4588 687 client.publish_value(topic, "_end");
brainliang 7:dc221ddd4588 688
brainliang 7:dc221ddd4588 689 ser2usb.printf("Senging data done.\r\n");
brainliang 7:dc221ddd4588 690 }
brainliang 7:dc221ddd4588 691 #endif // ENABLE_ESP8266
brainliang 7:dc221ddd4588 692
brainliang 7:dc221ddd4588 693 //===============================
brainliang 7:dc221ddd4588 694 GP2Y1010::GP2Y1010(PinName led,PinName measure)
brainliang 7:dc221ddd4588 695 :measurePin(measure),ledPower(led)
brainliang 7:dc221ddd4588 696 {
brainliang 7:dc221ddd4588 697 samplingTime = 280;
brainliang 7:dc221ddd4588 698 deltaTime = 40;
brainliang 7:dc221ddd4588 699 sleepTime = 9680;
brainliang 7:dc221ddd4588 700
brainliang 7:dc221ddd4588 701 voMeasured = 0;
brainliang 7:dc221ddd4588 702 calcVoltage = 0;
brainliang 7:dc221ddd4588 703 dustDensity = 0;
brainliang 7:dc221ddd4588 704 }
brainliang 7:dc221ddd4588 705
brainliang 7:dc221ddd4588 706 float GP2Y1010::getairdata()
brainliang 7:dc221ddd4588 707 {
brainliang 7:dc221ddd4588 708 ledPower=1;
brainliang 7:dc221ddd4588 709
brainliang 7:dc221ddd4588 710 wait_us(samplingTime);
brainliang 7:dc221ddd4588 711
brainliang 7:dc221ddd4588 712 voMeasured = measurePin.read();
brainliang 7:dc221ddd4588 713
brainliang 7:dc221ddd4588 714 wait_us(deltaTime);
brainliang 7:dc221ddd4588 715 ledPower=0;
brainliang 7:dc221ddd4588 716 wait_us(sleepTime);
brainliang 7:dc221ddd4588 717
brainliang 7:dc221ddd4588 718 calcVoltage = voMeasured*5.0;
brainliang 7:dc221ddd4588 719 dustDensity = 0.17*calcVoltage-0.1;
brainliang 7:dc221ddd4588 720
brainliang 7:dc221ddd4588 721 if ( dustDensity < 0)
brainliang 7:dc221ddd4588 722 {
brainliang 7:dc221ddd4588 723 dustDensity = 0.00;
brainliang 7:dc221ddd4588 724 }
brainliang 7:dc221ddd4588 725 return dustDensity ;
brainliang 7:dc221ddd4588 726 }
brainliang 7:dc221ddd4588 727
brainliang 7:dc221ddd4588 728 #endif // ENABLE_SENSORS