mirror of
https://github.com/eclipse/upm.git
synced 2025-03-14 20:47:30 +03:00
CWLSXXA CO2: Add string based constructor
Signed-off-by: Adelin Dobre <adelin.dobre@rinftech.com> Signed-off-by: Mihai Tudor Panu <mihai.tudor.panu@intel.com>
This commit is contained in:
parent
a3bf6d76a9
commit
8f11061de3
@ -25,6 +25,7 @@
|
||||
#include <iostream>
|
||||
|
||||
#include "cwlsxxa.hpp"
|
||||
#include "upm_string_parser.hpp"
|
||||
|
||||
using namespace upm;
|
||||
using namespace std;
|
||||
@ -40,10 +41,11 @@ static float c2f(float c)
|
||||
return (c * (9.0 / 5.0) + 32.0);
|
||||
}
|
||||
|
||||
|
||||
CWLSXXA::CWLSXXA(int gPin, int hPin, int tPin, float rResistor, float aref) :
|
||||
m_aioCO2(gPin), m_aioHum(0), m_aioTemp(0)
|
||||
m_aioCO2(0), m_aioHum(0), m_aioTemp(0)
|
||||
{
|
||||
m_aioCO2 = new mraa::Aio(gPin);
|
||||
|
||||
m_hasHum = (hPin >= 0) ? true : false;
|
||||
m_hasTemp = (tPin >= 0) ? true : false;
|
||||
|
||||
@ -63,7 +65,7 @@ CWLSXXA::CWLSXXA(int gPin, int hPin, int tPin, float rResistor, float aref) :
|
||||
else
|
||||
m_aResHum = 0;
|
||||
|
||||
m_aResCO2 = (1 << m_aioCO2.getBit());
|
||||
m_aResCO2 = (1 << m_aioCO2->getBit());
|
||||
|
||||
m_temperature = 0.0;
|
||||
m_humidity = 0.0;
|
||||
@ -73,12 +75,83 @@ CWLSXXA::CWLSXXA(int gPin, int hPin, int tPin, float rResistor, float aref) :
|
||||
m_rResistor = rResistor;
|
||||
}
|
||||
|
||||
CWLSXXA::CWLSXXA(std::string initStr)
|
||||
{
|
||||
mraaIo = new mraa::MraaIo(initStr);
|
||||
if(mraaIo == NULL)
|
||||
{
|
||||
throw std::invalid_argument(std::string(__FUNCTION__) +
|
||||
": Failed to allocate memory for internal member");
|
||||
}
|
||||
|
||||
if(!mraaIo->aios.empty())
|
||||
{
|
||||
m_aioCO2 = &mraaIo->aios[0];
|
||||
|
||||
if(mraaIo->aios.size() > 1)
|
||||
{
|
||||
m_hasTemp = 1;
|
||||
m_aioTemp = &mraaIo->aios[1];
|
||||
m_aResTemp = (1 << m_aioTemp->getBit());
|
||||
|
||||
m_hasHum = 1;
|
||||
m_aioHum = &mraaIo->aios[2];
|
||||
m_aResHum = (1 << m_aioHum->getBit());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
m_hasTemp = 0;
|
||||
m_aResTemp = 0;
|
||||
m_hasHum = 0;
|
||||
m_aResHum = 0;
|
||||
|
||||
throw std::invalid_argument(std::string(__FUNCTION__) +
|
||||
": mraa_aio_init() failed, invalid pin?");
|
||||
}
|
||||
|
||||
m_aResCO2 = (1 << m_aioCO2->getBit());
|
||||
|
||||
m_temperature = 0.0;
|
||||
m_humidity = 0.0;
|
||||
m_co2 = 0.0;
|
||||
|
||||
std::vector<std::string> upmTokens;
|
||||
|
||||
if(!mraaIo->getLeftoverStr().empty())
|
||||
{
|
||||
upmTokens = UpmStringParser::parse(mraaIo->getLeftoverStr());
|
||||
}
|
||||
|
||||
for(std::string tok:upmTokens)
|
||||
{
|
||||
if(tok.substr(0,5) == "aref:")
|
||||
{
|
||||
float aref = std::stof(tok.substr(5));
|
||||
m_aref = aref;
|
||||
}
|
||||
if(tok.substr(0,10) == "rResistor:")
|
||||
{
|
||||
float rResistor = std::stof(tok.substr(10));
|
||||
m_rResistor = rResistor;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
CWLSXXA::~CWLSXXA()
|
||||
{
|
||||
if(mraaIo)
|
||||
delete mraaIo;
|
||||
else
|
||||
{
|
||||
delete m_aioCO2;
|
||||
|
||||
if (m_aioHum)
|
||||
delete m_aioHum;
|
||||
if (m_aioTemp)
|
||||
delete m_aioTemp;
|
||||
}
|
||||
}
|
||||
|
||||
void CWLSXXA::update()
|
||||
@ -137,7 +210,7 @@ void CWLSXXA::update()
|
||||
}
|
||||
|
||||
// CO2
|
||||
val = average(&m_aioCO2, samples);
|
||||
val = average(m_aioCO2, samples);
|
||||
volts = (float(val) * (m_aref / m_aResCO2));
|
||||
|
||||
// CO2 range is 0-2000ppm
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <interfaces/iTemperature.hpp>
|
||||
|
||||
#include <mraa/aio.hpp>
|
||||
#include <mraa/initio.hpp>
|
||||
|
||||
// Unlikey to be changable without external circuitry (voltage divider)
|
||||
#define CWLSXXA_DEFAULT_AREF 5.0
|
||||
@ -115,6 +116,13 @@ namespace upm {
|
||||
CWLSXXA(int gPin, int hPin, int tPin, float rResistor=0.0,
|
||||
float aref=CWLSXXA_DEFAULT_AREF);
|
||||
|
||||
/**
|
||||
* Instantiates CWLSXXA CO2 Sensors based on a given string.
|
||||
*
|
||||
* @param initStr string containing specific information for CWLSXXA Sensor.
|
||||
*/
|
||||
CWLSXXA(std::string initStr);
|
||||
|
||||
/**
|
||||
* CWLSXXA object destructor
|
||||
*/
|
||||
@ -170,11 +178,13 @@ namespace upm {
|
||||
|
||||
protected:
|
||||
// CO2 reporting is always supported
|
||||
mraa::Aio m_aioCO2;
|
||||
mraa::Aio *m_aioCO2 = NULL;
|
||||
|
||||
// temperature and humidity are optional features of this transmitter
|
||||
mraa::Aio *m_aioHum;
|
||||
mraa::Aio *m_aioTemp;
|
||||
mraa::Aio *m_aioHum = NULL;
|
||||
mraa::Aio *m_aioTemp = NULL;
|
||||
|
||||
mraa::MraaIo *mraaIo = NULL;
|
||||
|
||||
|
||||
private:
|
||||
|
Loading…
x
Reference in New Issue
Block a user