QAQ ==!
Dependencies: mbed QEI-1 nRF24L01P xiugai
drivers/sensors.h@10:cda7ae2fc9de, 2019-11-14 (annotated)
- Committer:
- zhangyx
- Date:
- Thu Nov 14 02:05:58 2019 +0000
- Revision:
- 10:cda7ae2fc9de
- Parent:
- 9:d03b1af2b8d8
fix compiler errors
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
zhangyx | 9:d03b1af2b8d8 | 1 | #ifndef __SENSORS_H |
zhangyx | 9:d03b1af2b8d8 | 2 | #define __SENSORS_H |
zhangyx | 9:d03b1af2b8d8 | 3 | |
zhangyx | 9:d03b1af2b8d8 | 4 | #define ENABLE_SENSORS |
zhangyx | 10:cda7ae2fc9de | 5 | //#define ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 6 | |
zhangyx | 9:d03b1af2b8d8 | 7 | #ifdef ENABLE_SENSORS |
zhangyx | 9:d03b1af2b8d8 | 8 | |
zhangyx | 9:d03b1af2b8d8 | 9 | #include "mbed.h" |
zhangyx | 9:d03b1af2b8d8 | 10 | #include "esp8266.h" |
zhangyx | 9:d03b1af2b8d8 | 11 | |
zhangyx | 9:d03b1af2b8d8 | 12 | |
zhangyx | 9:d03b1af2b8d8 | 13 | |
zhangyx | 9:d03b1af2b8d8 | 14 | //========================================== |
zhangyx | 9:d03b1af2b8d8 | 15 | class sr501 |
zhangyx | 9:d03b1af2b8d8 | 16 | { |
zhangyx | 9:d03b1af2b8d8 | 17 | /***** |
zhangyx | 9:d03b1af2b8d8 | 18 | * 红外热释电对象 |
zhangyx | 9:d03b1af2b8d8 | 19 | * 感应输出高电平 |
zhangyx | 9:d03b1af2b8d8 | 20 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 21 | private: |
zhangyx | 9:d03b1af2b8d8 | 22 | // DigitalIn signal; |
zhangyx | 9:d03b1af2b8d8 | 23 | bool status; |
zhangyx | 9:d03b1af2b8d8 | 24 | InterruptIn signal; |
zhangyx | 9:d03b1af2b8d8 | 25 | void triggered(); |
zhangyx | 9:d03b1af2b8d8 | 26 | public: |
zhangyx | 9:d03b1af2b8d8 | 27 | sr501(PinName pSignal); |
zhangyx | 9:d03b1af2b8d8 | 28 | bool operator==(const bool &target); |
zhangyx | 9:d03b1af2b8d8 | 29 | void reset(); |
zhangyx | 9:d03b1af2b8d8 | 30 | int read(); |
zhangyx | 9:d03b1af2b8d8 | 31 | |
zhangyx | 9:d03b1af2b8d8 | 32 | #ifdef ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 33 | void send_status(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 34 | #endif // ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 35 | |
zhangyx | 9:d03b1af2b8d8 | 36 | }; |
zhangyx | 9:d03b1af2b8d8 | 37 | //========================================= |
zhangyx | 9:d03b1af2b8d8 | 38 | //+++++++++++++++++++++BH1750+++++++++++++++++++++++++++++ |
zhangyx | 9:d03b1af2b8d8 | 39 | #define BH1750_I2CADDR 0x46 |
zhangyx | 9:d03b1af2b8d8 | 40 | #define BH1750_POWER_DOWN 0x00 // No active state |
zhangyx | 9:d03b1af2b8d8 | 41 | #define BH1750_POWER_ON 0x01 // Wating for measurment command |
zhangyx | 9:d03b1af2b8d8 | 42 | #define BH1750_RESET 0x07 // Reset data register value - not accepted in POWER_DOWN mode |
zhangyx | 9:d03b1af2b8d8 | 43 | #define BH1750_CONTINUOUS_HIGH_RES_MODE 0x10 // Start measurement at 1lx resolution. Measurement time is approx 120ms. |
zhangyx | 9:d03b1af2b8d8 | 44 | #define BH1750_CONTINUOUS_HIGH_RES_MODE_2 0x11 // Start measurement at 0.5lx resolution. Measurement time is approx 120ms. |
zhangyx | 9:d03b1af2b8d8 | 45 | #define BH1750_CONTINUOUS_LOW_RES_MODE 0x13 // Start measurement at 4lx resolution. Measurement time is approx 16ms. |
zhangyx | 9:d03b1af2b8d8 | 46 | |
zhangyx | 9:d03b1af2b8d8 | 47 | // Start measurement at 1lx resolution. Measurement time is approx 120ms. |
zhangyx | 9:d03b1af2b8d8 | 48 | // Device is automatically set to Power Down after measurement. |
zhangyx | 9:d03b1af2b8d8 | 49 | #define BH1750_ONE_TIME_HIGH_RES_MODE 0x20 |
zhangyx | 9:d03b1af2b8d8 | 50 | |
zhangyx | 9:d03b1af2b8d8 | 51 | // Start measurement at 0.5lx resolution. Measurement time is approx 120ms. |
zhangyx | 9:d03b1af2b8d8 | 52 | // Device is automatically set to Power Down after measurement. |
zhangyx | 9:d03b1af2b8d8 | 53 | #define BH1750_ONE_TIME_HIGH_RES_MODE_2 0x21 |
zhangyx | 9:d03b1af2b8d8 | 54 | |
zhangyx | 9:d03b1af2b8d8 | 55 | // Start measurement at 1lx resolution. Measurement time is approx 120ms. |
zhangyx | 9:d03b1af2b8d8 | 56 | // Device is automatically set to Power Down after measurement. |
zhangyx | 9:d03b1af2b8d8 | 57 | #define BH1750_ONE_TIME_LOW_RES_MODE 0x23 |
zhangyx | 9:d03b1af2b8d8 | 58 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
zhangyx | 9:d03b1af2b8d8 | 59 | class BH1750 |
zhangyx | 9:d03b1af2b8d8 | 60 | { |
zhangyx | 9:d03b1af2b8d8 | 61 | |
zhangyx | 9:d03b1af2b8d8 | 62 | /***** |
zhangyx | 9:d03b1af2b8d8 | 63 | * |
zhangyx | 9:d03b1af2b8d8 | 64 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 65 | private: |
zhangyx | 9:d03b1af2b8d8 | 66 | I2C link; |
zhangyx | 9:d03b1af2b8d8 | 67 | char rawdata[2]; |
zhangyx | 9:d03b1af2b8d8 | 68 | bool status; |
zhangyx | 9:d03b1af2b8d8 | 69 | public: |
zhangyx | 9:d03b1af2b8d8 | 70 | BH1750(PinName sda,PinName scl); |
zhangyx | 9:d03b1af2b8d8 | 71 | BH1750(PinName sda,PinName scl,char mode[]); |
zhangyx | 9:d03b1af2b8d8 | 72 | float getlightdata(); |
zhangyx | 9:d03b1af2b8d8 | 73 | |
zhangyx | 9:d03b1af2b8d8 | 74 | #ifdef ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 75 | void send_data(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 76 | #endif // ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 77 | |
zhangyx | 9:d03b1af2b8d8 | 78 | }; |
zhangyx | 9:d03b1af2b8d8 | 79 | //=========================================== |
zhangyx | 9:d03b1af2b8d8 | 80 | class mq |
zhangyx | 9:d03b1af2b8d8 | 81 | { |
zhangyx | 9:d03b1af2b8d8 | 82 | /***** |
zhangyx | 9:d03b1af2b8d8 | 83 | * |
zhangyx | 9:d03b1af2b8d8 | 84 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 85 | private: |
zhangyx | 9:d03b1af2b8d8 | 86 | bool status; |
zhangyx | 9:d03b1af2b8d8 | 87 | InterruptIn signal; |
zhangyx | 9:d03b1af2b8d8 | 88 | AnalogIn signallevel; |
zhangyx | 9:d03b1af2b8d8 | 89 | |
zhangyx | 9:d03b1af2b8d8 | 90 | void triggered(); |
zhangyx | 9:d03b1af2b8d8 | 91 | public: |
zhangyx | 9:d03b1af2b8d8 | 92 | mq(PinName dio); |
zhangyx | 9:d03b1af2b8d8 | 93 | mq(PinName dio,PinName aio); |
zhangyx | 9:d03b1af2b8d8 | 94 | bool operator==(const bool &target); |
zhangyx | 9:d03b1af2b8d8 | 95 | float getairdata(); |
zhangyx | 9:d03b1af2b8d8 | 96 | void reset(); |
zhangyx | 9:d03b1af2b8d8 | 97 | int read(); |
zhangyx | 9:d03b1af2b8d8 | 98 | |
zhangyx | 9:d03b1af2b8d8 | 99 | #ifdef ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 100 | void send_data(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 101 | #endif // ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 102 | |
zhangyx | 9:d03b1af2b8d8 | 103 | }; |
zhangyx | 9:d03b1af2b8d8 | 104 | |
zhangyx | 9:d03b1af2b8d8 | 105 | //=========================================== |
zhangyx | 9:d03b1af2b8d8 | 106 | class dht11 |
zhangyx | 9:d03b1af2b8d8 | 107 | { |
zhangyx | 9:d03b1af2b8d8 | 108 | /***** |
zhangyx | 9:d03b1af2b8d8 | 109 | * |
zhangyx | 9:d03b1af2b8d8 | 110 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 111 | private: |
zhangyx | 9:d03b1af2b8d8 | 112 | Timer timer; |
zhangyx | 9:d03b1af2b8d8 | 113 | Timer starttime; |
zhangyx | 9:d03b1af2b8d8 | 114 | DigitalInOut datapin; |
zhangyx | 9:d03b1af2b8d8 | 115 | float H; |
zhangyx | 9:d03b1af2b8d8 | 116 | float T; |
zhangyx | 9:d03b1af2b8d8 | 117 | public: |
zhangyx | 9:d03b1af2b8d8 | 118 | dht11(PinName pin); |
zhangyx | 9:d03b1af2b8d8 | 119 | int getdata(); |
zhangyx | 9:d03b1af2b8d8 | 120 | float gethumidity(); |
zhangyx | 9:d03b1af2b8d8 | 121 | float gettemperature(); |
zhangyx | 9:d03b1af2b8d8 | 122 | |
zhangyx | 9:d03b1af2b8d8 | 123 | #ifdef ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 124 | void send_temp(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 125 | void send_humi(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 126 | #endif // ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 127 | |
zhangyx | 9:d03b1af2b8d8 | 128 | }; |
zhangyx | 9:d03b1af2b8d8 | 129 | //==========================================DS18B20 |
zhangyx | 9:d03b1af2b8d8 | 130 | class DS18B20 |
zhangyx | 9:d03b1af2b8d8 | 131 | { |
zhangyx | 9:d03b1af2b8d8 | 132 | /***** |
zhangyx | 9:d03b1af2b8d8 | 133 | * |
zhangyx | 9:d03b1af2b8d8 | 134 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 135 | private: |
zhangyx | 9:d03b1af2b8d8 | 136 | DigitalInOut datapin; |
zhangyx | 9:d03b1af2b8d8 | 137 | uint8_t dat; |
zhangyx | 9:d03b1af2b8d8 | 138 | float T; |
zhangyx | 9:d03b1af2b8d8 | 139 | |
zhangyx | 9:d03b1af2b8d8 | 140 | int start(); |
zhangyx | 9:d03b1af2b8d8 | 141 | void writebyte(uint8_t send); |
zhangyx | 9:d03b1af2b8d8 | 142 | uint8_t readByte(); |
zhangyx | 9:d03b1af2b8d8 | 143 | float transfer(uint8_t h,uint8_t l); |
zhangyx | 9:d03b1af2b8d8 | 144 | public: |
zhangyx | 9:d03b1af2b8d8 | 145 | DS18B20(PinName pin); |
zhangyx | 9:d03b1af2b8d8 | 146 | int getdata(); |
zhangyx | 9:d03b1af2b8d8 | 147 | float gettemperature(); |
zhangyx | 9:d03b1af2b8d8 | 148 | |
zhangyx | 9:d03b1af2b8d8 | 149 | #ifdef ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 150 | void send_temp(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 151 | #endif // ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 152 | |
zhangyx | 9:d03b1af2b8d8 | 153 | }; |
zhangyx | 9:d03b1af2b8d8 | 154 | //==========================================YL-38通用传感 |
zhangyx | 9:d03b1af2b8d8 | 155 | class YL |
zhangyx | 9:d03b1af2b8d8 | 156 | { |
zhangyx | 9:d03b1af2b8d8 | 157 | /***** |
zhangyx | 9:d03b1af2b8d8 | 158 | * |
zhangyx | 9:d03b1af2b8d8 | 159 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 160 | private: |
zhangyx | 9:d03b1af2b8d8 | 161 | bool status; |
zhangyx | 9:d03b1af2b8d8 | 162 | InterruptIn signal; |
zhangyx | 9:d03b1af2b8d8 | 163 | AnalogIn signallevel; |
zhangyx | 9:d03b1af2b8d8 | 164 | |
zhangyx | 9:d03b1af2b8d8 | 165 | void triggered(); |
zhangyx | 9:d03b1af2b8d8 | 166 | public: |
zhangyx | 9:d03b1af2b8d8 | 167 | YL(PinName dio); |
zhangyx | 9:d03b1af2b8d8 | 168 | YL(PinName dio,PinName aio); |
zhangyx | 9:d03b1af2b8d8 | 169 | bool operator==(const bool &target); |
zhangyx | 9:d03b1af2b8d8 | 170 | float getairdata(); |
zhangyx | 9:d03b1af2b8d8 | 171 | void reset(); |
zhangyx | 9:d03b1af2b8d8 | 172 | float read(); |
zhangyx | 9:d03b1af2b8d8 | 173 | |
zhangyx | 9:d03b1af2b8d8 | 174 | #ifdef ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 175 | void send_data(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 176 | #endif // ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 177 | }; |
zhangyx | 9:d03b1af2b8d8 | 178 | //======================================== |
zhangyx | 9:d03b1af2b8d8 | 179 | #define BMP180_ADDRESS 0x77<<1 // I2C address of BMP180, eight bit address on mbed |
zhangyx | 9:d03b1af2b8d8 | 180 | #define BMP180_WHO_AM_I 0xD0 // WHO_AM_I id of BMP180, should return 0x55 |
zhangyx | 9:d03b1af2b8d8 | 181 | #define BMP180_RESET 0xE0 |
zhangyx | 9:d03b1af2b8d8 | 182 | #define BMP180_CONTROL 0xF4 |
zhangyx | 9:d03b1af2b8d8 | 183 | #define BMP180_OUT_MSB 0xF6 |
zhangyx | 9:d03b1af2b8d8 | 184 | #define BMP180_OUT_LSB 0xF7 |
zhangyx | 9:d03b1af2b8d8 | 185 | #define BMP180_OUT_XLSB 0xF8 |
zhangyx | 9:d03b1af2b8d8 | 186 | |
zhangyx | 9:d03b1af2b8d8 | 187 | // Set initial input parameters |
zhangyx | 9:d03b1af2b8d8 | 188 | |
zhangyx | 9:d03b1af2b8d8 | 189 | enum OSS { // BMP-085 sampling rate |
zhangyx | 9:d03b1af2b8d8 | 190 | OSS_0 = 0, // 4.5 ms conversion time |
zhangyx | 9:d03b1af2b8d8 | 191 | OSS_1=1, // 7.5 |
zhangyx | 9:d03b1af2b8d8 | 192 | OSS_2=2, // 13.5 |
zhangyx | 9:d03b1af2b8d8 | 193 | OSS_3=3 // 25.5 |
zhangyx | 9:d03b1af2b8d8 | 194 | }; |
zhangyx | 9:d03b1af2b8d8 | 195 | |
zhangyx | 9:d03b1af2b8d8 | 196 | |
zhangyx | 9:d03b1af2b8d8 | 197 | |
zhangyx | 9:d03b1af2b8d8 | 198 | class BMP180 { |
zhangyx | 9:d03b1af2b8d8 | 199 | /***** |
zhangyx | 9:d03b1af2b8d8 | 200 | * |
zhangyx | 9:d03b1af2b8d8 | 201 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 202 | private: |
zhangyx | 9:d03b1af2b8d8 | 203 | uint8_t OSS; // maximum pressure resolution |
zhangyx | 9:d03b1af2b8d8 | 204 | |
zhangyx | 9:d03b1af2b8d8 | 205 | //Set up I2C, (SDA,SCL) |
zhangyx | 9:d03b1af2b8d8 | 206 | I2C i2c; |
zhangyx | 9:d03b1af2b8d8 | 207 | |
zhangyx | 9:d03b1af2b8d8 | 208 | // These are constants used to calculate the temperature and pressure from the BMP-180 sensor |
zhangyx | 9:d03b1af2b8d8 | 209 | int16_t ac1, ac2, ac3, b1, b2, mb, mc, md, b5; |
zhangyx | 9:d03b1af2b8d8 | 210 | uint16_t ac4, ac5, ac6; |
zhangyx | 9:d03b1af2b8d8 | 211 | |
zhangyx | 9:d03b1af2b8d8 | 212 | void writeByte(uint8_t address, uint8_t subAddress, uint8_t data); |
zhangyx | 9:d03b1af2b8d8 | 213 | char readByte(uint8_t address, uint8_t subAddress); |
zhangyx | 9:d03b1af2b8d8 | 214 | void readBytes(uint8_t address, uint8_t subAddress, uint8_t count, uint8_t * dest); |
zhangyx | 9:d03b1af2b8d8 | 215 | |
zhangyx | 9:d03b1af2b8d8 | 216 | // Stores all of the BMP180's calibration values into global variables |
zhangyx | 9:d03b1af2b8d8 | 217 | // Calibration values are required to calculate temp and pressure |
zhangyx | 9:d03b1af2b8d8 | 218 | // This function should be called at the beginning of the program |
zhangyx | 9:d03b1af2b8d8 | 219 | // These BMP-180 functions were adapted from Jim Lindblom of SparkFun Electronics |
zhangyx | 9:d03b1af2b8d8 | 220 | void BMP180Calibration(); |
zhangyx | 9:d03b1af2b8d8 | 221 | public: |
zhangyx | 9:d03b1af2b8d8 | 222 | BMP180(PinName sda,PinName scl) ; |
zhangyx | 9:d03b1af2b8d8 | 223 | // Temperature returned will be in units of 0.1 deg C |
zhangyx | 9:d03b1af2b8d8 | 224 | long BMP180GetTemperature(); |
zhangyx | 9:d03b1af2b8d8 | 225 | |
zhangyx | 9:d03b1af2b8d8 | 226 | // Calculate pressure read calibration values |
zhangyx | 9:d03b1af2b8d8 | 227 | // b5 is also required so BMP180GetTemperature() must be called first. |
zhangyx | 9:d03b1af2b8d8 | 228 | // Value returned will be pressure in units of Pa. |
zhangyx | 9:d03b1af2b8d8 | 229 | long BMP180GetPressure(); |
zhangyx | 9:d03b1af2b8d8 | 230 | |
zhangyx | 9:d03b1af2b8d8 | 231 | #ifdef ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 232 | void send_press(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 233 | void send_temp(Esp8266 & client, const char * topic); |
zhangyx | 9:d03b1af2b8d8 | 234 | #endif // ENABLE_ESP8266 |
zhangyx | 9:d03b1af2b8d8 | 235 | }; |
zhangyx | 9:d03b1af2b8d8 | 236 | //================================================ |
zhangyx | 9:d03b1af2b8d8 | 237 | class GP2Y1010 |
zhangyx | 9:d03b1af2b8d8 | 238 | { |
zhangyx | 9:d03b1af2b8d8 | 239 | /***** |
zhangyx | 9:d03b1af2b8d8 | 240 | * |
zhangyx | 9:d03b1af2b8d8 | 241 | *****/ |
zhangyx | 9:d03b1af2b8d8 | 242 | private: |
zhangyx | 9:d03b1af2b8d8 | 243 | AnalogIn measurePin ; |
zhangyx | 9:d03b1af2b8d8 | 244 | DigitalOut ledPower; |
zhangyx | 9:d03b1af2b8d8 | 245 | unsigned int samplingTime ; |
zhangyx | 9:d03b1af2b8d8 | 246 | unsigned int deltaTime ; |
zhangyx | 9:d03b1af2b8d8 | 247 | unsigned int sleepTime ; |
zhangyx | 9:d03b1af2b8d8 | 248 | |
zhangyx | 9:d03b1af2b8d8 | 249 | float voMeasured ; |
zhangyx | 9:d03b1af2b8d8 | 250 | float calcVoltage ; |
zhangyx | 9:d03b1af2b8d8 | 251 | float dustDensity ; |
zhangyx | 9:d03b1af2b8d8 | 252 | |
zhangyx | 9:d03b1af2b8d8 | 253 | public: |
zhangyx | 9:d03b1af2b8d8 | 254 | GP2Y1010(PinName ledPower,PinName measurePin); |
zhangyx | 9:d03b1af2b8d8 | 255 | float getairdata(); |
zhangyx | 9:d03b1af2b8d8 | 256 | }; |
zhangyx | 9:d03b1af2b8d8 | 257 | //============================================= |
zhangyx | 9:d03b1af2b8d8 | 258 | |
zhangyx | 9:d03b1af2b8d8 | 259 | #endif // ENABLE_SENSORS |
zhangyx | 9:d03b1af2b8d8 | 260 | |
zhangyx | 9:d03b1af2b8d8 | 261 | #endif // !__SENSORS_H |
zhangyx | 9:d03b1af2b8d8 | 262 |