GY-63_MS5611/libraries/AGS02MA/examples/AGS02MA_calibrate/AGS02MA_calibrate.ino
2022-04-25 14:17:43 +02:00

166 lines
4.1 KiB
C++

//
// 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.
#define WARMUP_MINUTES 6
#define READ_INTERVAL 3000
uint32_t start, stop;
uint8_t version;
AGS02MA AGS(26);
void setup()
{
// ESP devices typically mis 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();
Serial.print("WARMUP:\t\t");
Serial.println(WARMUP_MINUTES);
Serial.print("INTERVAL:\t");
Serial.println(READ_INTERVAL);
Wire.begin();
bool b = AGS.begin();
Serial.print("BEGIN:\t\t");
Serial.println(b);
Serial.print("VERSION:\t");
version = AGS.getSensorVersion();
Serial.println(version);
int err = AGS.lastError();
// Reading version correctly matters, as we display additional comments based on it.
if(err != AGS02MA_OK)
{
Serial.print("Error reading version:\t");
Serial.println(err);
Serial.println("Won't attempt to calibrate. Reset when connection with the sensor is stable.");
Serial.println();
return;
}
b = AGS.setPPBMode();
uint8_t m = AGS.getMode();
Serial.print("MODE:\t\t");
Serial.print(b);
Serial.print("\t");
Serial.println(m);
Serial.println();
Serial.print("Place the device outside in open air for ");
Serial.print(WARMUP_MINUTES);
Serial.println(" minute(s).");
Serial.println("Make sure your device has warmed up sufficiently for the best results.");
Serial.println("The PPB values should be stable (may include noise) not constantly decreasing.");
Serial.println();
start = millis();
stop = WARMUP_MINUTES * 60000UL;
while(millis() - start < stop)
{
Serial.print("[PRE ]\t");
printPPB();
delay(READ_INTERVAL);
}
Serial.println();
Serial.println("About to perform calibration now.");
AGS02MA::ZeroCalibrationData initialValue;
if (!AGS.getZeroCalibrationData(initialValue))
{
Serial.print("Error reading zero calibration data:\t");
Serial.println(AGS.lastError());
Serial.println("Won't attempt to calibrate. Reset when connection with the sensor is stable.");
Serial.println();
return;
}
Serial.println("Your previous calibration data was:");
printZeroCalibrationData(initialValue);
delay(1000);
// returns 1 if successful written
b = AGS.zeroCalibration();
Serial.println();
Serial.print("CALIB:\t");
Serial.println(b);
Serial.println();
Serial.println("Calibration done.");
AGS02MA::ZeroCalibrationData zc;
while (!AGS.getZeroCalibrationData(zc))
{
Serial.print("Error:\t");
Serial.print(AGS.lastError());
Serial.println("\tretrying...");
delay(READ_INTERVAL);
}
Serial.println("Your new calibration data is:");
printZeroCalibrationData(zc);
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.
if (version == 118 || initialValue.status == 125)
{
Serial.println("NOTICE: v118 sensors are known to give different results after powering off!");
Serial.println("You may need to manually set your calibration value every time power was lost.");
}
Serial.println();
}
void loop()
{
Serial.print("[POST]\t");
printPPB();
delay(READ_INTERVAL);
}
void printZeroCalibrationData(AGS02MA::ZeroCalibrationData &zc) {
Serial.print("Status:\t");
Serial.println(zc.status);
Serial.print("Value:\t");
Serial.println(zc.value);
}
void printPPB()
{
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();
}
// -- END OF FILE --