w mx
/
sensors3
sr501/BH1750/mq-2/dht11
Fork of sensors_2 by
sensors.cpp@3:31aec950f7dc, 2018-09-14 (annotated)
- Committer:
- xmwmx
- Date:
- Fri Sep 14 10:52:15 2018 +0000
- Revision:
- 3:31aec950f7dc
- Parent:
- 2:cd0ea77c7d66
- Child:
- 4:fe1e9f9c7b33
sr501/BH1750/mq-2/dht11
Who changed what in which revision?
User | Revision | Line number | New 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 | } |