diff --git a/libraries/AGS02MA/AGS02MA.cpp b/libraries/AGS02MA/AGS02MA.cpp index 7714ab6a..cd44f296 100644 --- a/libraries/AGS02MA/AGS02MA.cpp +++ b/libraries/AGS02MA/AGS02MA.cpp @@ -2,7 +2,7 @@ // FILE: AGS02MA.cpp // AUTHOR: Rob Tillaart, Viktor Balint, Beanow // DATE: 2021-08-12 -// VERSION: 0.3.4 +// VERSION: 0.4.0 // PURPOSE: Arduino library for AGS02MA TVOC sensor // URL: https://github.com/RobTillaart/AGS02MA @@ -26,25 +26,9 @@ AGS02MA::AGS02MA(const uint8_t deviceAddress, TwoWire *wire) } -#if defined (ESP8266) || defined(ESP32) -bool AGS02MA::begin(uint8_t dataPin, uint8_t clockPin) -{ - _startTime = millis(); // PREHEAT - if ((dataPin < 255) && (clockPin < 255)) - { - _wire->begin(dataPin, clockPin); - } else { - _wire->begin(); - } - return isConnected(); -} -#endif - - bool AGS02MA::begin() { _startTime = millis(); // PREHEAT TIMING - _wire->begin(); return isConnected(); } diff --git a/libraries/AGS02MA/AGS02MA.h b/libraries/AGS02MA/AGS02MA.h index e54ae574..5cafd281 100644 --- a/libraries/AGS02MA/AGS02MA.h +++ b/libraries/AGS02MA/AGS02MA.h @@ -3,7 +3,7 @@ // FILE: AGS02MA.h // AUTHOR: Rob Tillaart, Viktor Balint, Beanow // DATE: 2021-08-12 -// VERSION: 0.3.4 +// VERSION: 0.4.0 // PURPOSE: Arduino library for AGS02MA TVOC sensor // URL: https://github.com/RobTillaart/AGS02MA // @@ -13,7 +13,7 @@ #include "Wire.h" -#define AGS02MA_LIB_VERSION (F("0.3.4")) +#define AGS02MA_LIB_VERSION (F("0.4.0")) #define AGS02MA_OK 0 #define AGS02MA_ERROR -10 @@ -51,9 +51,6 @@ public: // address 26 = 0x1A explicit AGS02MA(const uint8_t deviceAddress = 26, TwoWire *wire = &Wire); -#if defined (ESP8266) || defined(ESP32) - bool begin(uint8_t sda, uint8_t scl); -#endif bool begin(); bool isConnected(); void reset(); @@ -102,7 +99,7 @@ public: float lastPPM() { return _lastPPB * 0.001; }; uint32_t lastPPB() { return _lastPPB; }; // fetch last PPB measurement - uint32_t lastUGM3() { return _lastUGM3; }; // fetch last UGM3 measurement + uint32_t lastUGM3() { return _lastUGM3; }; // fetch last UGM3 measurement // STATUS diff --git a/libraries/AGS02MA/CHANGELOG.md b/libraries/AGS02MA/CHANGELOG.md index e3099bac..81d53242 100644 --- a/libraries/AGS02MA/CHANGELOG.md +++ b/libraries/AGS02MA/CHANGELOG.md @@ -6,12 +6,17 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## [0.4.0] - 2023-12-06 +- refactor API, begin() +- update readme.md + +---- + ## [0.3.4] - 2023-09-25 - add Wire1 support for ESP32 - update readme.md - minor edits - ## [0.3.3] - 2023-01-21 - update GitHub actions - update license 2023 diff --git a/libraries/AGS02MA/README.md b/libraries/AGS02MA/README.md index 911e743a..30de042d 100644 --- a/libraries/AGS02MA/README.md +++ b/libraries/AGS02MA/README.md @@ -13,11 +13,23 @@ Arduino library for AGS02MA TVOC sensor. + +#### Description + This library is still experimental, so please use with care. Note the warning about the I2C low speed, the device works at max 30 KHz. Since 0.3.1 this library uses 25 KHz. +#### 0.4.0 Breaking change + +Version 0.4.0 introduced a breaking change. +You cannot set the pins in **begin()** any more. +This reduces the dependency of processor dependent Wire implementations. +The user has to call **Wire.begin()** and can optionally set the Wire pins +before calling **begin()**. + + ## I2C ### PIN layout from left to right @@ -101,12 +113,11 @@ with the sensor and this (or other) library. #include "AGS02MA.h" ``` - #### Constructor -- **AGS02MA(uint8_t deviceAddress = 26, TwoWire \*wire = &Wire)** constructor, with default address and default I2C interface. -- **bool begin(uint8_t sda, uint8_t scl)** begin for ESP32 and ESP8266. -- **bool begin()** initializer for Arduino UNO a.o. +- **AGS02MA(uint8_t deviceAddress = 26, TwoWire \*wire = &Wire)** constructor, +with default address and default I2C interface. +- **bool begin()** initialize the library. - **bool isConnected()** returns true if device address can be seen on I2C. - **void reset()** reset internal variables. @@ -157,6 +168,7 @@ The default mode at startup of the sensor is PPB = parts per billion. - **bool setUGM3Mode()** sets device in micro gram per cubic meter mode. Returns true on success. - **uint8_t getMode()** returns mode set. 0 = PPB, 1 = UGm3, 255 = not set. + #### Air quality classification | ppm | Class | @@ -171,6 +183,7 @@ The default mode at startup of the sensor is PPB = parts per billion. [Source](https://learn.kaiterra.com/en/resources/understanding-tvoc-volatile-organic-compounds) + #### PPB versus UGM3 There is no 1 to 1 relation between the PPB and the uG/m3 readings as this relation depends diff --git a/libraries/AGS02MA/examples/AGS02MA_PPB/AGS02MA_PPB.ino b/libraries/AGS02MA/examples/AGS02MA_PPB/AGS02MA_PPB.ino index 13c379ca..8b9ceb0e 100644 --- a/libraries/AGS02MA/examples/AGS02MA_PPB/AGS02MA_PPB.ino +++ b/libraries/AGS02MA/examples/AGS02MA_PPB/AGS02MA_PPB.ino @@ -1,11 +1,8 @@ // // FILE: AGS02MA_PPB.ino // AUTHOR: Rob Tillaart -// VERSION: 0.1.0 // PURPOSE: test application -// DATE: 2021-08-12 // URL: https://github.com/RobTillaart/AGS02MA -// #include "AGS02MA.h" @@ -16,15 +13,18 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); @@ -32,8 +32,8 @@ void setup() Serial.print("VERSION:\t"); Serial.println(AGS.getSensorVersion()); - // pre-heating improves measurement quality - // can be skipped + // pre-heating improves measurement quality + // can be skipped Serial.println("\nWarming up (120 seconds = 24 dots)"); while (AGS.isHeated() == false) { @@ -70,4 +70,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_PPB_TIMING/AGS02MA_PPB_TIMING.ino b/libraries/AGS02MA/examples/AGS02MA_PPB_TIMING/AGS02MA_PPB_TIMING.ino index cc52bf35..83fd2baf 100644 --- a/libraries/AGS02MA/examples/AGS02MA_PPB_TIMING/AGS02MA_PPB_TIMING.ino +++ b/libraries/AGS02MA/examples/AGS02MA_PPB_TIMING/AGS02MA_PPB_TIMING.ino @@ -15,15 +15,18 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); @@ -31,8 +34,8 @@ void setup() Serial.print("VERS:\t"); Serial.println(AGS.getSensorVersion()); - // pre-heating improves measurement quality - // can be skipped + // pre-heating improves measurement quality + // can be skipped Serial.println("\nWarming up (120 seconds = 24 dots)"); while (AGS.isHeated() == false) { @@ -69,5 +72,5 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_PPM/AGS02MA_PPM.ino b/libraries/AGS02MA/examples/AGS02MA_PPM/AGS02MA_PPM.ino index e39d08f3..951c82eb 100644 --- a/libraries/AGS02MA/examples/AGS02MA_PPM/AGS02MA_PPM.ino +++ b/libraries/AGS02MA/examples/AGS02MA_PPM/AGS02MA_PPM.ino @@ -15,15 +15,18 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); @@ -31,8 +34,8 @@ void setup() Serial.print("VERSION:\t"); Serial.println(AGS.getSensorVersion()); - // pre-heating improves measurement quality - // can be skipped + // pre-heating improves measurement quality + // can be skipped Serial.println("\nWarming up (120 seconds = 24 dots)"); while (AGS.isHeated() == false) { @@ -65,5 +68,5 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_UGM3/AGS02MA_UGM3.ino b/libraries/AGS02MA/examples/AGS02MA_UGM3/AGS02MA_UGM3.ino index 1eb7287a..467a2b17 100644 --- a/libraries/AGS02MA/examples/AGS02MA_UGM3/AGS02MA_UGM3.ino +++ b/libraries/AGS02MA/examples/AGS02MA_UGM3/AGS02MA_UGM3.ino @@ -1,11 +1,8 @@ // // FILE: AGS02MA_UGM3.ino // AUTHOR: Rob Tillaart -// VERSION: 0.1.0 // PURPOSE: test application -// DATE: 2021-08-12 // URL: https://github.com/RobTillaart/AGS02MA -// #include "AGS02MA.h" @@ -16,21 +13,24 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); - // pre-heating improves measurement quality - // can be skipped + // pre-heating improves measurement quality + // can be skipped Serial.println("\nWarming up (120 seconds = 24 dots)"); while (AGS.isHeated() == false) { @@ -67,4 +67,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_calibrate/AGS02MA_calibrate.ino b/libraries/AGS02MA/examples/AGS02MA_calibrate/AGS02MA_calibrate.ino index 11e39500..04af9328 100644 --- a/libraries/AGS02MA/examples/AGS02MA_calibrate/AGS02MA_calibrate.ino +++ b/libraries/AGS02MA/examples/AGS02MA_calibrate/AGS02MA_calibrate.ino @@ -1,15 +1,13 @@ // // FILE: AGS02MA_calibrate.ino // AUTHOR: Rob Tillaart, Beanow -// VERSION: 0.2.0 // PURPOSE: test application -// DATE: 2021-08-12 // URL: https://github.com/RobTillaart/AGS02MA -// + #include "AGS02MA.h" -// You can decrease/disable warmup when you're certain the chip already warmed up. +// You can decrease/disable warmup when you're certain the chip already warmed up. #define WARMUP_MINUTES 6 #define READ_INTERVAL 3000 @@ -22,13 +20,12 @@ AGS02MA AGS(26); void setup() { - // ESP devices typically mis the first serial log lines after flashing. - // Delay somewhat to include all output. + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. delay(1000); Serial.begin(115200); Serial.println(__FILE__); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); @@ -49,7 +46,7 @@ void setup() Serial.println(version); int err = AGS.lastError(); - // Reading version correctly matters, as we display additional comments based on it. + // Reading version correctly matters, as we display additional comments based on it. if(err != AGS02MA_OK) { Serial.print("Error reading version:\t"); @@ -101,7 +98,7 @@ void setup() delay(1000); - // returns 1 if successful written + // returns 1 if successful written b = AGS.zeroCalibration(); Serial.println(); Serial.print("CALIB:\t"); @@ -123,8 +120,8 @@ void setup() Serial.println(); Serial.println("Showing what PPB values look like post calibration."); - // A 125 status is typically shown on v118's after they've been powered off. - // Either having this version at all, or seeing this status, we'll display a notice. + // A 125 status is typically shown on v118's after they've been powered off. + // Either having this version at all, or seeing this status, we'll display a notice. if (version == 118 || initialValue.status == 125) { Serial.println("NOTICE: v118 sensors are known to give different results after powering off!"); @@ -162,4 +159,5 @@ void printPPB() Serial.println(); } -// -- END OF FILE -- + +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_calibrate_manual/AGS02MA_calibrate_manual.ino b/libraries/AGS02MA/examples/AGS02MA_calibrate_manual/AGS02MA_calibrate_manual.ino index c5db3413..40e03279 100644 --- a/libraries/AGS02MA/examples/AGS02MA_calibrate_manual/AGS02MA_calibrate_manual.ino +++ b/libraries/AGS02MA/examples/AGS02MA_calibrate_manual/AGS02MA_calibrate_manual.ino @@ -1,15 +1,14 @@ // // FILE: AGS02MA_calibrate_manual.ino // AUTHOR: Rob Tillaart, Beanow -// VERSION: 0.2.0 // PURPOSE: test application // DATE: 2022-04-22 // URL: https://github.com/RobTillaart/AGS02MA -// + #include "AGS02MA.h" -// The zero calibration value we'll (temporarily) set in the example. +// The zero calibration value we'll (temporarily) set in the example. #define ZC_VALUE 700 #define READS 10 @@ -24,13 +23,12 @@ uint8_t version; void setup() { - // ESP devices typically mis the first serial log lines after flashing. - // Delay somewhat to include all output. + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. delay(1000); Serial.begin(115200); Serial.println(__FILE__); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); @@ -51,7 +49,7 @@ void setup() Serial.println(version); int err = AGS.lastError(); - // Reading version correctly matters, as we display additional comments based on it. + // Reading version correctly matters, as we display additional comments based on it. if(err != AGS02MA_OK) { Serial.print("Error reading version:\t"); @@ -130,7 +128,6 @@ void setup() printZeroCalibrationData(restoredValue); Serial.println(); - } } @@ -171,4 +168,5 @@ void printPPB() Serial.println(); } -// -- END OF FILE -- + +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_get_registers/.arduino-ci.yml b/libraries/AGS02MA/examples/AGS02MA_get_registers/.arduino-ci.yml new file mode 100644 index 00000000..783ab315 --- /dev/null +++ b/libraries/AGS02MA/examples/AGS02MA_get_registers/.arduino-ci.yml @@ -0,0 +1,28 @@ +platforms: + rpipico: + board: rp2040:rp2040:rpipico + package: rp2040:rp2040 + gcc: + features: + defines: + - ARDUINO_ARCH_RP2040 + warnings: + flags: + +packages: + rp2040:rp2040: + url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json + +compile: + # Choosing to run compilation tests on 2 different Arduino platforms + platforms: + # - uno + # - due + # - zero + # - leonardo + # - m4 + # - esp32 + # - esp8266 + # - mega2560 + # - rpipico + diff --git a/libraries/AGS02MA/examples/AGS02MA_get_registers/AGS02MA_get_registers.ino b/libraries/AGS02MA/examples/AGS02MA_get_registers/AGS02MA_get_registers.ino new file mode 100644 index 00000000..e957fa2b --- /dev/null +++ b/libraries/AGS02MA/examples/AGS02MA_get_registers/AGS02MA_get_registers.ino @@ -0,0 +1,107 @@ +// +// FILE: AGS02MA_get_registers.ino +// AUTHOR: Rob Tillaart +// PURPOSE: low level develop application +// URL: https://github.com/RobTillaart/AGS02MA +// +// PURPOSE: this is a debugging tool for developing / investigating. +// Do not use it unless you are willing to crash your sensor. +// +// usage: make _readRegister(), _writeRegister() and _buffer public +// +// USE AT OWN RISK + + +#include "AGS02MA.h" + + +AGS02MA AGS(26); + + +void setup() +{ + Serial.begin(115200); + Serial.println(__FILE__); + Serial.print("AGS02MA_LIB_VERSION: "); + Serial.println(AGS02MA_LIB_VERSION); + Serial.println(); + + Wire.begin(); + + bool b = AGS.begin(); + Serial.print("BEGIN:\t"); + Serial.println(b); + + uint8_t version = AGS.getSensorVersion(); + Serial.print("VERS:\t"); + Serial.println(version); + + // AGS._buffer[0] = 0; + // AGS._buffer[1] = 13; + // AGS._buffer[2] = 14; + // AGS._buffer[3] = 90; + // AGS._buffer[5] = 248; + // int x = AGS._writeRegister(0x01); // does not work. + // Serial.println(x); + + for (uint8_t reg = 0; reg < 9; reg++) + { + dumpRegister(reg); + } + dumpRegister(0x11); + dumpRegister(0x20); + dumpRegister(0x21); + + AGS.setPPBMode(); +} + + +void loop() +{ +// dumpRegister(0); +// uint32_t zero = dumpRegister(1); +// uint32_t x = dumpRegister(0x20); // seems to be the raw value. +// delay(100); +// uint32_t y = AGS.readPPB(); +// Serial.print(zero); +// Serial.print("\t"); +// Serial.print(x); +// Serial.print("\t"); +// Serial.print(y); +// Serial.print("\t"); +// Serial.print((1.0 * x) / y, 2); +// Serial.print("\t"); +// Serial.print((zero - x) / 350); +// Serial.println(); +// Serial.println(); +// delay(2000); +} + + +uint32_t dumpRegister(uint8_t reg) +{ + Serial.print("REG["); + Serial.print(reg); + Serial.print("]"); + + bool b = AGS._readRegister(reg); + uint32_t value = 0; + for (int i = 0; i < 4; i++) + { + Serial.print("\t"); + Serial.print(AGS._buffer[i]); + + value *= 256; + value += AGS._buffer[i]; + } + Serial.print("\t"); + Serial.print(value); + + Serial.println(); + delay(100); + + return value; +} + + +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_minimal/AGS02MA_minimal.ino b/libraries/AGS02MA/examples/AGS02MA_minimal/AGS02MA_minimal.ino index d6dcb64b..c5e2d931 100644 --- a/libraries/AGS02MA/examples/AGS02MA_minimal/AGS02MA_minimal.ino +++ b/libraries/AGS02MA/examples/AGS02MA_minimal/AGS02MA_minimal.ino @@ -1,15 +1,13 @@ // // FILE: AGS02MA_minimal.ino // AUTHOR: Rob Tillaart -// VERSION: 0.1.1 // PURPOSE: test application -// DATE: 2021-08-14 // URL: https://github.com/RobTillaart/AGS02MA // -// default register is 0x00 at start of the sensor -// datasheet states one can get the value with minimal interaction. -// note this sketch does not use the library! +// default register is 0x00 at start of the sensor +// datasheet states one can get the value with minimal interaction. +// note this sketch does not use the library! #include "Wire.h" @@ -20,10 +18,18 @@ uint8_t buffer[5]; void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); + Serial.println(__FILE__); + // Serial.print("AGS02MA_LIB_VERSION: "); + // Serial.println(AGS02MA_LIB_VERSION); + Serial.println(); Wire.begin(); - Wire.setClock(30400); // lowest speed an UNO supports that works with sensor. + Wire.setClock(30400); // lowest speed an UNO supports that works with sensor. } @@ -39,7 +45,7 @@ void loop() } Serial.println(); - // CONVERT RAW DATA + // CONVERT RAW DATA Serial.print("STAT:\t"); Serial.println(buffer[0]); Serial.print("PPB:\t"); @@ -50,4 +56,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_minimal_plotter/AGS02MA_minimal_plotter.ino b/libraries/AGS02MA/examples/AGS02MA_minimal_plotter/AGS02MA_minimal_plotter.ino index 1211730c..9df09966 100644 --- a/libraries/AGS02MA/examples/AGS02MA_minimal_plotter/AGS02MA_minimal_plotter.ino +++ b/libraries/AGS02MA/examples/AGS02MA_minimal_plotter/AGS02MA_minimal_plotter.ino @@ -21,10 +21,18 @@ uint8_t cnt = 0; void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); + // Serial.println(__FILE__); + // Serial.print("AGS02MA_LIB_VERSION: "); + // Serial.println(AGS02MA_LIB_VERSION); + // Serial.println(); Wire.begin(); - Wire.setClock(30400); // lowest speed an UNO supports that works with sensor. + Wire.setClock(30400); // lowest speed an UNO supports that works with sensor. } @@ -34,14 +42,14 @@ void loop() for ( int i = 0; i < 5; i++) { buffer[i] = Wire.read(); - // Serial.print(buffer[i], HEX); // for debugging. + // Serial.print(buffer[i], HEX); // for debugging. // Serial.print('\t'); } // Serial.println(); if (cnt == 0) { - // CONVERT RAW DATA + // CONVERT RAW DATA Serial.println("\nSTAT\tPPB\tCRC"); cnt = 20; } @@ -59,4 +67,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_readRegister/AGS02MA_readRegister.ino b/libraries/AGS02MA/examples/AGS02MA_readRegister/AGS02MA_readRegister.ino index 46a941fb..e2123f84 100644 --- a/libraries/AGS02MA/examples/AGS02MA_readRegister/AGS02MA_readRegister.ino +++ b/libraries/AGS02MA/examples/AGS02MA_readRegister/AGS02MA_readRegister.ino @@ -1,11 +1,8 @@ // // FILE: AGS02MA_readRegister.ino // AUTHOR: Rob Tillaart, Beanow -// VERSION: 0.3.0 // PURPOSE: test application -// DATE: 2022-04-22 // URL: https://github.com/RobTillaart/AGS02MA -// #include "AGS02MA.h" @@ -20,19 +17,18 @@ AGS02MA AGS(26); void setup() { - // ESP devices typically mis the first serial log lines after flashing. - // Delay somewhat to include all output. + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. delay(1000); Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); @@ -65,7 +61,7 @@ void loop() void printRegister(uint8_t address, AGS02MA::RegisterData ®) { - // Raw bytes first for any register. + // Raw bytes first for any register. for (auto b : reg.data) { Serial.print("\t"); @@ -76,7 +72,7 @@ void printRegister(uint8_t address, AGS02MA::RegisterData ®) { Serial.print(reg.crcValid ? "OK " : "ERR "); Serial.print(reg.crc); - // Specific interpretations + // Specific interpretations switch (address) { case 0x00: @@ -123,4 +119,4 @@ void printRegister(uint8_t address, AGS02MA::RegisterData ®) { } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_setAddress/AGS02MA_setAddress.ino b/libraries/AGS02MA/examples/AGS02MA_setAddress/AGS02MA_setAddress.ino index b46eb98d..822a0314 100644 --- a/libraries/AGS02MA/examples/AGS02MA_setAddress/AGS02MA_setAddress.ino +++ b/libraries/AGS02MA/examples/AGS02MA_setAddress/AGS02MA_setAddress.ino @@ -1,11 +1,8 @@ // // FILE: AGS02MA_setAddress.ino // AUTHOR: Rob Tillaart -// VERSION: 0.1.0 // PURPOSE: test application -// DATE: 2021-08-13 // URL: https://github.com/RobTillaart/AGS02MA -// #include "AGS02MA.h" @@ -16,15 +13,17 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); bool b = AGS.begin(); Serial.print("BEGIN:\t"); @@ -57,4 +56,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_test/AGS02MA_test.ino b/libraries/AGS02MA/examples/AGS02MA_test/AGS02MA_test.ino index 9eeaf2c0..9911f6e7 100644 --- a/libraries/AGS02MA/examples/AGS02MA_test/AGS02MA_test.ino +++ b/libraries/AGS02MA/examples/AGS02MA_test/AGS02MA_test.ino @@ -1,11 +1,8 @@ // // FILE: AGS02MA_test.ino // AUTHOR: Rob Tillaart -// VERSION: 0.1.0 // PURPOSE: test application -// DATE: 2021-08-12 // URL: https://github.com/RobTillaart/AGS02MA -// #include "AGS02MA.h" @@ -16,15 +13,18 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); @@ -51,4 +51,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/AGS02MA_test_CRC8/AGS02MA_test_CRC8.ino b/libraries/AGS02MA/examples/AGS02MA_test_CRC8/AGS02MA_test_CRC8.ino index c285e79e..0e270097 100644 --- a/libraries/AGS02MA/examples/AGS02MA_test_CRC8/AGS02MA_test_CRC8.ino +++ b/libraries/AGS02MA/examples/AGS02MA_test_CRC8/AGS02MA_test_CRC8.ino @@ -7,10 +7,10 @@ // URL: https://github.com/RobTillaart/AGS02MA // -// NOTE: this is a low level test for the communication / CRC -// to have this example to work, -// one need to make the _CRC8() and _buffer[] -// public in the AGS02MA.h file. +// NOTE: this is a low level test for the communication / CRC +// to have this example to work, +// one need to make the _CRC8() and _buffer[] +// public in the AGS02MA.h file. #include "AGS02MA.h" @@ -21,15 +21,18 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); - Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); @@ -71,5 +74,5 @@ void dump(char * str) } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/issue/issue.ino b/libraries/AGS02MA/examples/issue/issue.ino new file mode 100644 index 00000000..688035d5 --- /dev/null +++ b/libraries/AGS02MA/examples/issue/issue.ino @@ -0,0 +1,104 @@ +// +// FILE: AGS02MA_PPB.ino +// AUTHOR: Rob Tillaart +// PURPOSE: test application +// URL: https://github.com/RobTillaart/AGS02MA + + +#include "AGS02MA.h" + +AGS02MA AGS(26); + +uint32_t rounds = 0; + + +void setup() +{ + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + + Serial.begin(115200); + Serial.println(__FILE__); + Serial.print("AGS02MA_LIB_VERSION: "); + Serial.println(AGS02MA_LIB_VERSION); + Serial.println(); + + Wire.begin(); + + bool b = AGS.begin(); + Serial.print("BEGIN:\t"); + Serial.println(b); + + Serial.print("VERSION:\t"); + Serial.println(AGS.getSensorVersion()); + + Serial.print("DATE:\t"); + Serial.println(AGS.getSensorDate(), HEX); + + // pre-heating improves measurement quality + // can be skipped + // Serial.println("\nWarming up (120 seconds = 24 dots)"); + // while (AGS.isHeated() == false) + // { + // delay(5000); + // Serial.print("."); + // } + // Serial.println(); + + uint8_t version = AGS.getSensorVersion(); + Serial.print("VERS:\t"); + Serial.println(version); +} + + +void loop() +{ + delay(3000); + + uint8_t kind = rounds % 20; + + // Switch mode every 10 and 20 rounds. + bool b; + if (kind == 0) { + b = AGS.setPPBMode(); + uint8_t m = AGS.getMode(); + Serial.print("MODE:\t"); + Serial.print(b); + Serial.print("\t"); + Serial.println(m); + } else if (kind == 10) { + b = AGS.setUGM3Mode(); + uint8_t m = AGS.getMode(); + Serial.print("MODE:\t"); + Serial.print(b); + Serial.print("\t"); + Serial.println(m); + } + + // Read PPB in first half of a 20-round cycle. + if (kind < 10) { + uint32_t value = AGS.readPPB(); + Serial.print("PPB:\t"); + Serial.print(value); + Serial.print("\t"); + Serial.print(AGS.lastStatus(), HEX); + Serial.print("\t"); + Serial.print(AGS.lastError(), HEX); + Serial.println(); + } else { + uint32_t value = AGS.readUGM3(); + Serial.print("UGM3:\t"); + Serial.print(value); + Serial.print("\t"); + Serial.print(AGS.lastStatus(), HEX); + Serial.print("\t"); + Serial.print(AGS.lastError(), HEX); + Serial.println(); + } + + rounds++; +} + + +// -- END OF FILE -- diff --git a/libraries/AGS02MA/examples/test_CRC8/test_CRC8.ino b/libraries/AGS02MA/examples/test_CRC8/test_CRC8.ino index fa5e16b8..0351219b 100644 --- a/libraries/AGS02MA/examples/test_CRC8/test_CRC8.ino +++ b/libraries/AGS02MA/examples/test_CRC8/test_CRC8.ino @@ -7,8 +7,8 @@ // URL: https://github.com/RobTillaart/AGS02MA // -// just for develop scratch pad -// need to make the CRC function public in the library +// just for develop scratch pad +// need to make the CRC function public in the library #include "AGS02MA.h" @@ -19,14 +19,18 @@ AGS02MA AGS(26); void setup() { + // ESP devices typically miss the first serial log lines after flashing. + // Delay somewhat to include all output. + delay(1000); + Serial.begin(115200); Serial.println(__FILE__); - - Wire.begin(); Serial.print("AGS02MA_LIB_VERSION: "); Serial.println(AGS02MA_LIB_VERSION); Serial.println(); + Wire.begin(); + bool b = AGS.begin(); Serial.print("BEGIN:\t"); Serial.println(b); @@ -78,4 +82,4 @@ void loop() } -// -- END OF FILE -- +// -- END OF FILE -- diff --git a/libraries/AGS02MA/keywords.txt b/libraries/AGS02MA/keywords.txt index 5fc4dec1..0473c528 100644 --- a/libraries/AGS02MA/keywords.txt +++ b/libraries/AGS02MA/keywords.txt @@ -12,7 +12,6 @@ reset KEYWORD2 isHeated KEYWORD2 - setAddress KEYWORD2 getAddress KEYWORD2 diff --git a/libraries/AGS02MA/library.json b/libraries/AGS02MA/library.json index c1cdcaa3..a605d23a 100644 --- a/libraries/AGS02MA/library.json +++ b/libraries/AGS02MA/library.json @@ -21,7 +21,7 @@ "type": "git", "url": "https://github.com/RobTillaart/AGS02MA.git" }, - "version": "0.3.4", + "version": "0.4.0", "license": "MIT", "frameworks": "*", "platforms": "*", diff --git a/libraries/AGS02MA/library.properties b/libraries/AGS02MA/library.properties index 5a84701d..8ab3459b 100644 --- a/libraries/AGS02MA/library.properties +++ b/libraries/AGS02MA/library.properties @@ -1,5 +1,5 @@ name=AGS02MA -version=0.3.4 +version=0.4.0 author=Rob Tillaart maintainer=Rob Tillaart sentence=Arduino library for AGS02MA - TVOC sensor