Initialization modification

Constructor modified, .init method was deprecated.
This commit is contained in:
2024-01-03 20:57:09 +07:00
parent 4427d84585
commit 57590c0c5e
3 changed files with 58 additions and 54 deletions

View File

@@ -8,6 +8,8 @@
# GyverBME280
Лёгкая библиотека для работы с BME280 по I2C для Arduino
**Примечание** (от автора форка): Библиотека частично совместима с оригинальной. Отличается только конструктор и процесс инициализации.
### Совместимость
Совместима со всеми Arduino платформами (используются Arduino-функции)

View File

@@ -5,7 +5,7 @@
float pressureToAltitude(float pressure) {
if (!pressure) return 0; // If the pressure module has been disabled return '0'
pressure /= 100.0F; // Convert [Pa] to [hPa]
return 44330.0 * (1.0 - pow(pressure / 1013.25, 0.1903)); // Сalculate altitude
return 44330.0f * (1.0f - pow(pressure / 1013.25f, 0.1903f)); // Сalculate altitude
}
float pressureToMmHg(float pressure) {
@@ -14,14 +14,17 @@ float pressureToMmHg(float pressure) {
/* ============ Setup & begin ============ */
bool GyverBME280::begin(void) {
GyverBME280::GyverBME280(TwoWire &wire) {
_wire = &wire;
}
bool GyverBME280::begin() {
return begin(0x76);
}
bool GyverBME280::begin(uint8_t address) {
_i2c_address = address;
/* === Start I2C bus & check BME280 === */
Wire.begin(); // Start I2C bus
if (!reset()) return false; // BME280 software reset & ack check
uint8_t ID = readRegister(0xD0);
if (ID != 0x60 && ID != 0x58) return false; // Check chip ID (bme/bmp280)
@@ -108,11 +111,11 @@ float GyverBME280::readPressure(void) {
float GyverBME280::readHumidity(void) {
Wire.beginTransmission(_i2c_address); // Start I2C transmission
Wire.write(0xFD); // Request humidity data register
if (Wire.endTransmission() != 0) return 0;
Wire.requestFrom(_i2c_address, 2); // Request humidity data
int32_t hum_raw = ((uint16_t)Wire.read() << 8) | (uint16_t)Wire.read(); // Read humidity data
_wire->beginTransmission(_i2c_address); // Start I2C transmission
_wire->write(0xFD); // Request humidity data register
if (_wire->endTransmission() != 0) return 0;
_wire->requestFrom(_i2c_address, 2); // Request humidity data
int32_t hum_raw = ((uint16_t)_wire->read() << 8) | (uint16_t)_wire->read(); // Read humidity data
if (hum_raw == 0x8000) return 0; // If the humidity module has been disabled return '0'
int32_t value = (readTempInt() - ((int32_t)76800)); // Start humidity converting
@@ -139,8 +142,6 @@ void GyverBME280::oneMeasurement(void) {
writeRegister(0xF4 , ((readRegister(0xF4) & 0xFC) | 0x02)); // Set the operating mode to FORCED_MODE
}
GyverBME280::GyverBME280() {}
/* ============ Private ============ */
/* = BME280 software reset = */
@@ -153,66 +154,66 @@ bool GyverBME280::reset(void) {
/* = Read and combine three BME280 registers = */
uint32_t GyverBME280::readRegister24(uint8_t address) {
Wire.beginTransmission(_i2c_address);
Wire.write(address);
if (Wire.endTransmission() != 0) return 0x800000;
Wire.requestFrom(_i2c_address, 3);
return (((uint32_t)Wire.read() << 16) | ((uint32_t)Wire.read() << 8) | (uint32_t)Wire.read());
_wire->beginTransmission(_i2c_address);
_wire->write(address);
if (_wire->endTransmission() != 0) return 0x800000;
_wire->requestFrom(_i2c_address, 3);
return (((uint32_t)_wire->read() << 16) | ((uint32_t)_wire->read() << 8) | (uint32_t)_wire->read());
}
/* = Write one 8-bit BME280 register = */
bool GyverBME280::writeRegister(uint8_t address , uint8_t data) {
Wire.beginTransmission(_i2c_address);
Wire.write(address);
Wire.write(data);
if (Wire.endTransmission() != 0) return false;
_wire->beginTransmission(_i2c_address);
_wire->write(address);
_wire->write(data);
if (_wire->endTransmission() != 0) return false;
return true;
}
/* = Read one 8-bit BME280 register = */
uint8_t GyverBME280::readRegister(uint8_t address) {
Wire.beginTransmission(_i2c_address);
Wire.write(address);
if (Wire.endTransmission() != 0) return 0;
Wire.requestFrom(_i2c_address , 1);
return Wire.read();
_wire->beginTransmission(_i2c_address);
_wire->write(address);
if (_wire->endTransmission() != 0) return 0;
_wire->requestFrom(_i2c_address , 1);
return _wire->read();
}
/* = Structure to store all calibration values = */
void GyverBME280::readCalibrationData(void) {
/* first part request*/
Wire.beginTransmission(_i2c_address);
Wire.write(0x88);
if (Wire.endTransmission() != 0) return;
Wire.requestFrom(_i2c_address , 25);
_wire->beginTransmission(_i2c_address);
_wire->write(0x88);
if (_wire->endTransmission() != 0) return;
_wire->requestFrom(_i2c_address , 25);
/* reading */
CalibrationData._T1 = (Wire.read() | (Wire.read() << 8));
CalibrationData._T2 = (Wire.read() | (Wire.read() << 8));
CalibrationData._T3 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P1 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P2 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P3 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P4 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P5 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P6 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P7 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P8 = (Wire.read() | (Wire.read() << 8));
CalibrationData._P9 = (Wire.read() | (Wire.read() << 8));
CalibrationData._H1 = Wire.read();
CalibrationData._T1 = (_wire->read() | (_wire->read() << 8));
CalibrationData._T2 = (_wire->read() | (_wire->read() << 8));
CalibrationData._T3 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P1 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P2 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P3 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P4 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P5 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P6 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P7 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P8 = (_wire->read() | (_wire->read() << 8));
CalibrationData._P9 = (_wire->read() | (_wire->read() << 8));
CalibrationData._H1 = _wire->read();
/* second part request*/
Wire.beginTransmission(_i2c_address);
Wire.write(0xE1);
Wire.endTransmission();
Wire.requestFrom(_i2c_address , 8);
_wire->beginTransmission(_i2c_address);
_wire->write(0xE1);
_wire->endTransmission();
_wire->requestFrom(_i2c_address , 8);
/* reading */
CalibrationData._H2 = (Wire.read() | (Wire.read() << 8));
CalibrationData._H3 = Wire.read();
CalibrationData._H4 = (Wire.read() << 4);
uint8_t interVal = Wire.read();
CalibrationData._H2 = (_wire->read() | (_wire->read() << 8));
CalibrationData._H3 = _wire->read();
CalibrationData._H4 = (_wire->read() << 4);
uint8_t interVal = _wire->read();
CalibrationData._H4 |= (interVal & 0xF);
CalibrationData._H5 = (((interVal & 0xF0) >> 4) | (Wire.read() << 4));
CalibrationData._H6 = Wire.read();
CalibrationData._H5 = (((interVal & 0xF0) >> 4) | (_wire->read() << 4));
CalibrationData._H6 = _wire->read();
}

View File

@@ -10,7 +10,7 @@
Версии:
v1.3 - исправлена ошибка при отриц. температуре
v1.4 - разбил на h и cpp
v1.5 - добавлена поддержка BMP280
v1.5 - добавлена поддержка BMP280s
*/
#ifndef GyverBME280_h
@@ -50,8 +50,8 @@
class GyverBME280 {
public:
GyverBME280(); // Create an object of class BME280
bool begin(void); // Initialize sensor with standart 0x76 address
GyverBME280(TwoWire &wire); // Create an object of class BME280
bool begin(); // Initialize sensor with standart 0x76 address
bool begin(uint8_t address); // Initialize sensor with not standart 0x76 address
bool isMeasuring(void); // Returns 'true' while the measurement is in progress
float readPressure(void); // Read and calculate atmospheric pressure [float , Pa]
@@ -68,6 +68,7 @@ public:
private:
//============================== DEFAULT SETTINGS ========================================|
TwoWire *_wire = nullptr;
int _i2c_address = 0x76; // BME280 address on I2C bus |
uint8_t _operating_mode = NORMAL_MODE; // Sensor operation mode |
uint8_t _standby_time = STANDBY_250MS; // Time between measurements in NORMAL_MODE |