mirror of
https://github.com/amperka/TroykaMQ.git
synced 2025-09-13 21:56:00 +03:00
update library
This commit is contained in:
122
src/BaseMQ.cpp
Normal file
122
src/BaseMQ.cpp
Normal file
@@ -0,0 +1,122 @@
|
||||
/****************************************************************************/
|
||||
// Function: cpp file for BaseMQ
|
||||
// Hardware: MQ2, MQ3, MQ4, MQ5, MQ6, MQ7, MQ8, MQ9, MQ135
|
||||
// Arduino IDE: Arduino 1.8.3
|
||||
// Author: Igor Dementiev
|
||||
// Date: Jan 19, 2018
|
||||
// Version: v1.1
|
||||
// by www.amperka.ru
|
||||
/****************************************************************************/
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
BaseMQ::BaseMQ(uint8_t pin) {
|
||||
_pin = pin;
|
||||
}
|
||||
|
||||
BaseMQ::BaseMQ(uint8_t pin, uint8_t pinHeater) {
|
||||
_pin = pin;
|
||||
_pinHeater = pinHeater;
|
||||
pinMode(_pinHeater, OUTPUT);
|
||||
}
|
||||
|
||||
// фиксированая калибровка датчика
|
||||
// при знании сопративления датчика на чистом воздухе
|
||||
void BaseMQ::calibrate(float ro) {
|
||||
_ro = ro;
|
||||
_stateCalibrate = true;
|
||||
}
|
||||
|
||||
// калибровка датчика
|
||||
// считывания показаний сопративление датчика на чистом воздухе
|
||||
// далее фиксированая калибровка датчика
|
||||
void BaseMQ::calibrate() {
|
||||
float rs = readRs();
|
||||
float ro = rs / getRoInCleanAir();
|
||||
calibrate(ro);
|
||||
}
|
||||
|
||||
// включение нагревателя на 100%
|
||||
void BaseMQ::heaterPwrHigh() {
|
||||
digitalWrite(_pinHeater, HIGH);
|
||||
_heater = true;
|
||||
_prMillis = millis();
|
||||
}
|
||||
|
||||
// включение нагревателья на 20%
|
||||
void BaseMQ::heaterPwrLow() {
|
||||
analogWrite(_pinHeater, 75);
|
||||
_heater = true;
|
||||
_cooler = true;
|
||||
_prMillis = millis();
|
||||
}
|
||||
|
||||
// выключение нагревателя
|
||||
void BaseMQ::heaterPwrOff() {
|
||||
digitalWrite(_pinHeater, LOW);
|
||||
_heater = false;
|
||||
}
|
||||
|
||||
// циклическое считывание сопративления датчика
|
||||
float BaseMQ::readRs() const {
|
||||
float rs = 0;
|
||||
for (int i = 0; i < MQ_SAMPLE_TIMES; i++) {
|
||||
rs += calculateResistance(analogRead(_pin));
|
||||
delay(MQ_SAMPLE_INTERVAL);
|
||||
}
|
||||
rs = rs / MQ_SAMPLE_TIMES;
|
||||
return rs;
|
||||
}
|
||||
|
||||
|
||||
// сопротивление датчика
|
||||
float BaseMQ::calculateResistance(int sensorADC) const {
|
||||
float sensorVoltage = sensorADC * (OPERATING_VOLTAGE / ADC_VALUE_MAX);
|
||||
float sensorResistance = (OPERATING_VOLTAGE - sensorVoltage) / sensorVoltage * getRL();
|
||||
return sensorResistance;
|
||||
}
|
||||
|
||||
float BaseMQ::readScaled(float a, float b) const {
|
||||
float ratio = readRatio();
|
||||
return exp((log(ratio) - b) / a);
|
||||
}
|
||||
|
||||
float BaseMQ::readRatio() const {
|
||||
return readRs() / getRo();
|
||||
}
|
||||
|
||||
bool BaseMQ::heatingCompleted() const {
|
||||
if ((_heater) && (!_cooler) && (millis() - _prMillis > MQ_HEATING_TIME)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
bool BaseMQ::coolanceCompleted() const {
|
||||
if ((_heater) && (_cooler) && (millis() - _prMillis > MQ_COOLANCE_TIME)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void BaseMQ::cycleHeat() {
|
||||
_heater = false;
|
||||
_cooler = false;
|
||||
heaterPwrHigh();
|
||||
// Serial.println("Heated sensor");
|
||||
}
|
||||
|
||||
bool BaseMQ::atHeatCycleEnd() {
|
||||
if (heatingCompleted()) {
|
||||
heaterPwrLow();
|
||||
// Serial.println("Cool sensor");
|
||||
return false;
|
||||
} else if (coolanceCompleted()) {
|
||||
heaterPwrOff();
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
72
src/BaseMQ.h
Normal file
72
src/BaseMQ.h
Normal file
@@ -0,0 +1,72 @@
|
||||
/****************************************************************************/
|
||||
// Function: Header file for BaseMQ
|
||||
// Hardware: MQ2, MQ3, MQ4, MQ5, MQ6, MQ7, MQ8, MQ9, MQ135
|
||||
// Arduino IDE: Arduino 1.8.3
|
||||
// Author: Igor Dementiev
|
||||
// Date: Jan 19, 2018
|
||||
// Version: v1.1
|
||||
// by www.amperka.ru
|
||||
/****************************************************************************/
|
||||
|
||||
#ifndef BaseMQ_H
|
||||
#define BaseMQ_H
|
||||
#include <Arduino.h>
|
||||
// кол-во считываний значений в цикле
|
||||
#define MQ_SAMPLE_TIMES 5
|
||||
// задержка после каждого считывания датчика
|
||||
#define MQ_SAMPLE_INTERVAL 20
|
||||
// время нагрева датчика
|
||||
#define MQ_HEATING_TIME 6000
|
||||
// время охлаждение датчика
|
||||
#define MQ_COOLANCE_TIME 9000
|
||||
// разрядность АЦП
|
||||
#define ADC_BIT 10
|
||||
// масимальное значение АЦП
|
||||
#define ADC_VALUE_MAX pow(2, ADC_BIT)
|
||||
|
||||
#if defined(__AVR__)
|
||||
#define OPERATING_VOLTAGE 5.0
|
||||
|
||||
#elif defined(__SAM3X8E__) || defined(__SAM3A8C__) || defined(__SAM3A4C__) || defined(__SAMD21G18A__)
|
||||
#define OPERATING_VOLTAGE 3.3
|
||||
#endif
|
||||
|
||||
class BaseMQ {
|
||||
public:
|
||||
BaseMQ(uint8_t pin);
|
||||
BaseMQ(uint8_t pin, uint8_t pinHeater);
|
||||
void calibrate();
|
||||
void calibrate(float ro);
|
||||
void heaterPwrHigh();
|
||||
void heaterPwrLow();
|
||||
void heaterPwrOff();
|
||||
void cycleHeat();
|
||||
bool atHeatCycleEnd();
|
||||
bool heatingCompleted() const;
|
||||
bool coolanceCompleted() const;
|
||||
float readRatio() const;
|
||||
inline bool isCalibrated() const {
|
||||
return _stateCalibrate;
|
||||
};
|
||||
inline float getRo() const {
|
||||
return _ro;
|
||||
};
|
||||
|
||||
protected:
|
||||
float readScaled(float a, float b) const;
|
||||
virtual float getRoInCleanAir() const = 0;
|
||||
virtual int getRL() const = 0;
|
||||
|
||||
private:
|
||||
bool _heater = false;
|
||||
bool _cooler = false;
|
||||
bool _stateCalibrate = false;
|
||||
unsigned long _prMillis = 0;
|
||||
float _ro = 1.0f;
|
||||
uint8_t _pin;
|
||||
uint8_t _pinHeater;
|
||||
float readRs() const;
|
||||
float calculateResistance(int sensorADC) const;
|
||||
};
|
||||
|
||||
#endif
|
13
src/MQ135.cpp
Normal file
13
src/MQ135.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "MQ135.h"
|
||||
|
||||
MQ135::MQ135(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ135::MQ135(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ135::readCO2() {
|
||||
return readScaled(-0.42 , 1.92);
|
||||
}
|
26
src/MQ135.h
Normal file
26
src/MQ135.h
Normal file
@@ -0,0 +1,26 @@
|
||||
#ifndef MQ135_H_
|
||||
#define MQ135_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ135_RL_BOARD 10
|
||||
|
||||
// концентрация углекислого газа в сухом воздухе
|
||||
#define PPM_CO2_IN_CLEAR_AIR 397.13
|
||||
|
||||
class MQ135 : public BaseMQ {
|
||||
public:
|
||||
MQ135(uint8_t pin);
|
||||
MQ135(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readCO2();
|
||||
private:
|
||||
virtual int getRL() const {
|
||||
return MQ135_RL_BOARD;
|
||||
}
|
||||
virtual float getRoInCleanAir() const {
|
||||
return exp((log(PPM_CO2_IN_CLEAR_AIR) * -0.42) + 1.92);
|
||||
}
|
||||
};
|
||||
|
||||
#endif // MQ135_H_
|
25
src/MQ2.cpp
Normal file
25
src/MQ2.cpp
Normal file
@@ -0,0 +1,25 @@
|
||||
#include "MQ2.h"
|
||||
|
||||
MQ2::MQ2(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ2::MQ2(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ2::readLPG() {
|
||||
return readScaled(-0.45, 2.95);
|
||||
}
|
||||
|
||||
unsigned long MQ2::readMethane() {
|
||||
return readScaled(-0.38, 3.21);
|
||||
}
|
||||
|
||||
unsigned long MQ2::readSmoke() {
|
||||
return readScaled(-0.42, 3.54);
|
||||
}
|
||||
|
||||
unsigned long MQ2::readHydrogen() {
|
||||
return readScaled(-0.48, 3.32);
|
||||
}
|
24
src/MQ2.h
Normal file
24
src/MQ2.h
Normal file
@@ -0,0 +1,24 @@
|
||||
#ifndef MQ2_H_
|
||||
#define MQ2_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ2_RL_BOARD 5
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ2_RO_IN_CLEAR_AIR 9.83
|
||||
|
||||
class MQ2 : public BaseMQ {
|
||||
public:
|
||||
MQ2(uint8_t pin);
|
||||
MQ2(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readLPG();
|
||||
unsigned long readMethane();
|
||||
unsigned long readSmoke();
|
||||
unsigned long readHydrogen();
|
||||
private:
|
||||
virtual int getRL() const { return MQ2_RL_BOARD; }
|
||||
virtual float getRoInCleanAir() const { return MQ2_RO_IN_CLEAR_AIR; }
|
||||
};
|
||||
|
||||
#endif // MQ2_H_
|
17
src/MQ3.cpp
Normal file
17
src/MQ3.cpp
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "MQ3.h"
|
||||
|
||||
MQ3::MQ3(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ3::MQ3(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
float MQ3::readAlcoholMgL() {
|
||||
return readScaled(-0.66, -0.62);
|
||||
}
|
||||
|
||||
float MQ3::readAlcoholPpm() {
|
||||
return readScaled(-0.66, -0.62) * 2.2;
|
||||
}
|
22
src/MQ3.h
Normal file
22
src/MQ3.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef MQ3_H_
|
||||
#define MQ3_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ3_RL_BOARD 200
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ3_RO_IN_CLEAR_AIR 60
|
||||
|
||||
class MQ3 : public BaseMQ {
|
||||
public:
|
||||
MQ3(uint8_t pin);
|
||||
MQ3(uint8_t pin, uint8_t pinHeater);
|
||||
float readAlcoholMgL();
|
||||
float readAlcoholPpm();
|
||||
private:
|
||||
virtual int getRL() const { return MQ3_RL_BOARD; }
|
||||
virtual float getRoInCleanAir() const { return MQ3_RO_IN_CLEAR_AIR; }
|
||||
};
|
||||
|
||||
#endif // MQ3_H_
|
13
src/MQ4.cpp
Normal file
13
src/MQ4.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "MQ4.h"
|
||||
|
||||
MQ4::MQ4(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ4::MQ4(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ4::readMethane() {
|
||||
return readScaled(-0.36, 2.54);
|
||||
}
|
21
src/MQ4.h
Normal file
21
src/MQ4.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef MQ4_H_
|
||||
#define MQ4_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ4_RL_BOARD 20
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ4_RO_IN_CLEAR_AIR 4.4
|
||||
|
||||
class MQ4 : public BaseMQ {
|
||||
public:
|
||||
MQ4(uint8_t pin);
|
||||
MQ4(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readMethane();
|
||||
private:
|
||||
virtual int getRL() const { return MQ4_RL_BOARD ; }
|
||||
virtual float getRoInCleanAir() const { return MQ4_RO_IN_CLEAR_AIR; }
|
||||
};
|
||||
|
||||
#endif // MQ4_H_
|
17
src/MQ5.cpp
Normal file
17
src/MQ5.cpp
Normal file
@@ -0,0 +1,17 @@
|
||||
#include "MQ5.h"
|
||||
|
||||
MQ5::MQ5(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ5::MQ5(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ5::readLPG() {
|
||||
return readScaled(-0.39, 1.73);
|
||||
}
|
||||
|
||||
unsigned long MQ5::readMethane() {
|
||||
return readScaled(-0.38, 1.97);
|
||||
}
|
22
src/MQ5.h
Normal file
22
src/MQ5.h
Normal file
@@ -0,0 +1,22 @@
|
||||
#ifndef MQ5_H_
|
||||
#define MQ5_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ5_RL_BOARD 20
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ5_RO_IN_CLEAR_AIR 6.5
|
||||
|
||||
class MQ5 : public BaseMQ {
|
||||
public:
|
||||
MQ5(uint8_t pin);
|
||||
MQ5(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readLPG();
|
||||
unsigned long readMethane();
|
||||
private:
|
||||
virtual int getRL() const { return MQ5_RL_BOARD; }
|
||||
virtual float getRoInCleanAir() const { return MQ5_RO_IN_CLEAR_AIR; }
|
||||
};
|
||||
|
||||
#endif // MQ5_H_
|
13
src/MQ6.cpp
Normal file
13
src/MQ6.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "MQ6.h"
|
||||
|
||||
MQ6::MQ6(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ6::MQ6(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ6::readLPG() {
|
||||
return readScaled(-0.42, 2.91);
|
||||
}
|
21
src/MQ6.h
Normal file
21
src/MQ6.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef MQ6_H_
|
||||
#define MQ6_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ6_RL_BOARD 20
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ6_RO_IN_CLEAR_AIR 10
|
||||
|
||||
class MQ6 : public BaseMQ {
|
||||
public:
|
||||
MQ6(uint8_t pin);
|
||||
MQ6(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readLPG();
|
||||
private:
|
||||
virtual int getRL() const { return MQ6_RL_BOARD ; }
|
||||
virtual float getRoInCleanAir() const { return MQ6_RO_IN_CLEAR_AIR; }
|
||||
};
|
||||
|
||||
#endif // MQ6_H_
|
13
src/MQ7.cpp
Normal file
13
src/MQ7.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "MQ7.h"
|
||||
|
||||
MQ7::MQ7(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ7::MQ7(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ7::readCarbonMonoxide() {
|
||||
return readScaled(-0.77, 3.38);
|
||||
}
|
21
src/MQ7.h
Normal file
21
src/MQ7.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef MQ7_H_
|
||||
#define MQ7_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ7_RL_BOARD 10
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ7_RO_IN_CLEAR_AIR 27
|
||||
|
||||
class MQ7 : public BaseMQ {
|
||||
public:
|
||||
MQ7(uint8_t pin);
|
||||
MQ7(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readCarbonMonoxide();
|
||||
private:
|
||||
virtual int getRL() const { return MQ7_RL_BOARD; }
|
||||
virtual float getRoInCleanAir() const { return MQ7_RO_IN_CLEAR_AIR; }
|
||||
};
|
||||
|
||||
#endif // MQ7_H_
|
13
src/MQ8.cpp
Normal file
13
src/MQ8.cpp
Normal file
@@ -0,0 +1,13 @@
|
||||
#include "MQ8.h"
|
||||
|
||||
MQ8::MQ8(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ8::MQ8(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ8::readHydrogen() {
|
||||
return readScaled(-1.52, 10.49);
|
||||
}
|
21
src/MQ8.h
Normal file
21
src/MQ8.h
Normal file
@@ -0,0 +1,21 @@
|
||||
#ifndef MQ8_H_
|
||||
#define MQ8_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ8_RL_BOARD 10
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ8_RO_IN_CLEAR_AIR 27
|
||||
|
||||
class MQ8 : public BaseMQ {
|
||||
public:
|
||||
MQ8(uint8_t pin);
|
||||
MQ8(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readHydrogen();
|
||||
private:
|
||||
virtual int getRL() const { return MQ8_RL_BOARD; }
|
||||
virtual float getRoInCleanAir() const { return MQ8_RO_IN_CLEAR_AIR ; }
|
||||
};
|
||||
|
||||
#endif // MQ8_H_
|
21
src/MQ9.cpp
Normal file
21
src/MQ9.cpp
Normal file
@@ -0,0 +1,21 @@
|
||||
#include "MQ9.h"
|
||||
|
||||
MQ9::MQ9(uint8_t pin)
|
||||
: BaseMQ(pin) {
|
||||
}
|
||||
|
||||
MQ9::MQ9(uint8_t pin, uint8_t pinHeater)
|
||||
: BaseMQ(pin, pinHeater) {
|
||||
}
|
||||
|
||||
unsigned long MQ9::readLPG() {
|
||||
return readScaled(-0.48, 3.33);
|
||||
}
|
||||
|
||||
unsigned long MQ9::readMethane() {
|
||||
return readScaled(-0.38, 3.21);
|
||||
}
|
||||
|
||||
unsigned long MQ9::readCarbonMonoxide() {
|
||||
return readScaled(-0.48, 3.10);
|
||||
}
|
25
src/MQ9.h
Normal file
25
src/MQ9.h
Normal file
@@ -0,0 +1,25 @@
|
||||
#ifndef MQ9_H_
|
||||
#define MQ9_H_
|
||||
|
||||
#include "BaseMQ.h"
|
||||
|
||||
// резистор установленный на плату (кОм)
|
||||
#define MQ9_RL_BOARD 10
|
||||
// коефициент чистого воздуха из графика
|
||||
#define MQ9_RO_IN_CLEAR_AIR 9.8
|
||||
|
||||
class MQ9 : public BaseMQ {
|
||||
public:
|
||||
MQ9(uint8_t pin);
|
||||
MQ9(uint8_t pin, uint8_t pinHeater);
|
||||
unsigned long readLPG();
|
||||
unsigned long readMethane();
|
||||
unsigned long readCarbonMonoxide();
|
||||
private:
|
||||
// Резистор установленный на плату (кОм)
|
||||
virtual int getRL() const { return MQ9_RL_BOARD; }
|
||||
// коефициент чистого воздуха
|
||||
virtual float getRoInCleanAir() const { return MQ9_RO_IN_CLEAR_AIR; }
|
||||
};
|
||||
|
||||
#endif // MQ9_H_
|
23
src/TroykaMQ.h
Normal file
23
src/TroykaMQ.h
Normal file
@@ -0,0 +1,23 @@
|
||||
/****************************************************************************/
|
||||
// Function: Header file for TroykaMQ
|
||||
// Hardware: MQ2, MQ3, MQ4, MQ5, MQ6, MQ7, MQ8, MQ9, MQ135
|
||||
// Arduino IDE: Arduino 1.8.3
|
||||
// Author: Igor Dementiev
|
||||
// Date: Jan 19, 2018
|
||||
// Version: v1.1
|
||||
// by www.amperka.ru
|
||||
/****************************************************************************/
|
||||
#ifndef TROYKAMQ_H_
|
||||
#define TROYKAMQ_H_
|
||||
|
||||
#include "MQ2.h"
|
||||
#include "MQ3.h"
|
||||
#include "MQ4.h"
|
||||
#include "MQ5.h"
|
||||
#include "MQ6.h"
|
||||
#include "MQ7.h"
|
||||
#include "MQ8.h"
|
||||
#include "MQ9.h"
|
||||
#include "MQ135.h"
|
||||
|
||||
#endif // TROYKAMQ_H_
|
Reference in New Issue
Block a user