Вопрос

Pavlik
Offline
Зарегистрирован: 09.01.2016
Здравствуйте!

 

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

Мой код рабочий. У меня проблема с переменной температуры.

Я понимаю что что бы сравнить её с заданным порогом температуры она должна быть числом.

#include <OneWire.h>
#include <DallasTemperature.h>

#define ONE_WIRE_BUS 2


OneWire oneWire(ONE_WIRE_BUS);

DallasTemperature sensors(&oneWire);

DeviceAddress Thermometer1 = { 
  0x28, 0xFF, 0x60, 0x78, 0x91, 0x15, 0x01, 0x23 };  // адрес датчика DS18B20 28 FF 60 78 91 15 1 23  
DeviceAddress Thermometer2 = { 
  0x28, 0xFF, 0xD1, 0xBA, 0x81, 0x15, 0x01, 0xD5 };  // адрес датчика28 FF D1 BA 81 15 1 D5
DeviceAddress Thermometer3 = { 
  0x28, 0xFF, 0x10, 0xA0, 0x63, 0x14, 0x02, 0xB7 };  // адрес датчика28   28 FF 10 A0 63 14 2 B7

void setup() {
  sensors.begin();
  sensors.setResolution(Thermometer1, 10);
  sensors.setResolution(Thermometer2, 10);
  sensors.setResolution(Thermometer3, 10);

  pinMode(3, OUTPUT); // Инициализируем цифровой вход/выход в режиме выхода.

  Serial.begin(9600);
}

void printTemperature(DeviceAddress deviceAddress) {
  float tempC = sensors.getTempC(deviceAddress);
  Serial.println(tempC);
}
void loop() {

  sensors.requestTemperatures();
  Serial.print("Sensor1  ");
  printTemperature(Thermometer1);
  
  Serial.print("Sensor2  ");
  printTemperature(Thermometer2);

  Serial.print("Sensor3  ");
  printTemperature(Thermometer3);


 if(ЧТО СЮДА ПИСАТЬ?????>27) digitalWrite(3, HIGH); //Если температура больше заданной диод горит
else digitalWrite(3, LOW); // Если меньше - погашен.

  delay(5000); // Пауза между измерениями 
}

 

 

Araris
Offline
Зарегистрирован: 09.11.2012

У Вас уже есть переменная, в которую считывается значение температуры - float tempC

Сделайте её глобальной, или переместите в loop(), тогда условие будет примерно такое:

if(tempC > 27) digitalWrite(3, HIGH);

if(tempC < 25) digitalWrite(3, LOW);

Два условия и 25 с 27 - это гистерезиса ради.

P.S. Название темы, мягко говоря, неудачное.

Pavlik
Offline
Зарегистрирован: 09.01.2016
void loop() {

  sensors.requestTemperatures();
  Serial.print("Sensor1_ulisa  ");
  printTemperature(Thermometer1);
  float temp1 = sensors.getTempC(Thermometer1);
  
  Serial.print("Sensor2  ");
  printTemperature(Thermometer2);
  float temp2 = sensors.getTempC(Thermometer2);
 
  Serial.print("Sensor3_microshema  ");
  printTemperature(Thermometer3);
  float temp3 = sensors.getTempC(Thermometer3);

if(temp2 > 27.00) digitalWrite(3, HIGH); // зажигаем светодиод

if(temp2 < 25.50) digitalWrite(3, LOW); // выключаем светодиод

Спасибо. Помогли. Все работает как надо. Хорошо что подсказали про гистерезис. Так удобнее.

Объявил переменную в  loop()

За название темы прошу прощения. Хотел сделать "предпросмотр" сообщения. Без названия темы не позволяло. Написал туда просто "Вопрос". Потом и забыл вообще её исправить. Самого раздражают подобные названия.

 

 

 

Pavlik
Offline
Зарегистрирован: 09.01.2016
myOLED.setFont(MegaNumbers); 
myOLED.print(String(sensors.getTempC(Thermometer1),2), CENTER, 12);

Подскажите пожалуйста еще. Пишу здесь, т.к. относится к данному проекту.

Я так понимаю шрифт "MegaNumbers" не знает знака "-".

Не могу вывести им отрицательное значение температуры. Минуса вообще не отображает. Что мне можно сделать? Библиотеку подправить? Подскажите в трех словах.

 

Stas046
Offline
Зарегистрирован: 10.12.2014

В трех словах: Ванга в отпуске

На что выводиться? Какую библиотеку? Где скетч?