dht11 не показывает температуру при подключении часов

Croaton
Offline
Зарегистрирован: 15.12.2016

есть значит такая беда: датчик работает на нескольких библиотеках, все отлично показывает. есть реле, которое должно включаться либо при повышении температуры и влажности либо при наступлении определенного времени. есть модуль часов DS3231.

проблема в том что когда я инициализирую модуль часов в коде температура с датчика перестает читаться, получается ноль. 

если закомментировать строку   rtc.begin(); то на Serial выводится значение, но естественно не работают часы. 

контроллер Leonardo. 

замечал такую же беду при подключении lcd дисплея, после lcd.begin, но дисплей не понадобился и я тогда не заморачивался. подскажите в чем проблема, потому что не могу понять то ли лыжи не едут, то ли...

#include <Thread.h>  // библиотека потоков
#include "DHT.h"
#include <Wire.h>
#include "RTClib.h" //библиотека часов

DHT dht;
RTC_DS3231 rtc;
char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

int Relay1 = 3; // Реле модуль подключен к цифровому выводу 3

Thread ThTime = Thread(); // поток управления реле по времени
Thread ThRelay1 = Thread(); // поток управления реле по событию повышения температуры

float humidity = 0; // Переменная влажности
int temperature = 0; // Переменная температуры


void setup() {  
  Serial.begin(9600);
  
  dht.setup(2); // data pin 2
  
  rtc.begin();
  
  pinMode(Relay1, OUTPUT);    
  ThRelay1.onRun(GlobalRelay);  //Назначаем потоку задачу           
  ThRelay1.setInterval(2000); //Интервал срабатывания, мсек
  digitalWrite(Relay1, HIGH); // реле выключено

  ThTime.onRun(OnTime);  //Назначаем потоку задачу           
  ThTime.setInterval(9000); //Интервал срабатывания, мсек
  digitalWrite(Relay1, HIGH); // реле выключено
}

void loop() {
  delay(dht.getMinimumSamplingPeriod());
      // Проверка прошел ли интервал включения:
  if (ThRelay1.shouldRun())
        ThRelay1.run(); // запускаем поток                     

  if (ThTime.shouldRun())
        ThTime.run(); // запускаем поток
}
void GlobalRelay(){
    CheckTemp();
    Serial.print("Humidity: "); 
    Serial.print(humidity);
    Serial.print(" %\t");
    Serial.print("Temperature: "); 
    Serial.print(temperature);
    Serial.println(" *C");
      if (temperature>26 || humidity>70){
      digitalWrite(Relay1, LOW);   // реле включено
      }
      else{
      digitalWrite(Relay1, HIGH);   // реле выключено
      }
}
void CheckTemp(){
    humidity = dht.getHumidity();
    temperature = dht.getTemperature();
}  
void OnTime(){
    DateTime now = rtc.now(); //получение значения часов
    int th=now.hour();
    Serial.println(th);
    
  if (now.hour()>12||now.hour()<15){ //если время от 12 до 15
  digitalWrite(Relay1, LOW);   // реле включено  
  }
  else{
  digitalWrite(Relay1, HIGH);   // реле выключено
}

 

Croaton
Offline
Зарегистрирован: 15.12.2016

большое спасибо за ответ всем абсолютно

сам уже разобрался