Merge pull request #3 from CAHEK7/cleanup

Various cleanups
This commit is contained in:
Igor89 2016-09-16 19:44:14 +03:00 committed by GitHub
commit 61dc0f9349
18 changed files with 59 additions and 103 deletions

View File

@ -1,14 +1,14 @@
#include "BaseMQ.h" #include "BaseMQ.h"
BaseMQ::BaseMQ(uint8_t pin) { BaseMQ::BaseMQ(uint8_t pin) :
_pin = pin; _pin (pin) {
} }
BaseMQ::BaseMQ(uint8_t pin, uint8_t pinHeater) { BaseMQ::BaseMQ(uint8_t pin, uint8_t pinHeater) :
_pin = pin; _pin (pin),
_pinHeater = pinHeater; _pinHeater (pinHeater)
{
pinMode(_pinHeater, OUTPUT); pinMode(_pinHeater, OUTPUT);
_prMillis = 0;
} }
// калибровка датчика // калибровка датчика
@ -26,8 +26,7 @@ void BaseMQ::calibrate() {
} }
ro = ro/MQ_SAMPLE_TIMES; ro = ro/MQ_SAMPLE_TIMES;
ro = ro/getRoInCleanAir(); ro = ro/getRoInCleanAir();
_ro = ro; calibrate (ro);
_stateCalibrate = true;
} }
void BaseMQ::heaterPwrHigh() { void BaseMQ::heaterPwrHigh() {
@ -49,14 +48,14 @@ void BaseMQ::heaterPwrOff() {
} }
// сопротивление датчика // сопротивление датчика
float BaseMQ::calculateResistance(int rawAdc) { float BaseMQ::calculateResistance(int rawAdc) const {
float vrl = rawAdc*(5.0 / 1023); float vrl = rawAdc*(5.0 / 1023);
float rsAir = (5.0 - vrl)/vrl*getRL(); float rsAir = (5.0 - vrl)/vrl*getRL();
return rsAir; return rsAir;
} }
// считывание датчика // считывание датчика
float BaseMQ::readRs() { float BaseMQ::readRs() const {
float rs = 0; float rs = 0;
for (int i = 0; i < MQ_SAMPLE_TIMES; i++) { for (int i = 0; i < MQ_SAMPLE_TIMES; i++) {
rs += calculateResistance(analogRead(_pin)); rs += calculateResistance(analogRead(_pin));
@ -66,26 +65,23 @@ float BaseMQ::readRs() {
return rs; return rs;
} }
float BaseMQ::getRo() { unsigned long BaseMQ::readScaled(float a, float b) const {
return _ro; float ratio = readRatio();
return exp((log(ratio)-b)/a);
} }
bool BaseMQ::isCalibrated() { float BaseMQ::readRatio() const {
return _stateCalibrate; return readRs()/getRo();
} }
float BaseMQ::readRatio() { bool BaseMQ::heatingCompleted() const {
return readRs()/_ro;
}
bool BaseMQ::heatingCompleted() {
if ((_heater) && (!_cooler) && (millis() - _prMillis > 60000)) if ((_heater) && (!_cooler) && (millis() - _prMillis > 60000))
return true; return true;
else else
return false; return false;
} }
bool BaseMQ::coolanceCompleted() { bool BaseMQ::coolanceCompleted() const {
if ((_heater) && (_cooler) && (millis() - _prMillis > 90000)) if ((_heater) && (_cooler) && (millis() - _prMillis > 90000))
return true; return true;
else else

View File

@ -16,24 +16,32 @@ public:
void heaterPwrLow(); void heaterPwrLow();
void heaterPwrOff(); void heaterPwrOff();
void cycleHeat(); void cycleHeat();
bool heatingCompleted();
bool coolanceCompleted();
bool isCalibrated();
bool atHeatCycleEnd(); bool atHeatCycleEnd();
float getRo(); bool heatingCompleted() const;
float readRatio(); bool coolanceCompleted() const;
float readRatio() const;
inline bool isCalibrated() const {
return _stateCalibrate;
};
inline float getRo() const {
return _ro;
};
protected: protected:
unsigned long readScaled(float a, float b) const;
virtual float getRoInCleanAir() const = 0;
virtual int getRL() const = 0;
private:
bool _heater = false; bool _heater = false;
bool _cooler = false; bool _cooler = false;
bool _stateCalibrate = false; bool _stateCalibrate = false;
unsigned long _prMillis; unsigned long _prMillis = 0;
float _ro; float _ro = 1.0f;
uint8_t _pin; uint8_t _pin;
uint8_t _pinHeater; uint8_t _pinHeater;
float readRs(); float readRs() const;
float calculateResistance(int rawAdc); float calculateResistance(int rawAdc) const;
virtual float getRoInCleanAir() const = 0;
virtual int getRL() const = 0;
}; };
#endif #endif

13
MQ2.cpp
View File

@ -9,22 +9,17 @@ MQ2::MQ2(uint8_t pin, uint8_t pinHeater)
} }
unsigned long MQ2::readLPG() { unsigned long MQ2::readLPG() {
return readPpm(-0.45, 2.95); return readScaled(-0.45, 2.95);
} }
unsigned long MQ2::readMethane() { unsigned long MQ2::readMethane() {
return readPpm(-0.38, 3.21); return readScaled(-0.38, 3.21);
} }
unsigned long MQ2::readSmoke() { unsigned long MQ2::readSmoke() {
return readPpm(-0.42, 3.54); return readScaled(-0.42, 3.54);
} }
unsigned long MQ2::readHydrogen() { unsigned long MQ2::readHydrogen() {
return readPpm(-0.48, 3.32); return readScaled(-0.48, 3.32);
}
int MQ2::readPpm(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ2.h
View File

@ -12,7 +12,6 @@ public:
unsigned long readSmoke(); unsigned long readSmoke();
unsigned long readHydrogen(); unsigned long readHydrogen();
private: private:
int readPpm(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 5; } virtual int getRL() const { return 5; }
// коефициент чистого воздуха // коефициент чистого воздуха

View File

@ -9,14 +9,9 @@ MQ3::MQ3(uint8_t pin, uint8_t pinHeater)
} }
float MQ3::readAlcoholMgL() { float MQ3::readAlcoholMgL() {
return readMgL(-0.66, -0.62); return readScaled(-0.66, -0.62);
} }
float MQ3::readAlcoholPpm() { float MQ3::readAlcoholPpm() {
return readMgL(-0.66, -0.62)*2.2; return readScaled(-0.66, -0.62)*2.2;
}
float MQ3::readMgL(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ3.h
View File

@ -10,7 +10,6 @@ public:
float readAlcoholMgL(); float readAlcoholMgL();
float readAlcoholPpm(); float readAlcoholPpm();
private: private:
float readMgL(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 200; } virtual int getRL() const { return 200; }
// коефициент чистого воздуха // коефициент чистого воздуха

View File

@ -9,10 +9,5 @@ MQ4::MQ4(uint8_t pin, uint8_t pinHeater)
} }
unsigned long MQ4::readMethane() { unsigned long MQ4::readMethane() {
return readPpm(-0.36, 2.54); return readScaled(-0.36, 2.54);
}
int MQ4::readPpm(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ4.h
View File

@ -9,7 +9,6 @@ public:
MQ4(uint8_t pin, uint8_t pinHeater); MQ4(uint8_t pin, uint8_t pinHeater);
unsigned long readMethane(); unsigned long readMethane();
private: private:
int readPpm(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 20; } virtual int getRL() const { return 20; }
// коефициент чистого воздуха // коефициент чистого воздуха

View File

@ -9,14 +9,9 @@ MQ5::MQ5(uint8_t pin, uint8_t pinHeater)
} }
unsigned long MQ5::readLPG() { unsigned long MQ5::readLPG() {
return readPpm(-0.39, 1.73); return readScaled(-0.39, 1.73);
} }
unsigned long MQ5::readMethane() { unsigned long MQ5::readMethane() {
return readPpm(-0.38, 1.97); return readScaled(-0.38, 1.97);
}
int MQ5::readPpm(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ5.h
View File

@ -10,7 +10,6 @@ public:
unsigned long readLPG(); unsigned long readLPG();
unsigned long readMethane(); unsigned long readMethane();
private: private:
int readPpm(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 20; } virtual int getRL() const { return 20; }
// коефициент чистого воздуха // коефициент чистого воздуха

View File

@ -9,10 +9,5 @@ MQ6::MQ6(uint8_t pin, uint8_t pinHeater)
} }
unsigned long MQ6::readLPG() { unsigned long MQ6::readLPG() {
return readPpm(-0.42, 2.91); return readScaled(-0.42, 2.91);
}
int MQ6::readPpm(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ6.h
View File

@ -9,7 +9,6 @@ public:
MQ6(uint8_t pin, uint8_t pinHeater); MQ6(uint8_t pin, uint8_t pinHeater);
unsigned long readLPG(); unsigned long readLPG();
private: private:
int readPpm(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 20; } virtual int getRL() const { return 20; }
// коефициент чистого воздуха // коефициент чистого воздуха

View File

@ -9,10 +9,5 @@ MQ7::MQ7(uint8_t pin, uint8_t pinHeater)
} }
unsigned long MQ7::readCarbonMonoxide() { unsigned long MQ7::readCarbonMonoxide() {
return readPpm(-0.77, 3.38); return readScaled(-0.77, 3.38);
}
int MQ7::readPpm(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ7.h
View File

@ -9,7 +9,6 @@ public:
MQ7(uint8_t pin, uint8_t pinHeater); MQ7(uint8_t pin, uint8_t pinHeater);
unsigned long readCarbonMonoxide(); unsigned long readCarbonMonoxide();
private: private:
int readPpm(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 10; } virtual int getRL() const { return 10; }
// коефициент чистого воздуха // коефициент чистого воздуха

View File

@ -9,10 +9,5 @@ MQ8::MQ8(uint8_t pin, uint8_t pinHeater)
} }
unsigned long MQ8::readHydrogen() { unsigned long MQ8::readHydrogen() {
return readPpm(-1.52, 10.49); return readScaled(-1.52, 10.49);
}
int MQ8::readPpm(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ8.h
View File

@ -9,7 +9,6 @@ public:
MQ8(uint8_t pin, uint8_t pinHeater); MQ8(uint8_t pin, uint8_t pinHeater);
unsigned long readHydrogen(); unsigned long readHydrogen();
private: private:
int readPpm(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 10; } virtual int getRL() const { return 10; }
// коефициент чистого воздуха // коефициент чистого воздуха

11
MQ9.cpp
View File

@ -9,18 +9,13 @@ MQ9::MQ9(uint8_t pin, uint8_t pinHeater)
} }
unsigned long MQ9::readLPG() { unsigned long MQ9::readLPG() {
return readPpm(-0.48, 3.33); return readScaled(-0.48, 3.33);
} }
unsigned long MQ9::readMethane() { unsigned long MQ9::readMethane() {
return readPpm(-0.38, 3.21); return readScaled(-0.38, 3.21);
} }
unsigned long MQ9::readCarbonMonoxide() { unsigned long MQ9::readCarbonMonoxide() {
return readPpm(-0.48, 3.10); return readScaled(-0.48, 3.10);
}
int MQ9::readPpm(float a, float b) {
float ratio = readRs()/_ro;
return pow(M_E, (log(ratio)-b)/a);
} }

1
MQ9.h
View File

@ -11,7 +11,6 @@ public:
unsigned long readMethane(); unsigned long readMethane();
unsigned long readCarbonMonoxide(); unsigned long readCarbonMonoxide();
private: private:
int readPpm(float a, float b);
// Резистор установленный на плату (кОм) // Резистор установленный на плату (кОм)
virtual int getRL() const { return 10; } virtual int getRL() const { return 10; }
// коефициент чистого воздуха // коефициент чистого воздуха