0 голосов
Привет. Датчик температуры врал на 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);
}
(2 баллов) 1

Пожалуйста, войдите или зарегистрируйтесь чтобы ответить на этот вопрос.

Добро пожаловать на Бредборд! Сайт вопросов и ответов на тему Arduino, Raspberry Pi и хоббийной электроники в целом. Цель Бредборда — быть максимально полезным. Поэтому мы строго следим за соблюдением правил, боремся с холиворами и оффтопиком.
...