QAQ ==!

Dependencies:   mbed QEI-1 nRF24L01P xiugai

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?

UserRevisionLine numberNew 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