sr501+BH1750+mq

Dependencies:   mbed

Fork of sensors by w mx

Committer:
xmwmx
Date:
Fri Sep 14 10:52:15 2018 +0000
Revision:
3:31aec950f7dc
Parent:
2:cd0ea77c7d66
sr501/BH1750/mq-2/dht11

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Dennis_Yu 0:6dca851b4779 1 #include "sensors.h"
Dennis_Yu 0:6dca851b4779 2 #include "mbed.h"
Dennis_Yu 0:6dca851b4779 3
xmwmx 1:1197997ae0ea 4 extern Serial usb2pc;
xmwmx 1:1197997ae0ea 5 extern DigitalOut myled;
xmwmx 1:1197997ae0ea 6 //============================================================
xmwmx 1:1197997ae0ea 7 void sr501::triggered() //触发中断!!
Dennis_Yu 0:6dca851b4779 8 {
xmwmx 1:1197997ae0ea 9 usb2pc.printf("sr501 Triggered!\r\n");
Dennis_Yu 0:6dca851b4779 10 status = true;
Dennis_Yu 0:6dca851b4779 11 }
xmwmx 1:1197997ae0ea 12 //--------
xmwmx 1:1197997ae0ea 13 sr501::sr501(PinName pSignal) //启动热释电!!!
xmwmx 2:cd0ea77c7d66 14 : status(false), signal(pSignal)
Dennis_Yu 0:6dca851b4779 15 {
xmwmx 2:cd0ea77c7d66 16 signal.rise(this, &sr501::triggered);
xmwmx 1:1197997ae0ea 17 usb2pc.printf("sr501 start!\r\n");
Dennis_Yu 0:6dca851b4779 18 }
xmwmx 1:1197997ae0ea 19 //-------
xmwmx 1:1197997ae0ea 20 bool sr501::operator==(const bool &target)
Dennis_Yu 0:6dca851b4779 21 {
Dennis_Yu 0:6dca851b4779 22 if(status == target)
xmwmx 1:1197997ae0ea 23 {
Dennis_Yu 0:6dca851b4779 24 return true;
xmwmx 1:1197997ae0ea 25 }
Dennis_Yu 0:6dca851b4779 26 else
xmwmx 1:1197997ae0ea 27 {
Dennis_Yu 0:6dca851b4779 28 return false;
xmwmx 1:1197997ae0ea 29 }
Dennis_Yu 0:6dca851b4779 30 }
xmwmx 1:1197997ae0ea 31 //-------
Dennis_Yu 0:6dca851b4779 32 void sr501::reset()
Dennis_Yu 0:6dca851b4779 33 {
Dennis_Yu 0:6dca851b4779 34 status = false;
Dennis_Yu 0:6dca851b4779 35 }
xmwmx 1:1197997ae0ea 36 //-------
xmwmx 1:1197997ae0ea 37 int sr501::read()
xmwmx 1:1197997ae0ea 38 {
xmwmx 2:cd0ea77c7d66 39 return signal.read();
xmwmx 1:1197997ae0ea 40 }
xmwmx 1:1197997ae0ea 41 //==========================================
xmwmx 1:1197997ae0ea 42 BH1750::BH1750(PinName sda,PinName scl) //启动光强!!!!!(默认设置)
xmwmx 1:1197997ae0ea 43 :link(sda,scl)
xmwmx 1:1197997ae0ea 44 {
xmwmx 1:1197997ae0ea 45 status = true;
xmwmx 1:1197997ae0ea 46 char mode[1]={BH1750_CONTINUOUS_HIGH_RES_MODE};
xmwmx 2:cd0ea77c7d66 47 //usb2pc.printf("modifying\r\n");
xmwmx 1:1197997ae0ea 48 while(status)
xmwmx 1:1197997ae0ea 49 {
xmwmx 1:1197997ae0ea 50 status = link.write(BH1750_I2CADDR, mode, sizeof(mode), false);
xmwmx 1:1197997ae0ea 51 wait_ms(10);
xmwmx 1:1197997ae0ea 52 }
xmwmx 1:1197997ae0ea 53 usb2pc.printf("BH1750 start with default mode!\r\n");
xmwmx 1:1197997ae0ea 54 }
xmwmx 1:1197997ae0ea 55 //--------
xmwmx 1:1197997ae0ea 56 BH1750::BH1750(PinName sda,PinName scl,char mode[]) //启动光强!!!!!(自定义设置)
xmwmx 1:1197997ae0ea 57 :link(sda,scl)
xmwmx 1:1197997ae0ea 58 {
xmwmx 1:1197997ae0ea 59 status = true;
xmwmx 1:1197997ae0ea 60 while(status)
xmwmx 1:1197997ae0ea 61 {
xmwmx 1:1197997ae0ea 62 status = link.write(BH1750_I2CADDR, mode, sizeof(mode), false);
xmwmx 1:1197997ae0ea 63 wait_ms(10);
xmwmx 1:1197997ae0ea 64 }
xmwmx 1:1197997ae0ea 65 usb2pc.printf("BH1750 start with customize mode!\r\n");
xmwmx 1:1197997ae0ea 66 }
xmwmx 1:1197997ae0ea 67 //--------
xmwmx 1:1197997ae0ea 68 float BH1750::getlightdata() //读取光强(lux)
xmwmx 1:1197997ae0ea 69 {
xmwmx 1:1197997ae0ea 70 status = true;
xmwmx 1:1197997ae0ea 71 status = link.read(BH1750_I2CADDR, rawdata, 2, false);
xmwmx 1:1197997ae0ea 72 if(!status)
xmwmx 1:1197997ae0ea 73 {
xmwmx 1:1197997ae0ea 74 float result = ((rawdata[0]<<8)|rawdata[1])/1.2;
xmwmx 1:1197997ae0ea 75 return result;
xmwmx 1:1197997ae0ea 76 }
xmwmx 1:1197997ae0ea 77 else
xmwmx 1:1197997ae0ea 78 {
xmwmx 1:1197997ae0ea 79 usb2pc.printf("BH1750 read fail!\r\n");
xmwmx 1:1197997ae0ea 80 return -1;
xmwmx 1:1197997ae0ea 81 }
xmwmx 2:cd0ea77c7d66 82 }
xmwmx 2:cd0ea77c7d66 83 //==============================================
xmwmx 2:cd0ea77c7d66 84 mq::mq(PinName dio)
xmwmx 2:cd0ea77c7d66 85 : status(false), signal(dio),signallevel(PC_13)
xmwmx 2:cd0ea77c7d66 86 {
xmwmx 2:cd0ea77c7d66 87 signal.fall(this, &mq::triggered);
xmwmx 2:cd0ea77c7d66 88 usb2pc.printf("mq start!\r\n");
xmwmx 2:cd0ea77c7d66 89 }
xmwmx 2:cd0ea77c7d66 90 //--------
xmwmx 2:cd0ea77c7d66 91 mq::mq(PinName dio,PinName aio)
xmwmx 2:cd0ea77c7d66 92 : status(false), signal(dio),signallevel(aio)
xmwmx 2:cd0ea77c7d66 93 {
xmwmx 2:cd0ea77c7d66 94 signal.fall(this, &mq::triggered);
xmwmx 2:cd0ea77c7d66 95 usb2pc.printf("mq start!\r\n");
xmwmx 2:cd0ea77c7d66 96 }
xmwmx 2:cd0ea77c7d66 97 //--------
xmwmx 2:cd0ea77c7d66 98 void mq::triggered() //触发中断!!
xmwmx 2:cd0ea77c7d66 99 {
xmwmx 2:cd0ea77c7d66 100 usb2pc.printf("mq Triggered!\r\n");
xmwmx 2:cd0ea77c7d66 101 status = true;
xmwmx 2:cd0ea77c7d66 102 }
xmwmx 2:cd0ea77c7d66 103 //--------
xmwmx 2:cd0ea77c7d66 104 bool mq::operator==(const bool &target)
xmwmx 2:cd0ea77c7d66 105 {
xmwmx 2:cd0ea77c7d66 106 if(status == target)
xmwmx 2:cd0ea77c7d66 107 {
xmwmx 2:cd0ea77c7d66 108 return true;
xmwmx 2:cd0ea77c7d66 109 }
xmwmx 2:cd0ea77c7d66 110 else
xmwmx 2:cd0ea77c7d66 111 {
xmwmx 2:cd0ea77c7d66 112 return false;
xmwmx 2:cd0ea77c7d66 113 }
xmwmx 2:cd0ea77c7d66 114 }
xmwmx 2:cd0ea77c7d66 115 //--------
xmwmx 2:cd0ea77c7d66 116 float mq::getairdata()
xmwmx 2:cd0ea77c7d66 117 {
xmwmx 3:31aec950f7dc 118 return signallevel.read();
xmwmx 2:cd0ea77c7d66 119 }
xmwmx 2:cd0ea77c7d66 120 //-----------
xmwmx 2:cd0ea77c7d66 121 void mq::reset()
xmwmx 2:cd0ea77c7d66 122 {
xmwmx 2:cd0ea77c7d66 123 status = false;
xmwmx 2:cd0ea77c7d66 124 }
xmwmx 2:cd0ea77c7d66 125 int mq::read()
xmwmx 2:cd0ea77c7d66 126 {
xmwmx 2:cd0ea77c7d66 127 return signal.read();
xmwmx 3:31aec950f7dc 128 }
xmwmx 3:31aec950f7dc 129 //===========================================
xmwmx 3:31aec950f7dc 130 dht11::dht11(PinName pin)
xmwmx 3:31aec950f7dc 131 :datapin(pin)
xmwmx 3:31aec950f7dc 132 {
xmwmx 3:31aec950f7dc 133 starttime.start();
xmwmx 3:31aec950f7dc 134 usb2pc.printf("dht11 start!\r\n");
xmwmx 3:31aec950f7dc 135 }
xmwmx 3:31aec950f7dc 136 //----------
xmwmx 3:31aec950f7dc 137 int dht11::getdata()
xmwmx 3:31aec950f7dc 138 {
xmwmx 3:31aec950f7dc 139 int timeout=10000;
xmwmx 3:31aec950f7dc 140 uint8_t data[5];
xmwmx 3:31aec950f7dc 141 uint8_t bit=7;
xmwmx 3:31aec950f7dc 142 uint8_t count=0;
xmwmx 3:31aec950f7dc 143
xmwmx 3:31aec950f7dc 144 for(int i=0;i<5;i++)
xmwmx 3:31aec950f7dc 145 {
xmwmx 3:31aec950f7dc 146 data[i]=0;
xmwmx 3:31aec950f7dc 147 }
xmwmx 3:31aec950f7dc 148 if(starttime.read_ms()<1500){while(starttime.read_ms()<1500){}starttime.stop();}
xmwmx 3:31aec950f7dc 149
xmwmx 3:31aec950f7dc 150 datapin.output();
xmwmx 3:31aec950f7dc 151 datapin=0;
xmwmx 3:31aec950f7dc 152 wait_ms(19);
xmwmx 3:31aec950f7dc 153 datapin=1;
xmwmx 3:31aec950f7dc 154 wait_us(30);
xmwmx 3:31aec950f7dc 155 datapin.input();
xmwmx 3:31aec950f7dc 156
xmwmx 3:31aec950f7dc 157 while(!datapin)
xmwmx 3:31aec950f7dc 158 {
xmwmx 3:31aec950f7dc 159 if(timeout--==0){usb2pc.printf("timeout!no reset\r\n");return 0;}
xmwmx 3:31aec950f7dc 160 }
xmwmx 3:31aec950f7dc 161 timeout=10000;
xmwmx 3:31aec950f7dc 162 while(datapin)
xmwmx 3:31aec950f7dc 163 {
xmwmx 3:31aec950f7dc 164 if(timeout--==0){usb2pc.printf("timeout!no respanse\r\n");return 0;}
xmwmx 3:31aec950f7dc 165 }
xmwmx 3:31aec950f7dc 166 timeout=10000;
xmwmx 3:31aec950f7dc 167 for(int i=0;i<40;i++)
xmwmx 3:31aec950f7dc 168 {
xmwmx 3:31aec950f7dc 169 while(!datapin)
xmwmx 3:31aec950f7dc 170 {
xmwmx 3:31aec950f7dc 171 if(timeout--==0){usb2pc.printf("timeout!\r\n");return 0;}
xmwmx 3:31aec950f7dc 172 }
xmwmx 3:31aec950f7dc 173 timer.start();
xmwmx 3:31aec950f7dc 174 timeout=10000;
xmwmx 3:31aec950f7dc 175 while(datapin)
xmwmx 3:31aec950f7dc 176 {
xmwmx 3:31aec950f7dc 177 if(timeout--==0){usb2pc.printf("timeout!n\r\n");return 0;}
xmwmx 3:31aec950f7dc 178 }
xmwmx 3:31aec950f7dc 179 timeout=10000;
xmwmx 3:31aec950f7dc 180 long t=timer.read_us();
xmwmx 3:31aec950f7dc 181 timer.stop();
xmwmx 3:31aec950f7dc 182 timer.reset();
xmwmx 3:31aec950f7dc 183
xmwmx 3:31aec950f7dc 184 if(bit==0)
xmwmx 3:31aec950f7dc 185 {
xmwmx 3:31aec950f7dc 186 if(t>40){data[count]|=(1<<bit);}
xmwmx 3:31aec950f7dc 187 bit=7;
xmwmx 3:31aec950f7dc 188 count++;
xmwmx 3:31aec950f7dc 189 }
xmwmx 3:31aec950f7dc 190 else
xmwmx 3:31aec950f7dc 191 {
xmwmx 3:31aec950f7dc 192 if(t>40)
xmwmx 3:31aec950f7dc 193 {
xmwmx 3:31aec950f7dc 194 data[count]|=(1<<bit);
xmwmx 3:31aec950f7dc 195 }
xmwmx 3:31aec950f7dc 196 bit--;
xmwmx 3:31aec950f7dc 197 }
xmwmx 3:31aec950f7dc 198 }
xmwmx 3:31aec950f7dc 199 datapin=1;
xmwmx 3:31aec950f7dc 200 if(data[4]==data[0]+data[1]+data[2]+data[3])
xmwmx 3:31aec950f7dc 201 {
xmwmx 3:31aec950f7dc 202 //usb2pc.printf("Humidity (%):%f\r\n",(float)data[0]);
xmwmx 3:31aec950f7dc 203 //usb2pc.printf("Temperature (oC): %f\r\n",(float)data[2]);
xmwmx 3:31aec950f7dc 204 H=data[0]+data[1]/10.0;
xmwmx 3:31aec950f7dc 205 T=data[2]+data[3]/10.0;
xmwmx 3:31aec950f7dc 206 return 1;
xmwmx 3:31aec950f7dc 207 }
xmwmx 3:31aec950f7dc 208 else{usb2pc.printf("error!\r\ndata0:%d\tdata1:%d\r\ndata2:%d\tdata3:%d\r\ndata4:%d\r\n",(int)data[0],(int)data[1],(int)data[2],(int)data[3],(int)data[4]);return 0;}
xmwmx 3:31aec950f7dc 209 }
xmwmx 3:31aec950f7dc 210 //-------
xmwmx 3:31aec950f7dc 211 float dht11::gethumidity()
xmwmx 3:31aec950f7dc 212 {
xmwmx 3:31aec950f7dc 213 return H;
xmwmx 3:31aec950f7dc 214 }
xmwmx 3:31aec950f7dc 215 //-------
xmwmx 3:31aec950f7dc 216 float dht11::gettemperature()
xmwmx 3:31aec950f7dc 217 {
xmwmx 3:31aec950f7dc 218 return T;
xmwmx 1:1197997ae0ea 219 }