From c84d8317d23cd54bbc218c7b0461dde50285990b Mon Sep 17 00:00:00 2001 From: elamre Date: Thu, 10 Aug 2017 01:03:21 +0200 Subject: [PATCH] Made it a bit more elegant --- software/app/ads101x.cpp | 54 ++++++++++++++-------------------------- software/app/ads101x.h | 3 ++- 2 files changed, 21 insertions(+), 36 deletions(-) diff --git a/software/app/ads101x.cpp b/software/app/ads101x.cpp index 4546037..d9be1ba 100644 --- a/software/app/ads101x.cpp +++ b/software/app/ads101x.cpp @@ -47,22 +47,18 @@ cADS101x::cADS101x(uint8_t i_readyPin, uint8_t i_address) : void cADS101x::SetOneShot(bool i_oneShot) { m_oneShot = i_oneShot; - WriteSettings(CreateSettings(0)); } void cADS101x::SetGain(enum eGainAmplifier i_gain) { m_gain = i_gain; - WriteSettings(CreateSettings(0)); } void cADS101x::SetMux(enum eInputMux i_mux) { m_mux = i_mux; - WriteSettings(CreateSettings(0)); } void cADS101x::SetSampleSpeed(enum eSampleSpeed i_sampleSpeed) { m_sampleSpeed = i_sampleSpeed; - WriteSettings(CreateSettings(0)); } void cADS101x::WaitSample(void) { @@ -84,34 +80,32 @@ uint16_t cADS101x::CreateSettings(uint8_t start) { void cADS101x::WriteSettings(uint16_t i_settings) { Wire.beginTransmission(m_address); - Wire.write(REGISTER_CONFIG); + Wire.write((uint8_t) REGISTER_CONFIG); Wire.write((uint8_t) (i_settings >> 8)); Wire.write((uint8_t) (i_settings & 0xFF)); - Wire.endTransmission(); + int8_t ret = Wire.endTransmission(); + if (ret) { + Serial.printf("Err writing settings ret: %d\n\r", ret); + } +} +uint16_t cADS101x::ReadRegister(uint8_t i_register) { + Wire.beginTransmission(m_address); + Wire.write(i_register); + Wire.endTransmission(); + Wire.requestFrom(m_address, static_cast(2)); + return ((Wire.read() << 8) | (Wire.read())); } void cADS101x::OneShot(void) { - if (m_oneShot) { - uint16_t settings = CreateSettings(1); - WriteSettings(settings); - } + //if (m_oneShot) { + uint16_t settings = CreateSettings(1); + WriteSettings(settings); + //} } uint16_t cADS101x::GetSettings(void) { - uint16_t settings; - Wire.beginTransmission(m_address); - Wire.write(REGISTER_CONFIG); - Wire.endTransmission(); - Wire.beginTransmission(m_address); - Wire.requestFrom((int) m_address, 2); //16 bits - settings = Wire.read() << 8; - settings |= Wire.read(); - int result = Wire.endTransmission(); - if (result != 0) { - Serial.printf("Error sample i2c: %d \n\r", result); - } - return settings; + return ReadRegister(REGISTER_CONFIG);; } ads_voltage_t cADS101x::ConvertSample(ads_sample_t & sample) { //Raw sample is in (parts of) millivolts, go to micro to remove fractions @@ -142,23 +136,13 @@ ads_voltage_t cADS101x::ConvertSample(ads_sample_t & sample) { returnType *= 3000; break; } - return returnType/1000; + return returnType / 1000; } ads_sample_t cADS101x::RawSample(void) { OneShot(); ads_sample_t sample; - Wire.beginTransmission(m_address); - Wire.write(REGISTER_CONVERSION); - Wire.endTransmission(); - Wire.beginTransmission(m_address); - Wire.requestFrom((int) m_address, 2); //16 bits - sample.rawSample = Wire.read() << 8; - sample.rawSample |= Wire.read(); - int result = Wire.endTransmission(); - if (result != 0) { - Serial.printf("Error sample i2c: %d \n\r", result); - } + sample.rawSample = ReadRegister(REGISTER_CONVERSION); sample.gain = m_gain; sample.mux = m_mux; m_latestSample = sample; diff --git a/software/app/ads101x.h b/software/app/ads101x.h index f8730d8..6612ce5 100644 --- a/software/app/ads101x.h +++ b/software/app/ads101x.h @@ -29,7 +29,7 @@ enum eSampleSpeed { }; struct ads_sample_t { - int16_t rawSample; + uint16_t rawSample; enum eInputMux mux; enum eGainAmplifier gain; }; @@ -55,6 +55,7 @@ public: } private: uint16_t CreateSettings(uint8_t i_startSample); + uint16_t ReadRegister(uint8_t i_register); void WriteSettings(uint16_t i_settings); void SetDefaults(void); void OneShot(void);