Вывод на дисплей разности температур с 2 датчиков ds18b20

kot0852
Offline
Зарегистрирован: 26.12.2015


#include <OneWire.h>
#include <DallasTemperature.h>
#include <LiquidCrystal.h>
#define ONE_WIRE_BUS 5
LiquidCrystal lcd(6, 7, 10, 11, 12, 13);
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);

DeviceAddress Thermometer1 = 
{0x28, 0xFF, 0x98, 0xC9, 0x81, 0x15, 0x02, 0x0D };  // адреса датчиков 
DeviceAddress Thermometer2 =
 {0x28, 0xFF, 0xD5, 0xAC, 0x62, 0x15, 0x03, 0x64 }; 

void setup() {

  sensors.begin();
  sensors.setResolution(Thermometer1, 10);
  sensors.setResolution(Thermometer2, 10);
  lcd.begin(16, 2);
}

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

 sensors.requestTemperatures();
  lcd.setCursor(0, 0);
 printTemperature(Thermometer1);
 
 lcd.setCursor(8, 0);
 printTemperature(Thermometer2);

  delay(300);
}

В лупе нужно показания первого термометра вычесть из показаний второго и вывести на дисплей. Компилятор постоянно ругается. 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Матом?

kot0852
Offline
Зарегистрирован: 26.12.2015

Нее...говорит нельзя преобразовать беззнаковый тип char в float =)

 

Yarik.Yar
Offline
Зарегистрирован: 07.09.2014

Явно преобразуйте float в int, а int в char.

int tempC = (int)sensors.getTempC(deviceAddress);
tempC = (char) tempC;
kot0852
Offline
Зарегистрирован: 26.12.2015

Вот только мне число нужно с точностью в 0.1 градуса, а char целочисленно.

 

arduinec
Offline
Зарегистрирован: 01.09.2015

kot0852 пишет:

В лупе нужно показания первого термометра вычесть из показаний второго и вывести на дисплей. Компилятор постоянно ругается. 

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

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

 sensors.requestTemperatures();
  lcd.setCursor(0, 0);
 printTemperature(Thermometer1);
  lcd.setCursor(8, 0);
 printTemperature(Thermometer2);
float a = Temperature(Thermometer1);
float b = Temperature(Thermometer2);
  lcd.setCursor(1, 1);
  lcd.print (a - b);

  delay(300);
}

 

 
Проблема в том, что я не знаю как запомнить эти показания. Так тоже не выходит.
kot0852
Offline
Зарегистрирован: 26.12.2015
void loop() {

 sensors.requestTemperatures();
 
 tempS1 = sensors.getTempC(Thermometer1);
 tempS2 = sensors.getTempC(Thermometer2);

 lcd.setCursor(0, 0);
 lcd.print (tempS1);
 
 lcd.setCursor(8, 0);
 lcd.print (tempS2);
 
 lcd.setCursor(1, 1);
 lcd.print (tempS1 - tempS2);
 
  delay(300);
}

Наконец-то разобрался ! Всем спасибо =)