Browse Source

Made it a bit more elegant

software_develop
elamre 7 years ago
parent
commit
c84d8317d2
  1. 54
      software/app/ads101x.cpp
  2. 3
      software/app/ads101x.h

54
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<uint8_t>(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;

3
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);

Loading…
Cancel
Save