Измеритель температуры ошибка

1qq(Nikita)

✩✩✩✩✩✩✩
20 Июл 2021
10
0
Заголовок темы должен отражать содержимое. Отредактируй или ветка будет удалена
Здраствуйте. Пытаюсь сделать регулятор температуры
Схема работы: С датчика температуры (DS18B20)приходит сигал в переменную temperature и записывается в нее. Далее сравнивается с другой переменной z и если
temperature>z больше на 2 градуса подать сигнал на пин D4.
Проблема:
Если напрямую сравнивать temperature>z то выходит 2 ошибки :
37:17: error: invalid operands of types 'float()' and 'float' to binary 'operator>'
exit status 1
invalid operands of types 'float()' and 'float' to binary 'operator>'

Я пытаюсь ее решить перезаписыванием данных в другую переменную float t=temperature но выходит другая ошибка:

11:11: note: suggested alternative: 'operator+'
exit status 1
'temperature' was not declared in this scope

Также я прикрепил скетч
Заранее СПАСИБО
 

Вложения

Сотнег

★★★★★★★
15 Янв 2020
4,446
1,520
C-like:
#include <OneWire.h>                  // Подключаем библиотеку для взаимодействия с устройствами, работающими на шине и по протоколу 1-Wire
#include <DallasTemperature.h>        // Подключаем библиотеку с функциями для работы с DS18B20 (запросы, считывание и преобразование возвращаемых данных)

#define ONE_WIRE_BUS 2                // Указываем пин подключения data-вывода датчика температуры
#define term_power 4                  // Указываем пин подключения питания датчика температуры

OneWire oneWire(ONE_WIRE_BUS);        // Сообщаем библиотеке об устройстве, работающем по протоколу 1-Wire
DallasTemperature sensors(&oneWire);  // Связываем функции библиотеки DallasTemperature с нашим 1-Wire устройством (DS18B20)

float t;
float z;

float temperature() { // Измеряем температуру 10 секунд
  digitalWrite(term_power, HIGH);                // Включаем питание датчика температуры
  delay(100);                                    // Задержка перед первым измерением
  sensors.requestTemperatures();                 // Запрос на измерение температуры (1-й ошибочный)
  delay(500);                                    // Задержка перед поторным измерением
  sensors.requestTemperatures();                 // Запрос на измерение температуры (повторный)
  float t = float(sensors.getTempCByIndex(0));   // Получаем значение температуры
  digitalWrite(term_power, LOW);                 // Отключаем питание датчика температуры
  delay(9400);                                   // Задержка, чтобы датчик не нагревался от частых измерений
  return(t);                                     // Возвращаем значение температуры в место вызова функции
}

void setup(){
  pinMode(term_power, OUTPUT);    // Определяем пин подключения питания датчика температуры
  sensors.begin();
  Serial.begin(9600);
    
    t = temperature();
}




void loop(){


    // КОД К СЕРВО
 if (t>z + 2){
     digitalWrite (4,LOW);
}
}
 
  • Красота! +2
Реакции: 1qq(Nikita)

1qq(Nikita)

✩✩✩✩✩✩✩
20 Июл 2021
10
0
@Сотнег,
Извините пожалуйста а не подскажите как сделать чтобы измерение температуры происходило бесконечно потомучто в вашем коде измереятся только 1 раз
 

1qq(Nikita)

✩✩✩✩✩✩✩
20 Июл 2021
10
0
@Сотнег,

КОД:
#include <OneWire.h>                  // Подключаем библиотеку для взаимодействия с устройствами, работающими на шине и по протоколу 1-Wire
#include <DallasTemperature.h>        // Подключаем библиотеку с функциями для работы с DS18B20 (запросы, считывание и преобразование возвращаемых данных)

#define ONE_WIRE_BUS 2                // Указываем пин подключения data-вывода датчика температуры
#define term_power 4                  // Указываем пин подключения питания датчика температуры

OneWire oneWire(ONE_WIRE_BUS);        // Сообщаем библиотеке об устройстве, работающем по протоколу 1-Wire
DallasTemperature sensors(&oneWire);  // Связываем функции библиотеки DallasTemperature с нашим 1-Wire устройством (DS18B20)

float t;
float z;


void setup(){
  pinMode(term_power, OUTPUT);    // Определяем пин подключения питания датчика температуры
  sensors.begin();
  Serial.begin(9600);
  
    t = temperature();
}




void loop(){

float temperature() { // Измеряем температуру 10 секунд
  digitalWrite(term_power, HIGH);                // Включаем питание датчика температуры
  delay(100);                                    // Задержка перед первым измерением
  sensors.requestTemperatures();                 // Запрос на измерение температуры (1-й ошибочный)
  delay(500);                                    // Задержка перед поторным измерением
  sensors.requestTemperatures();                 // Запрос на измерение температуры (повторный)
  float t = float(sensors.getTempCByIndex(0));   // Получаем значение температуры
  digitalWrite(term_power, LOW);                 // Отключаем питание датчика температуры
  delay(9400);
  Serial.println(t, 1);// Задержка, чтобы датчик не нагревался от частых измерений
  return(t);                                     // Возвращаем значение температуры в место вызова функции
}

}
Если сделать вот так то выходит ошибка;
27:21: error: a function-definition is not allowed here before '{' token
exit status 1
'temperature' was not declared in this scope
 

poty

★★★★★★✩
19 Фев 2020
3,261
948
Переносить нужно не функцию, а её использование:
t = temperature();
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
в функции замера не нужно 2 раза температуру запрашивать, а ошибка выскакивает из-за неправильной задержки, она должна быть больше, либо нужно уменьшить разрешение датчика, если точность не важна.
кроме того, не нужно использовать 2 пина для датчика, этот датчик может работать от паразитного питания.
смотрите даташит чтобы избежать подобных ошибок
 

IamNikolay

★★★✩✩✩✩
15 Янв 2020
820
175
многие датчики в этом режиме глючат
смотря какую схему подключения использовать и что в коде прописано, если как тут - пара замеров подряд и схема без конденсатора, то да, вероятно будут проблемы, т.к. питания может не хватить на пару быстрых замеров + запись в память и чтение из неё.
Если делать все по даташиту - проблем не будет.