Вывод показаний термометра ds1820 на i2c дисплей не обновляется

autogen

✩✩✩✩✩✩✩
6 Авг 2018
10
4
Добрый день, господа.
Собственно, проблема заключается в том, что я не могу дотумкать, где я накосячил.
Сам программированием не занимаюсь, но у друга семьи возникла проблема с инкубатором, и он меня ОЧЕНЬ попросил быстренько сваять ему систему контроля.
Суть простая. Несколько реле, один экран двустрочный для вывода показаний влажности и температуры, датчик температуры ds1820, а датчиком влажности служит zl-shr03a-01a.
все работает, реле щелкают по заданным параметрам температуры и влажности. Но вот показания на экране выводятся по-разному: влажность в реальном времени отображается, а температура застывает на показаниях, полученных при включении, и до перезагрузки не меняется. Напомню, реле реагируют на температуру(то есть ардуина видит изменения), не меняется только на экране.

Если у кого есть соображения по моим косякам, буду рад за подсказки. Arduino UNO R3.
C++:
[code]
/**
 * ReadSHT1xValues
 *
 * Read temperature and humidity values from an SHT1x-series (SHT10,
 * SHT11, SHT15) sensor.
 *
  */
#include <DallasTemperature.h> //Подключаем библиотеку для датчика температуры
#include <OneWire.h> //Подключаем вторую библиотеку для датчика температуры
#define ONE_WIRE_BUS 9 // номер пина к которому подключен DS18B20
OneWire oneWire(ONE_WIRE_BUS);
DallasTemperature sensors(&oneWire);
#include <SHT1x.h>
// Specify data and clock connections and instantiate SHT1x object
#define dataPin  10
#define clockPin 11
SHT1x sht1x(dataPin, clockPin);
//Compatible with the Arduino IDE 1.0
//Library version:1.1
#include <Wire.h>
#include <LiquidCrystal_I2C.h> //Подключаем библиотеку для экрана
LiquidCrystal_I2C lcd(0x3F,16,2);  // set the LCD address to 0x27 for a 16 chars and 2 line display
int RELAYHUM = 8; //Инициализируем реле управления влажностью
int RELAYPODOGREV = 7; //Инициализируем реле управления подогревом
int RELAYRECYCLE = 6; //Инициализируем реле управления вентиляторами рециркуляции
int RELAYVENTIL = 5; //Инициализируем реле управления проветриванием
int RELAYMOTORFWD = 4; //Инициализируем реле управления мотором переворота вперед
int RELAYMOTORBKW = 3; //Инициализируем реле управления мотором переворота назад
void setup()
{
pinMode (RELAYHUM, OUTPUT); digitalWrite (RELAYHUM, HIGH);
pinMode (RELAYPODOGREV, OUTPUT); digitalWrite (RELAYPODOGREV, HIGH);
pinMode (RELAYRECYCLE, OUTPUT); digitalWrite (RELAYRECYCLE, LOW);
pinMode (RELAYVENTIL, OUTPUT); digitalWrite (RELAYVENTIL,HIGH);
pinMode (RELAYMOTORFWD, OUTPUT); digitalWrite (RELAYMOTORFWD, HIGH);
pinMode (RELAYMOTORBKW, OUTPUT); digitalWrite (RELAYMOTORBKW, HIGH);
  sensors.begin(); 
  lcd.init();                      // initialize the lcd
   // Print a message to the LCD.
  lcd.backlight();
 }
 void motor_reverse()
 {digitalWrite (RELAYMOTORFWD, HIGH);
 delay (3600000);
 digitalWrite (RELAYMOTORFWD, LOW); digitalWrite (RELAYMOTORBKW, HIGH);
 delay (3600000);
 digitalWrite (RELAYMOTORBKW, LOW);
 }
void loop()
{
  sensors.requestTemperatures();
  int TempC;
  TempC = sensors.getTempCByIndex(0);
  int humidity;
  // Read values from the sensor
   humidity = sht1x.readHumidity();
   if (humidity < 65)
   {digitalWrite (RELAYHUM, LOW); digitalWrite (RELAYVENTIL, HIGH);}
   if (humidity > 70)
   {digitalWrite (RELAYHUM, HIGH); digitalWrite (RELAYVENTIL, LOW);}
  // Print the values to the LCD
   lcd.print("Temp: ");
  lcd.print(TempC);
 lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(humidity);
  lcd.println("% ");
lcd.setCursor(0, 2);
if (TempC < 36)
{digitalWrite (RELAYPODOGREV, LOW);}
else
{digitalWrite (RELAYPODOGREV, HIGH);}


  delay(100);

}
[/CODE]
 

Rostislav_Lv

✩✩✩✩✩✩✩
16 Мар 2019
3
0
C++:
  // Print the values to the LCD
  lcd.print("Temp: ");
  lcd.print(TempC);
  lcd.setCursor(0, 1);
  lcd.print("Humidity: ");
  lcd.print(humidity);
  lcd.println("% ");
  lcd.setCursor(0, 2);
Вместо этого попробуйте так:

C++:
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("Temp: ");
lcd.print(TempC);
lcd.setCursor(0, 1);
lcd.print("Humidity: ");
lcd.print(humidity);
lcd.println("% ");