diff --git a/examples/bme680async/bme680async.ino b/examples/bme680async/bme680async.ino new file mode 100644 index 0000000..10f3ccc --- /dev/null +++ b/examples/bme680async/bme680async.ino @@ -0,0 +1,101 @@ +/*************************************************************************** + This is a library for the BME680 gas, humidity, temperature & pressure sensor + + Designed specifically to work with the Adafruit BME680 Breakout + ----> http://www.adafruit.com/products/3660 + + These sensors use I2C or SPI to communicate, 2 or 4 pins are required + to interface. + + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing products + from Adafruit! + + Written by Limor Fried & Kevin Townsend for Adafruit Industries. + BSD license, all text above must be included in any redistribution + ***************************************************************************/ + +#include +#include +#include +#include "Adafruit_BME680.h" + +#define BME_SCK 13 +#define BME_MISO 12 +#define BME_MOSI 11 +#define BME_CS 10 + +#define SEALEVELPRESSURE_HPA (1013.25) + +Adafruit_BME680 bme; // I2C +//Adafruit_BME680 bme(BME_CS); // hardware SPI +//Adafruit_BME680 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); + +void setup() { + Serial.begin(9600); + while (!Serial); + Serial.println(F("BME680 async test")); + + if (!bme.begin()) { + Serial.println(F("Could not find a valid BME680 sensor, check wiring!")); + while (1); + } + + // Set up oversampling and filter initialization + bme.setTemperatureOversampling(BME680_OS_8X); + bme.setHumidityOversampling(BME680_OS_2X); + bme.setPressureOversampling(BME680_OS_4X); + bme.setIIRFilterSize(BME680_FILTER_SIZE_3); + bme.setGasHeater(320, 150); // 320*C for 150 ms +} + +void loop() { + // Tell BME680 to begin measurement. + unsigned long endTime = bme.beginReading(); + if (endTime == 0) { + Serial.println(F("Failed to begin reading :(")); + return; + } + Serial.print(F("Reading started at ")); + Serial.print(millis()); + Serial.print(F(" and will finish at ")); + Serial.println(endTime); + + Serial.println(F("You can do other work during BME680 measurement.")); + delay(50); // This represents parallel work. + // There's no need to delay() until millis() >= endTime: bme.endReading() + // takes care of that. It's okay for parallel work to take longer than + // BME680's measurement time. + + // Obtain measurement results from BME680. Note that this operation isn't + // instantaneous even if milli() >= endTime due to I2C/SPI latency. + if (!bme.endReading()) { + Serial.println(F("Failed to complete reading :(")); + return; + } + Serial.print(F("Reading completed at ")); + Serial.println(millis()); + + Serial.print(F("Temperature = ")); + Serial.print(bme.temperature); + Serial.println(F(" *C")); + + Serial.print(F("Pressure = ")); + Serial.print(bme.pressure / 100.0); + Serial.println(F(" hPa")); + + Serial.print(F("Humidity = ")); + Serial.print(bme.humidity); + Serial.println(F(" %")); + + Serial.print(F("Gas = ")); + Serial.print(bme.gas_resistance / 1000.0); + Serial.println(F(" KOhms")); + + Serial.print(F("Approx. Altitude = ")); + Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); + Serial.println(F(" m")); + + Serial.println(); + delay(2000); +} \ No newline at end of file