0.3.1 MTP40C

This commit is contained in:
Rob Tillaart 2023-11-14 16:43:08 +01:00
parent 596e6d78f8
commit 9bff659775
6 changed files with 60 additions and 35 deletions

View File

@ -6,6 +6,10 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/)
and this project adheres to [Semantic Versioning](http://semver.org/). and this project adheres to [Semantic Versioning](http://semver.org/).
## [0.3.1] - 2023-11-14
- update readme.md
## [0.3.0] - 2023-07-30 ## [0.3.0] - 2023-07-30
- replace CRC with other algorithm for AVR - replace CRC with other algorithm for AVR
- less RAM, less code, faster (AVR only) - less RAM, less code, faster (AVR only)

View File

@ -2,7 +2,7 @@
// FILE: MTP40C.cpp // FILE: MTP40C.cpp
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// DATE: 2021-08-20 // DATE: 2021-08-20
// VERSION: 0.3.0 // VERSION: 0.3.1
// PURPOSE: Arduino library for MTP40C MTP40D CO2 sensor // PURPOSE: Arduino library for MTP40C MTP40D CO2 sensor
// URL: https://github.com/RobTillaart/MTP40C // URL: https://github.com/RobTillaart/MTP40C
@ -15,9 +15,9 @@
MTP40::MTP40(Stream * str) MTP40::MTP40(Stream * stream)
{ {
_ser = str; _ser = stream;
_buffer[0] = '\0'; _buffer[0] = '\0';
_type = 0xFF; _type = 0xFF;
} }
@ -134,23 +134,30 @@ uint16_t MTP40::getGasConcentration()
{ {
_lastError = MTP40_OK; _lastError = MTP40_OK;
// max read freq 1x per 4 seconds // max read freq 1x per 4 seconds
if (millis() - _lastRead < 4000) return _gasLevel; // last value if (millis() - _lastRead < 4000)
{
return _gasLevel; // last value
}
_lastRead = millis(); _lastRead = millis();
uint8_t cmd[5] = { 0xFE, 0x69, 0x03, 0x7E, 0x61 }; uint8_t cmd[5] = { 0xFE, 0x69, 0x03, 0x7E, 0x61 };
if (request(cmd, 5, 14) ) if (request(cmd, 5, 14) )
{ {
// check valid // check valid
for (uint8_t i = 8; i < 12; i++) for (uint8_t i = 8; i < 12; i++)
{ {
if (_buffer[i] != 0) return 0; if (_buffer[i] != 0)
{
_lastError = MTP40_INVALID_GAS_LEVEL;
if (_suppressError) return _gasLevel;
return _lastError;
}
} }
_gasLevel = _buffer[5] *256 + _buffer[4]; _gasLevel = _buffer[5] * 256 + _buffer[4];
return _gasLevel; return _gasLevel;
} }
_lastError = MTP40_REQUEST_FAILED;
_lastError = MTP40_INVALID_GAS_LEVEL;
if (_suppressError) return _gasLevel; if (_suppressError) return _gasLevel;
return _lastError; return _lastError;
} }
@ -158,7 +165,10 @@ uint16_t MTP40::getGasConcentration()
bool MTP40::setSinglePointCorrection(float spc) bool MTP40::setSinglePointCorrection(float spc)
{ {
if ((spc < 400) || (spc > 5000)) return false; if ((spc < 400) || (spc > 5000))
{
return false;
}
union union
{ {
@ -213,14 +223,14 @@ bool MTP40::closeSelfCalibration()
} }
uint8_t MTP40::getSelfCalibrationStatus() uint16_t MTP40::getSelfCalibrationStatus()
{ {
uint8_t cmd[5] = { 0xFE, 0x28, 0x67, 0x4F, 0xDA }; uint8_t cmd[5] = { 0xFE, 0x28, 0x67, 0x4F, 0xDA };
if (request(cmd, 5, 6) ) if (request(cmd, 5, 6) )
{ {
return _buffer[3]; return _buffer[3];
} }
return 0x02; return MTP40_REQUEST_FAILED;
} }
@ -245,7 +255,8 @@ uint16_t MTP40::getSelfCalibrationHours()
{ {
return _buffer[4] * 256 + _buffer[3]; return _buffer[4] * 256 + _buffer[3];
} }
return 0xFFFF; // to indicate error. _lastError = MTP40_REQUEST_FAILED;
return _lastError;
} }
@ -260,7 +271,7 @@ int MTP40::lastError()
////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////
// //
// PRIVATE // PROTECTED
// //
bool MTP40::request(uint8_t *data, uint8_t commandLength, uint8_t answerLength) bool MTP40::request(uint8_t *data, uint8_t commandLength, uint8_t answerLength)
{ {
@ -438,11 +449,11 @@ const uint8_t auchCRCLo[] = {
#endif #endif
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
// //
// DERIVED CLASSES // DERIVED CLASSES
// //
MTP40C::MTP40C(Stream * str) : MTP40(str) MTP40C::MTP40C(Stream * str) : MTP40(str)
{ {
_type = 2; _type = 2;
@ -455,5 +466,5 @@ MTP40D::MTP40D(Stream * str) : MTP40(str)
}; };
// -- END OF FILE -- // -- END OF FILE --

View File

@ -3,20 +3,17 @@
// FILE: MTP40C.h // FILE: MTP40C.h
// AUTHOR: Rob Tillaart // AUTHOR: Rob Tillaart
// DATE: 2021-08-20 // DATE: 2021-08-20
// VERSION: 0.3.0 // VERSION: 0.3.1
// PURPOSE: Arduino library for MTP40C + MTP40D CO2 sensor // PURPOSE: Arduino library for MTP40C + MTP40D CO2 sensor
// URL: https://github.com/RobTillaart/MTP40C // URL: https://github.com/RobTillaart/MTP40C
// //
// HISTORY: see changelog.md
//
// Based upon datasheet June 2020, version 2.0 // Based upon datasheet June 2020, version 2.0
//
#include "Arduino.h" #include "Arduino.h"
#define MTP40_LIB_VERSION (F("0.3.0")) #define MTP40_LIB_VERSION (F("0.3.1"))
#define MTP40_DEFAULT_ADDRESS 0x64 #define MTP40_DEFAULT_ADDRESS 0x64
@ -25,12 +22,13 @@
#define MTP40_INVALID_AIR_PRESSURE 0x01 #define MTP40_INVALID_AIR_PRESSURE 0x01
#define MTP40_INVALID_GAS_LEVEL 0x02 #define MTP40_INVALID_GAS_LEVEL 0x02
#define MTP40_INVALID_ADDRESS 0xFF #define MTP40_INVALID_ADDRESS 0xFF
#define MTP40_REQUEST_FAILED 0xFFFF
class MTP40 class MTP40
{ {
public: public:
MTP40(Stream * str); MTP40(Stream * stream);
bool begin(uint8_t address = MTP40_DEFAULT_ADDRESS); bool begin(uint8_t address = MTP40_DEFAULT_ADDRESS);
bool isConnected(); bool isConnected();
@ -53,7 +51,7 @@ public:
bool openSelfCalibration(); bool openSelfCalibration();
bool closeSelfCalibration(); bool closeSelfCalibration();
uint8_t getSelfCalibrationStatus(); uint16_t getSelfCalibrationStatus();
bool setSelfCalibrationHours(uint16_t hours); bool setSelfCalibrationHours(uint16_t hours);
uint16_t getSelfCalibrationHours(); uint16_t getSelfCalibrationHours();
@ -108,7 +106,7 @@ protected:
///////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////
// //
// DERIVED CLASSES // DERIVED CLASSES
// //
class MTP40C : public MTP40 class MTP40C : public MTP40
{ {
@ -122,11 +120,11 @@ class MTP40D : public MTP40
public: public:
MTP40D(Stream * str); MTP40D(Stream * str);
// TODO // TODO
// I2C interface // I2C interface
// PWM interface // PWM interface
}; };
// -- END OF FILE -- // -- END OF FILE --

View File

@ -1,9 +1,12 @@
[![Arduino CI](https://github.com/RobTillaart/MTP40C/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci) [![Arduino CI](https://github.com/RobTillaart/MTP40C/workflows/Arduino%20CI/badge.svg)](https://github.com/marketplace/actions/arduino_ci)
[![JSON check](https://github.com/RobTillaart/MTP40C/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/MTP40C/actions/workflows/jsoncheck.yml)
[![Arduino-lint](https://github.com/RobTillaart/MTP40C/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/MTP40C/actions/workflows/arduino-lint.yml) [![Arduino-lint](https://github.com/RobTillaart/MTP40C/actions/workflows/arduino-lint.yml/badge.svg)](https://github.com/RobTillaart/MTP40C/actions/workflows/arduino-lint.yml)
[![JSON check](https://github.com/RobTillaart/MTP40C/actions/workflows/jsoncheck.yml/badge.svg)](https://github.com/RobTillaart/MTP40C/actions/workflows/jsoncheck.yml)
[![GitHub issues](https://img.shields.io/github/issues/RobTillaart/MTP40C.svg)](https://github.com/RobTillaart/MTP40C/issues)
[![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/MTP40C/blob/master/LICENSE) [![License: MIT](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/RobTillaart/MTP40C/blob/master/LICENSE)
[![GitHub release](https://img.shields.io/github/release/RobTillaart/MTP40C.svg?maxAge=3600)](https://github.com/RobTillaart/MTP40C/releases) [![GitHub release](https://img.shields.io/github/release/RobTillaart/MTP40C.svg?maxAge=3600)](https://github.com/RobTillaart/MTP40C/releases)
[![PlatformIO Registry](https://badges.registry.platformio.org/packages/robtillaart/library/MTP40C.svg)](https://registry.platformio.org/libraries/robtillaart/MTP40C)
# MTP40C / MTP40D # MTP40C / MTP40D
@ -90,7 +93,7 @@ Has TTL level RS232, I2C and PWM IO.
| 9 | GND | idem | | 9 | GND | idem |
#### Links #### Related
- https://www.co2.earth/ - current outdoor CO2 level can be used for calibrating. - https://www.co2.earth/ - current outdoor CO2 level can be used for calibrating.
- https://keelingcurve.ucsd.edu/ - historical outdoor CO2 level. - https://keelingcurve.ucsd.edu/ - historical outdoor CO2 level.
@ -237,6 +240,7 @@ moments. Valid values are 24 - 720 .
#### Must #### Must
- documentation
#### Should #### Should
@ -244,7 +248,6 @@ moments. Valid values are 24 - 720 .
- improve readability code (e.g. parameter names) - improve readability code (e.g. parameter names)
- move code from .h to .cpp file - move code from .h to .cpp file
#### Could #### Could
- performance measurements - performance measurements
@ -258,10 +261,19 @@ moments. Valid values are 24 - 720 .
- multiplexer - multiplexer
- investigate commands in PROGMEM? - investigate commands in PROGMEM?
#### Wont (unless on request) #### Wont (unless on request)
## Sponsor ## Sponsor
The development of this MTP40C library is sponsored by [TinyTronics, Netherlands](https://www.tinytronics.nl/shop/nl). The development of this MTP40C library is sponsored by [TinyTronics, Netherlands](https://www.tinytronics.nl/shop/nl).
## Support
If you appreciate my libraries, you can support the development and maintenance.
Improve the quality of the libraries by providing issues and Pull Requests, or
donate through PayPal or GitHub sponsors.
Thank you,

View File

@ -15,9 +15,9 @@
"type": "git", "type": "git",
"url": "https://github.com/RobTillaart/MTP40C.git" "url": "https://github.com/RobTillaart/MTP40C.git"
}, },
"version": "0.3.0", "version": "0.3.1",
"license": "MIT", "license": "MIT",
"frameworks": "arduino", "frameworks": "*",
"platforms": "*", "platforms": "*",
"headers": "MTP40C.h" "headers": "MTP40C.h"
} }

View File

@ -1,5 +1,5 @@
name=MTP40C name=MTP40C
version=0.3.0 version=0.3.1
author=Rob Tillaart <rob.tillaart@gmail.com> author=Rob Tillaart <rob.tillaart@gmail.com>
maintainer=Rob Tillaart <rob.tillaart@gmail.com> maintainer=Rob Tillaart <rob.tillaart@gmail.com>
sentence=Arduino library for MTP40, MTP40C and MTP40D CO2 sensor sentence=Arduino library for MTP40, MTP40C and MTP40D CO2 sensor