Привет. Датчик температуры врал на 5 градусов, поэтому решил подцепить его к опорному напряжению.
В рабочем скетче добавил соответствующие строки. Теперь компилятор выдает ошибку :
no match for 'operator*' (operand types are 'TroykaThermometer' and 'double')
и выделяет строку "float voltage = thermometer * aref_voltage;"
Замена float на double не помогла. Подскажите, в чем ошибка. Скетч ниже.
#include <TroykaThermometer.h> // библиотека для работы с аналоговым термометром (Troyka-модуль)
#include <TroykaMQ.h> // библиотека для работы с датчиками MQ (Troyka-модуль)
#define PIN_MQ135 (A0) // имя для пина, к которому подключен датчик
#define PIN_MQ135_HEATER 11 // имя для пина, к которому подключен нагреватель датчика
#define PIN_RELAY_Temperature 5
#define PIN_RELAY_MQ135 6
#define aref_voltage 3.3 // подтягиваем 3.3V к ARef
TroykaThermometer thermometer(A1); // создаём объект для работы с аналоговым термометром и передаём ему номер пина выходного сигнала
MQ135 mq135(PIN_MQ135); // создаём объект для работы с датчиком и передаём ему номер пина выходного сигнала и нагревателя
void setup() {
Serial.begin(9600); // открываем последовательный порт
analogReference(EXTERNAL);
mq135.calibrate();
Serial.print("Ro = "); // выводим сопротивление датчика в чистом воздухе (Ro) в serial-порт
Serial.println(mq135.getRo());
pinMode(PIN_RELAY_Temperature, OUTPUT); // Конфигурируем нужный пин на выход
digitalWrite(PIN_RELAY_Temperature, LOW);
pinMode(PIN_RELAY_MQ135, OUTPUT); // Конфигурируем нужный пин на выход
digitalWrite(PIN_RELAY_MQ135, LOW);
}
void loop() {
thermometer.read(); // считываем данные с аналогового термометра
Serial.print("Temperature "); // вывод показателей аналогового термометра в градусах Цельсия
Serial.print(thermometer.getTemperatureC());
double voltage = thermometer * aref_voltage;
voltage /= 1024.0;
float temperatureC = (voltage - 0.5) * 100 ;
Serial.print(temperatureC); Serial.println(" degrees C"); // выводим температуру
Serial.print("\tCO2: ");
Serial.print(mq135.readCO2());
Serial.println(" ppm"); // выводим значения газов в ppm
// Проверяем, достигнуто ли пороговое значение
if (thermometer.getTemperatureC()<17) { // если значение больше допустимого...
digitalWrite(PIN_RELAY_Temperature, HIGH); // включаем реле
}
else { // иначе...
digitalWrite(PIN_RELAY_Temperature, LOW); // Отключаем реле - посылаем высокий уровень сигнала
}
// Проверяем, достигнуто ли пороговое значение
if (mq135.readCO2()>400) { // если значение больше допустимого...
digitalWrite(PIN_RELAY_MQ135, HIGH); // включаем реле
}
else { // иначе...
digitalWrite(PIN_RELAY_MQ135, LOW); // Отключаем реле - посылаем высокий уровень сигнала
}
delay (3000);
}