WEMOS D1 + DallasTe температура: как напечатать сравнение температуры и температуры, если

Я делаю контроллер отопления с DS18B20 и платой Wemos D1, но если я попытаюсь распечатать или проверить температуру в if затем вернуть 0 в int,
В чем проблема?

//  This Arduino sketch reads DS18B20 "1-Wire" digital
//  temperature sensors.
//  Copyright (c) 2010 Mark McComb, hacktronics LLC
//  License: <a href="http://www.opensource.org/licenses/mit-license.php" rel="nofollow">http://www.opensource.org/licenses/mit-license.php</a> (Go crazy)
//  Tutorial:
//  <a href="http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html" rel="nofollow">http://www.hacktronics.com/Tutorials/arduino-1-wire-tutorial.html</a>

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

// Data wire is plugged into pin 3 on the Arduino
#define ONE_WIRE_BUS 0

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

// Assign the addresses of your 1-Wire temp sensors.
// See the tutorial on how to obtain these addresses:
// <a href="http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html" rel="nofollow">http://www.hacktronics.com/Tutorials/arduino-1-wire-address-finder.html</a>
const int mintemp = 30;
DeviceAddress insideThermometer = { 0x28,  0xFF,  0x83,  0x51,  0xB2,  0x17,  0x4,  0x8A };
DeviceAddress outsideThermometer = { 0x28,  0xFF,  0x4F,  0xAB,  0xC4,  0x17,  0x5,  0x83 };
DeviceAddress dogHouseThermometer = { 0x28,  0xFF,  0xBF,  0xA9,  0xC4,  0x17,  0x4,  0x7C };

void setup(void)
{
// start serial port
Serial.begin(112500);
// Start up the library
sensors.begin();
// set the resolution to 10 bit (good enough?)
sensors.setResolution(insideThermometer, 10);
sensors.setResolution(outsideThermometer, 10);
sensors.setResolution(dogHouseThermometer, 10);
}

void printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
if (tempC == -127.00) {
Serial.print("Error getting temperature");
} else {
Serial.print("C: ");
Serial.print(tempC);
Serial.print(" F: ");
Serial.print(DallasTemperature::toFahrenheit(tempC));
}
}

void loop(void)
{
delay(2000);
Serial.print("Getting temperatures...\n\r");
sensors.requestTemperatures();

Serial.print("Inside temperature is: ");
printTemperature(insideThermometer);
Serial.print("\n\r");
Serial.print("Outside temperature is: ");
printTemperature(outsideThermometer);
Serial.print("\n\r");
Serial.print("Dog House temperature is: ");
printTemperature(dogHouseThermometer);
Serial.print("\n\r\n\r");
int insideThermometer = (int)insideThermometer;
Serial.print(insideThermometer); //In Serial this give 0.
if(insideThermometer > mintemp){
Serial.print("work");
Serial.print(insideThermometer);
}
}

-5

Решение

В этой строке:

int insideThermometer = (int)insideThermometer;

Вы создаете локальную переменную и назначаете ее себе. Не то, что вы хотели. Глобальная переменная, которую вы пытаетесь использовать,

DeviceAddress insideThermometer = { 0x28,  0xFF,  0x83,  0x51,  0xB2,  0x17,  0x4,  0x8A };

Если вы посмотрите на исходный код, DeviceAddress это typedef’d как

typedef uint8_t DeviceAddress[8];

Если вы хотите получить температуру, вам нужно позвонить sensors.getTempC(insideThermometer)что вы уже делаете в printTemperature функция. Так как вы вызываете эту функцию перед тестированием temp, просто измените ее так, чтобы она возвращала temp:

float printTemperature(DeviceAddress deviceAddress)
{
float tempC = sensors.getTempC(deviceAddress);
float tempF = 0;
if (tempC == -127.00) {
Serial.print("Error getting temperature");
} else {
Serial.print("C: ");
Serial.print(tempC);
Serial.print(" F: ");
tempF = DallasTemperature::toFahrenheit(tempC);
Serial.print(tempF);
}
return tempF;
}

Затем измените на

int insideTempF = printTemperature(insideThermometer);
....
if (insideTempF > mintemp) {
....

(Вы можете изменить имя функции на что-то вроде printAndReturnTemperature поскольку это более ясно заявляет о его новой функциональности.)

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]